@@ -12,11 +12,16 @@ class EvaluateDivision {
1212 var rest = [ Double] ( )
1313
1414 for query in queries {
15- guard let _ = dict [ query. first! ] , let _ = dict [ query. last! ] else {
16- rest . append ( - 1.0 )
15+ guard let first = query. first, let last = query. last else {
16+ res . append ( - 1.0 )
1717 continue
18- }
18+ }
1919
20+ guard let _ = dict [ first] , let _ = dict [ last] else {
21+ res. append ( - 1.0 )
22+ continue
23+ }
24+
2025 bfs ( query, dict, & rest)
2126 }
2227
@@ -27,38 +32,36 @@ class EvaluateDivision {
2732 var dict = [ String: [ ( String, Double) ] ] ( )
2833
2934 for (i, equation) in equations. enumerated ( ) {
30- let dividend = equation. first!, divisor = equation. last!, divideRes = values [ i]
35+ guard let dividend = equation. first, let divisor = equation. last else {
36+ continue
37+ }
3138
32- insert ( dividend, divisor , divideRes , to : & dict )
33- insert ( divisor, dividend, 1.0 / divideRes , to : & dict )
39+ dict [ dividend] = dict [ dividend , default : [ ] ] + [ ( divisor , values [ i ] ) ]
40+ dict [ divisor] = dict [ divisor , default : [ ] ] + [ ( dividend, 1.0 / values [ i ] ) ]
3441 }
3542
3643 return dict
3744 }
3845
39- fileprivate func insert( _ dividend: String , _ divisor: String , _ divideRes: Double , to dict: inout [ String : [ ( String , Double ) ] ] ) {
40- if dict [ dividend] == nil {
41- dict [ dividend] = [ ( divisor, divideRes) ]
42- } else {
43- dict [ dividend] !. append ( ( divisor, divideRes) )
44- }
45- }
46-
4746 fileprivate func bfs( _ query: [ String ] , _ dict: [ String : [ ( String , Double ) ] ] , _ rest: inout [ Double ] ) {
48- var visited = Set ( [ query . first! ] )
49- var qStrs = [ query . first! ]
47+ var visited = Set ( [ first] )
48+ var qStrs = [ first]
5049 var qVals = [ 1.0 ]
5150
5251 while !qStrs. isEmpty {
5352 let currentStr = qStrs. removeFirst ( )
5453 let currentVal = qVals. removeFirst ( )
5554
56- if currentStr == query . last! {
55+ if currentStr == last {
5756 rest. append ( currentVal)
5857 return
5958 }
6059
61- for (str, val) in dict [ currentStr] ! {
60+ guard let candidates = dict [ currentStr] else {
61+ continue
62+ }
63+
64+ for (str, val) in candidates {
6265 guard !visited. contains ( str) else {
6366 continue
6467 }
0 commit comments