@@ -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 {
15+ guard let first = query. first, let last = query. last else {
1616 rest. append ( - 1.0 )
1717 continue
18- }
18+ }
1919
20+ guard let _ = dict [ first] , let _ = dict [ last] else {
21+ rest. append ( - 1.0 )
22+ continue
23+ }
24+
2025 bfs ( query, dict, & rest)
2126 }
2227
@@ -27,38 +32,41 @@ 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+ guard let first = query. first, let last = query. last else {
48+ rest. append ( - 1.0 )
49+ return
50+ }
51+
52+ var visited = Set ( [ first] )
53+ var qStrs = [ first]
5054 var qVals = [ 1.0 ]
5155
5256 while !qStrs. isEmpty {
5357 let currentStr = qStrs. removeFirst ( )
5458 let currentVal = qVals. removeFirst ( )
5559
56- if currentStr == query . last! {
60+ if currentStr == last {
5761 rest. append ( currentVal)
5862 return
5963 }
6064
61- for (str, val) in dict [ currentStr] ! {
65+ guard let candidates = dict [ currentStr] else {
66+ continue
67+ }
68+
69+ for (str, val) in candidates {
6270 guard !visited. contains ( str) else {
6371 continue
6472 }
0 commit comments