Skip to content

Commit 1d7e920

Browse files
committed
day17
1 parent dfc9ea9 commit 1d7e920

File tree

2 files changed

+24
-43
lines changed

2 files changed

+24
-43
lines changed

Sources/AdventOfCode.swift

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,22 @@ import ArgumentParser
22

33
// Add each new day implementation to this array:
44
let allChallenges: [any AdventDay] = [
5-
Day01(),
6-
Day02(),
7-
Day03(),
8-
Day04(),
9-
Day05(),
10-
Day06(),
11-
Day07(),
12-
Day08(),
13-
Day09(),
14-
Day10(),
15-
Day11(),
16-
Day12(),
17-
Day13(),
18-
Day14(),
19-
Day15(),
20-
Day17(),
5+
// Day01(),
6+
// Day02(),
7+
// Day03(),
8+
// Day04(),
9+
// Day05(),
10+
// Day06(),
11+
// Day07(),
12+
// Day08(),
13+
// Day09(),
14+
// Day10(),
15+
// Day11(),
16+
// Day12(),
17+
// Day13(),
18+
// Day14(),
19+
// Day15(),
20+
Day17()
2121
]
2222

2323
@main

Sources/Day17.swift

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -23,67 +23,47 @@ struct Computer {
2323
}
2424

2525
mutating func executeOp(_ ops: Int, _ operand: Int, combo comboOp: Int, pointer: Int) -> Int {
26-
var p = pointer
2726
func div(_ num: Int, _ denomShift: Int) -> Int {
2827
let denom = 1 << denomShift
2928
if denom > num || denomShift > num {
3029
return 0
3130
}
32-
if denom == 0 {
33-
print("division by zero")
34-
print("denomShift", denomShift)
35-
}
3631
return num / denom
3732
}
3833

3934
switch ops {
4035
case 0:
4136
// adv
42-
let res = div(comboOp, registers.A)
43-
print("adv", res)
44-
registers.A = res
45-
p += 2
37+
registers.A = div(registers.A, comboOp)
4638
case 1:
4739
// bxl
4840
let res = registers.B ^ operand
49-
print("bxl", res)
5041
registers.B = res
51-
p += 2
5242
case 2:
5343
//bst
5444
let res = comboOp % 8
55-
print("bst", operand, res)
5645
registers.B = res
57-
p += 2
5846
case 3:
5947
// jnz
6048
if registers.A != 0 {
61-
// jump by the value of the operand
62-
p += comboOp
63-
} else {
64-
// simple increase
65-
p += 2
49+
// set the pointer to the value of the operand
50+
return operand
6651
}
6752
case 4:
6853
// bxc
6954
registers.B ^= registers.C
70-
// do nothing with operand
71-
p += 2
7255
case 5:
7356
// out
7457
output.append(comboOp % 8)
75-
p += 2
7658
case 6:
7759
// bdv
78-
registers.B = div(comboOp, registers.A)
79-
p += 2
60+
registers.B = div(registers.A, comboOp)
8061
case 7:
8162
// cdv
82-
registers.C = div(comboOp, registers.A)
83-
p += 2
63+
registers.C = div(registers.A, comboOp)
8464
default: break
8565
}
86-
return p
66+
return pointer + 2
8767
}
8868

8969
mutating func execute() -> String {
@@ -104,7 +84,7 @@ struct Day17: AdventDay {
10484
var data: String
10585

10686
func initialize() -> (instructions: [Int], registers: Registers) {
107-
let parts = data.split(separator: "\n\n")
87+
let parts = data.trimmed().split(separator: "\n\n")
10888
let instructions = parts[1].trimmingPrefix("Program: ").integers(separator: ",")
10989
var registers = Registers()
11090
if let match = parts[0].firstMatch(
@@ -120,6 +100,7 @@ struct Day17: AdventDay {
120100
func part1() -> String {
121101
let (instructions, registers) = initialize()
122102
var computer = Computer(instructions: instructions, registers: registers)
103+
123104
return computer.execute()
124105
}
125106

0 commit comments

Comments
 (0)