Skip to content

Commit 2f79d33

Browse files
committed
Incorporate part 2
1 parent e1a7037 commit 2f79d33

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

20.bstate.swift

+15-4
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,14 @@ extension Module: CustomStringConvertible {
3737
}
3838

3939
var modulesIndexToName: [Int: String] = [:]
40-
var verbose = switch CommandLine.arguments.last {
40+
var rxIndex: Int?
41+
let verbose = switch CommandLine.arguments.last {
4142
case "-v": 1
4243
case "-vv": 2
4344
default: 0
4445
}
4546

47+
4648
func readInput() -> [Module] {
4749
let broadcast = "broadcaster"
4850

@@ -96,6 +98,9 @@ func readInput() -> [Module] {
9698
}
9799

98100
modulesIndexToName[result.count - 1] = name
101+
if name == "rx" {
102+
rxIndex = result.count - 1
103+
}
99104
}
100105

101106
return result
@@ -145,9 +150,10 @@ func propogate(pulse: Pulse, module: Module) -> ([Pulse], Module)? {
145150
}
146151
}
147152

148-
func simulate(modules: inout [Module]) -> Int {
153+
func simulate(modules: inout [Module]) -> (Int, Int) {
149154
let buttonPress = Pulse(value: false, from: -1, to: 0)
150155

156+
151157
var (ct, cf) = (0, 0)
152158
func count(_ pulse: Pulse) {
153159
if (verbose > 1) {
@@ -158,7 +164,8 @@ func simulate(modules: inout [Module]) -> Int {
158164
}
159165

160166
var n = 0
161-
while n < 1000 {
167+
var rxn: Int? = rxIndex == nil ? 0 : nil
168+
while n < 1000 || rxn == nil {
162169
n += 1
163170
show(modules: modules)
164171

@@ -169,6 +176,10 @@ func simulate(modules: inout [Module]) -> Int {
169176
count(pulse)
170177
pi += 1
171178

179+
if (pulse.to == rxIndex && !pulse.value) {
180+
rxn = n
181+
}
182+
172183
let module = modules[pulse.to]
173184
if let (pulses, newModule) = propogate(pulse: pulse, module: module) {
174185
modules[pulse.to] = newModule
@@ -180,7 +191,7 @@ func simulate(modules: inout [Module]) -> Int {
180191
if verbose > 0 {
181192
print("counts", ct, cf)
182193
}
183-
return ct * cf
194+
return (ct * cf, rxn ?? 0)
184195
}
185196

186197
func show(modules: [Module]) {

0 commit comments

Comments
 (0)