Advent of Code 2023 day 17
12/17/2024, 5:00 AMJakub Gwóźdź
12/17/2024, 6:09 AMJonathan Kolberg
12/17/2024, 6:41 AMDan Fingal-Surma
12/17/2024, 6:58 AMDan Fingal-Surma
12/17/2024, 6:58 AMDan Fingal-Surma
12/17/2024, 6:58 AMMarcin Wisniowski
12/17/2024, 6:58 AMDan Fingal-Surma
12/17/2024, 7:18 AMbj0
12/17/2024, 7:18 AMMichael de Kaste
12/17/2024, 7:21 AMDan Fingal-Surma
12/17/2024, 7:22 AMMichael de Kaste
12/17/2024, 7:23 AMDan Fingal-Surma
12/17/2024, 7:23 AMMichael de Kaste
12/17/2024, 7:23 AMMichael de Kaste
12/17/2024, 7:23 AMMichael de Kaste
12/17/2024, 7:23 AMDan Fingal-Surma
12/17/2024, 7:26 AMDan Fingal-Surma
12/17/2024, 7:27 AMDan Fingal-Surma
12/17/2024, 7:27 AMDan Fingal-Surma
12/17/2024, 7:27 AMDan Fingal-Surma
12/17/2024, 7:28 AMDan Fingal-Surma
12/17/2024, 7:28 AMMarcin Wisniowski
12/17/2024, 7:28 AMDan Fingal-Surma
12/17/2024, 7:28 AMDan Fingal-Surma
12/17/2024, 7:30 AMDan Fingal-Surma
12/17/2024, 7:30 AMDan Fingal-Surma
12/17/2024, 7:30 AMDan Fingal-Surma
12/17/2024, 7:30 AMDan Fingal-Surma
12/17/2024, 7:30 AMMarcin Wisniowski
12/17/2024, 7:31 AMxor c
Dan Fingal-Surma
12/17/2024, 7:31 AMMichael de Kaste
12/17/2024, 7:31 AMDan Fingal-Surma
12/17/2024, 7:31 AMDan Fingal-Surma
12/17/2024, 7:32 AMDan Fingal-Surma
12/17/2024, 7:34 AMMichael de Kaste
12/17/2024, 7:35 AMDan Fingal-Surma
12/17/2024, 7:37 AMDan Fingal-Surma
12/17/2024, 7:37 AMDan Fingal-Surma
12/17/2024, 7:38 AMDan Fingal-Surma
12/17/2024, 7:38 AMDan Fingal-Surma
12/17/2024, 7:41 AMDan Fingal-Surma
12/17/2024, 7:50 AMDan Fingal-Surma
12/17/2024, 7:50 AMDan Fingal-Surma
12/17/2024, 7:50 AMMarcin Wisniowski
12/17/2024, 7:51 AMDan Fingal-Surma
12/17/2024, 7:51 AM306416164 4 0 []
306416164 3 0 []
306416164 3 30641616 []
30641616 3 30641616 []
30641616 30641615 30641616 []
30641616 30641612 30641616 []
30641616 30641612 30641616 [2]
30641616 30641612 30641616 [2]
Dan Fingal-Surma
12/17/2024, 7:51 AM30641616 6 30641616 [2]
30641616 1 30641616 [2]
30641616 1 14320707 [2]
3064161 1 14320707 [2]
3064161 14320706 14320707 [2]
3064161 14320701 14320707 [2]
3064161 14320701 14320707 [2, 1]
3064161 14320701 14320707 [2, 1]
Dan Fingal-Surma
12/17/2024, 7:53 AM3064161 1 14320707 [2, 1]
3064161 6 14320707 [2, 1]
3064161 6 30641 [2, 1]
306416 6 30641 [2, 1]
306416 30647 30641 [2, 1]
306416 30640 30641 [2, 1]
306416 30640 30641 [2, 1, 0]
306416 30640 30641 [2, 1, 0]
Dan Fingal-Surma
12/17/2024, 7:54 AMMichael de Kaste
12/17/2024, 7:57 AMDan Fingal-Surma
12/17/2024, 7:58 AMDan Fingal-Surma
12/17/2024, 7:59 AMDan Fingal-Surma
12/17/2024, 8:00 AMDan Fingal-Surma
12/17/2024, 8:00 AMMichael de Kaste
12/17/2024, 8:04 AMDan Fingal-Surma
12/17/2024, 8:05 AMbj0
12/17/2024, 8:07 AMDan Fingal-Surma
12/17/2024, 8:08 AMDan Fingal-Surma
12/17/2024, 8:09 AMMichael de Kaste
12/17/2024, 8:09 AMMichael de Kaste
12/17/2024, 8:12 AM... 3,3,0
in it which meant that it was possible for a 3 to appear after a 3, modifiying the jump instruction. That took me for a spin until I realized I could never get the instructions to jump to an offsetDan Fingal-Surma
12/17/2024, 8:13 AMDan Fingal-Surma
12/17/2024, 8:13 AMMichael de Kaste
12/17/2024, 8:15 AMDan Fingal-Surma
12/17/2024, 8:17 AMDan Fingal-Surma
12/17/2024, 8:17 AMDan Fingal-Surma
12/17/2024, 8:20 AMDan Fingal-Surma
12/17/2024, 8:20 AM3 -> if (a != 0L) instructionPointer = operand - 2
Marcin Wisniowski
12/17/2024, 8:23 AMMarcin Wisniowski
12/17/2024, 8:24 AMMarcin Wisniowski
12/17/2024, 8:34 AMDan Fingal-Surma
12/17/2024, 9:12 AMDan Fingal-Surma
12/17/2024, 9:15 AMDan Fingal-Surma
12/17/2024, 9:15 AMDan Fingal-Surma
12/17/2024, 9:16 AMDan Fingal-Surma
12/17/2024, 9:30 AMJonathan Kolberg
12/17/2024, 10:08 AMJakub Gwóźdź
12/17/2024, 10:14 AMParsing took 4.875us
Part 1 took 2.125us, result is 1,4,6,1,6,4,3,0,3
Part 2 took 545.541us, result is 265061364597659
the trick was to figure out that if you replace one digit (base8) in a Register A, then the output after certain point don't change.
I'm sure there are better approaches, but I had fun with mine, so I'm going to stick to it 🙂Jakub Gwóźdź
12/17/2024, 10:32 AMval q = mutableListOf(0L to 0)
while (q.isNotEmpty()) {
val (base, i) = q.removeLast()
...
Luan Tran
12/17/2024, 12:38 PMMax Thiele
12/17/2024, 1:21 PMkingsley
12/17/2024, 1:47 PMPetr Sýkora
12/17/2024, 3:28 PMJaap Beetstra
12/17/2024, 3:46 PMAnirudh
12/17/2024, 5:15 PM11101011001101000100111101
11101011001101000100111
11101011001101000100
11101011001101000
11101011001101
11101011001
11101011
11101
11
0
Jakub Gwóźdź
12/17/2024, 5:27 PMAnirudh
12/17/2024, 6:10 PMAnirudh
12/17/2024, 6:22 PM1,2
& 1,7
is that better or worse? 🙃
@Jaap Beetstra & @Jakub Gwóźdź could you DM me your actual input instructions (but not the answer), I want to check if my solution works in general or a fluke because of my input.
(I know Mr. Wastl has asked ppl not to share inputs but we've already solved it and publishing online)kingsley
12/17/2024, 6:28 PMJakub Gwóźdź
12/17/2024, 6:45 PMAnirudh
12/17/2024, 6:46 PMAnirudh
12/17/2024, 7:03 PMJacob
12/17/2024, 7:24 PMAnirudh
12/17/2024, 7:54 PM267277567730587
but your output results further up has 265061364597659
! 🙃
hahah, so yeah, that's the answer I was getting, the 26506...
number so they match up even though the solution differs a bitJakub Gwóźdź
12/17/2024, 8:01 PMAnirudh
12/17/2024, 8:03 PMAnirudh
12/17/2024, 8:05 PMJakub Gwóźdź
12/17/2024, 8:13 PMAnirudh
12/17/2024, 8:19 PMJakub Gwóźdź
12/17/2024, 8:21 PMJakub Gwóźdź
12/17/2024, 8:22 PMAnirudh
12/17/2024, 8:23 PMJaap Beetstra
12/17/2024, 8:40 PMAnirudh
12/17/2024, 8:45 PMmin()
.
but then I realised, in (0..7L).map { prev shl 3 + it }
& try.remove*First()*
so 0
is always getting checked first anyway, so I can return directly.Andriy
12/17/2024, 9:06 PMfun solve(program: List<Int>): Long {
var A = 0L
var B = 0L
var C = 0L
var out = mutableListOf<Int>()
fun getCombo(operand: Int): Long =
when (operand) {
in 0..3 -> operand.toLong()
4 -> A
5 -> B
6 -> C
else -> throw IllegalArgumentException("Invalid operand")
}
fun execute(opcode: Int, operand: Int) {
when (opcode) {
0 -> { // adv
A /= (1 shl getCombo(operand).toInt())
}
1 -> { // bxl
B = B xor operand.toLong()
}
2 -> { // bst
B = getCombo(operand) and 0b111
}
3 -> { // jnz
// IGNORE
}
4 -> { // bxc
B = B xor C
}
5 -> { // out
out.addFirst((getCombo(operand) and 0b111).toInt())
}
6 -> { // bdv
B = A / (1 shl getCombo(operand).toInt())
}
7 -> { // cdv
C = A / (1 shl getCombo(operand).toInt())
}
else -> throw IllegalArgumentException("Invalid operation")
}
}
val pq = ArrayDeque<Pair<Long, List<Int>>>()
pq.add(Pair(0, emptyList()))
while (true) {
val (potentialA, output) = pq.removeFirst()
if (output == program) return potentialA
val left = potentialA * 8
val right = (potentialA+1) * 8 - 1
for (num in left..right) {
A = num
out = output.toMutableList()
program.windowed(2,2).forEach { execute(it[0], it[1]) }
if (num != 0L && out == program.subList(program.size - out.size, program.size)) {
pq.addLast(num to out)
}
}
}
}
ephemient
12/17/2024, 9:35 PMRob
12/17/2024, 10:13 PMRob
12/17/2024, 10:15 PMRob
12/18/2024, 12:35 AM7
70
702
7026
70264
702642
7026424
70264245
702642452
702642455
7026424555
70264245557
702642455571
702642455576
70264246
702642463
7026425
70264252
702642523
7026425236
70264252365
702642523651
7026425236514
70264252365142
702642523651427
part2: 247839653009594
time: 17
Dan Fingal-Surma
12/18/2024, 7:53 AMNeil Banman
12/18/2024, 8:31 PMephemient
12/24/2024, 2:17 AMephemient
12/24/2024, 2:19 AMephemient
12/26/2024, 9:00 AM