Skip to content

Commit 7a3cd66

Browse files
committed
The graph has loops
1 parent 951d238 commit 7a3cd66

File tree

1 file changed

+31
-3
lines changed

1 file changed

+31
-3
lines changed

20.rev.swift

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,10 +173,38 @@ func show(modules: Modules, states: [String: State]) {
173173
}
174174

175175
func analyze(modules: Modules) -> Int {
176-
return 0
176+
guard modules["rx"] != nil else { return 0 }
177+
178+
var memo: [String: Int] = [:]
179+
func lowAfter(name: String) -> Int {
180+
if let m = memo[name] { return m }
181+
182+
let r: Int
183+
184+
let module = modules[name]!
185+
print("finding low after for \(name) \(module)")
186+
switch module.type {
187+
case nil:
188+
r = module.inputs.map({ lowAfter(name: $0) }).min()!
189+
case .broadcast:
190+
r = 1
191+
case .flip:
192+
r = module.inputs.map({ lowAfter(name: $0) }).min()!
193+
case .conjunction:
194+
r = module.inputs.map({ lowAfter(name: $0) }).min()!
195+
}
196+
197+
memo[name] = r
198+
return r
199+
}
200+
201+
let r = lowAfter(name: "rx")
202+
print(memo)
203+
return r
177204
}
178205

179206
let modules = readInput()
180-
let p1 = simulate(modules: modules, times: 1000)
207+
// let p1 = simulate(modules: modules, times: 1000)
181208
let p2 = analyze(modules: modules)
182-
print(p1, p2)
209+
print(p2)
210+
// print(p1, p2)

0 commit comments

Comments
 (0)