@@ -12,11 +12,16 @@ class EvaluateDivision {
12
12
var rest = [ Double] ( )
13
13
14
14
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 {
16
16
rest. append ( - 1.0 )
17
17
continue
18
- }
18
+ }
19
19
20
+ guard let _ = dict [ first] , let _ = dict [ last] else {
21
+ rest. append ( - 1.0 )
22
+ continue
23
+ }
24
+
20
25
bfs ( query, dict, & rest)
21
26
}
22
27
@@ -27,38 +32,41 @@ class EvaluateDivision {
27
32
var dict = [ String: [ ( String, Double) ] ] ( )
28
33
29
34
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
+ }
31
38
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 ] ) ]
34
41
}
35
42
36
43
return dict
37
44
}
38
45
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
-
47
46
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]
50
54
var qVals = [ 1.0 ]
51
55
52
56
while !qStrs. isEmpty {
53
57
let currentStr = qStrs. removeFirst ( )
54
58
let currentVal = qVals. removeFirst ( )
55
59
56
- if currentStr == query . last! {
60
+ if currentStr == last {
57
61
rest. append ( currentVal)
58
62
return
59
63
}
60
64
61
- for (str, val) in dict [ currentStr] ! {
65
+ guard let candidates = dict [ currentStr] else {
66
+ continue
67
+ }
68
+
69
+ for (str, val) in candidates {
62
70
guard !visited. contains ( str) else {
63
71
continue
64
72
}
0 commit comments