Day08
This commit is contained in:
parent
f2280bc2b5
commit
7d8db7b493
71
days/src/main/kotlin/Day08.kt
Normal file
71
days/src/main/kotlin/Day08.kt
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
package be.vandewalleh.aoc.days
|
||||||
|
|
||||||
|
import be.vandewalleh.aoc.utils.input.Day
|
||||||
|
import be.vandewalleh.aoc.utils.input.Input
|
||||||
|
import be.vandewalleh.aoc.utils.input.Lines
|
||||||
|
import be.vandewalleh.aoc.utils.input.createDay
|
||||||
|
import org.eclipse.collections.impl.factory.primitive.IntLists
|
||||||
|
import org.eclipse.collections.impl.factory.primitive.IntSets
|
||||||
|
|
||||||
|
@Day(8)
|
||||||
|
class Day08(@Lines val input: Input<List<String>>) {
|
||||||
|
|
||||||
|
private val instructions = input.value
|
||||||
|
.map {
|
||||||
|
val words = it.split(" ")
|
||||||
|
Instruction(Operation.valueOf(words[0].capitalize()), words[1].toInt())
|
||||||
|
}.toTypedArray()
|
||||||
|
|
||||||
|
fun part1() = run(instructions)
|
||||||
|
|
||||||
|
private fun run(mutatedInstructions: Array<Instruction>): Int {
|
||||||
|
var acc = 0
|
||||||
|
var ptr = 0
|
||||||
|
|
||||||
|
val visited = IntSets.mutable.empty()
|
||||||
|
|
||||||
|
while (visited.add(ptr)) {
|
||||||
|
val instruction = mutatedInstructions[ptr]
|
||||||
|
when (instruction.operation) {
|
||||||
|
Operation.Acc -> {
|
||||||
|
acc += instruction.argument
|
||||||
|
ptr++
|
||||||
|
}
|
||||||
|
Operation.Jmp -> ptr += instruction.argument
|
||||||
|
Operation.Nop -> ptr++
|
||||||
|
}
|
||||||
|
if (ptr !in mutatedInstructions.indices) {
|
||||||
|
println(acc)
|
||||||
|
error("oob")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return acc
|
||||||
|
}
|
||||||
|
|
||||||
|
fun part2() {
|
||||||
|
val possibleMutations = IntLists.mutable.empty()
|
||||||
|
instructions.forEachIndexed { i, e ->
|
||||||
|
if (e.operation != Operation.Acc) possibleMutations.add(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
possibleMutations.forEach { index ->
|
||||||
|
val copy = instructions.clone().also {
|
||||||
|
val modifiedOperation = if (it[index].operation == Operation.Nop) Operation.Jmp else Operation.Nop
|
||||||
|
it[index] = it[index].copy(operation = modifiedOperation)
|
||||||
|
}
|
||||||
|
run(copy)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
enum class Operation { Acc, Jmp, Nop }
|
||||||
|
|
||||||
|
data class Instruction(val operation: Operation, val argument: Int)
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val day = createDay<Day08>()
|
||||||
|
println(day.part1())
|
||||||
|
println(day.part2())
|
||||||
|
}
|
||||||
649
days/src/main/resources/day08.txt
Normal file
649
days/src/main/resources/day08.txt
Normal file
@ -0,0 +1,649 @@
|
|||||||
|
acc +7
|
||||||
|
acc +23
|
||||||
|
acc +41
|
||||||
|
jmp +173
|
||||||
|
acc -17
|
||||||
|
acc +42
|
||||||
|
acc +31
|
||||||
|
jmp +349
|
||||||
|
jmp +1
|
||||||
|
jmp +252
|
||||||
|
nop +574
|
||||||
|
jmp +298
|
||||||
|
acc +45
|
||||||
|
acc +7
|
||||||
|
jmp +338
|
||||||
|
nop +5
|
||||||
|
nop +528
|
||||||
|
jmp +547
|
||||||
|
jmp +313
|
||||||
|
jmp +387
|
||||||
|
acc +43
|
||||||
|
acc +48
|
||||||
|
acc +38
|
||||||
|
jmp +45
|
||||||
|
jmp +438
|
||||||
|
acc +15
|
||||||
|
acc +21
|
||||||
|
acc +25
|
||||||
|
acc +25
|
||||||
|
jmp +168
|
||||||
|
jmp -5
|
||||||
|
acc +49
|
||||||
|
acc +43
|
||||||
|
jmp +99
|
||||||
|
acc -8
|
||||||
|
acc +16
|
||||||
|
acc -7
|
||||||
|
jmp +513
|
||||||
|
jmp +484
|
||||||
|
jmp +270
|
||||||
|
nop +422
|
||||||
|
acc -4
|
||||||
|
nop +242
|
||||||
|
jmp +1
|
||||||
|
jmp +11
|
||||||
|
nop +122
|
||||||
|
nop +263
|
||||||
|
acc +2
|
||||||
|
jmp +474
|
||||||
|
jmp +501
|
||||||
|
nop +38
|
||||||
|
acc -7
|
||||||
|
acc +0
|
||||||
|
nop +85
|
||||||
|
jmp +496
|
||||||
|
acc +11
|
||||||
|
acc -13
|
||||||
|
acc +40
|
||||||
|
acc +29
|
||||||
|
jmp +519
|
||||||
|
jmp +409
|
||||||
|
acc +41
|
||||||
|
jmp +1
|
||||||
|
acc -17
|
||||||
|
jmp +16
|
||||||
|
nop +485
|
||||||
|
acc -7
|
||||||
|
jmp +58
|
||||||
|
acc +16
|
||||||
|
acc +1
|
||||||
|
jmp +123
|
||||||
|
jmp +157
|
||||||
|
acc +43
|
||||||
|
jmp +422
|
||||||
|
jmp +1
|
||||||
|
acc -19
|
||||||
|
acc +48
|
||||||
|
jmp +80
|
||||||
|
jmp +500
|
||||||
|
jmp -59
|
||||||
|
acc +34
|
||||||
|
acc +11
|
||||||
|
jmp +75
|
||||||
|
nop +467
|
||||||
|
acc -16
|
||||||
|
acc +9
|
||||||
|
acc +32
|
||||||
|
jmp -69
|
||||||
|
acc -13
|
||||||
|
jmp +422
|
||||||
|
jmp +96
|
||||||
|
acc -10
|
||||||
|
acc -19
|
||||||
|
jmp -68
|
||||||
|
acc +31
|
||||||
|
nop +102
|
||||||
|
acc +25
|
||||||
|
jmp +140
|
||||||
|
acc +34
|
||||||
|
acc +45
|
||||||
|
acc -9
|
||||||
|
acc -17
|
||||||
|
jmp -34
|
||||||
|
nop +262
|
||||||
|
jmp +236
|
||||||
|
acc +0
|
||||||
|
acc +32
|
||||||
|
jmp +269
|
||||||
|
acc +16
|
||||||
|
jmp +1
|
||||||
|
jmp +382
|
||||||
|
jmp -39
|
||||||
|
acc +45
|
||||||
|
nop +166
|
||||||
|
nop +408
|
||||||
|
acc +10
|
||||||
|
jmp +379
|
||||||
|
jmp +1
|
||||||
|
acc +44
|
||||||
|
jmp +249
|
||||||
|
nop +334
|
||||||
|
acc +36
|
||||||
|
nop +442
|
||||||
|
acc +5
|
||||||
|
jmp +440
|
||||||
|
acc +0
|
||||||
|
acc +44
|
||||||
|
jmp +432
|
||||||
|
acc +48
|
||||||
|
acc +4
|
||||||
|
acc +50
|
||||||
|
jmp +355
|
||||||
|
acc +31
|
||||||
|
jmp +1
|
||||||
|
acc +46
|
||||||
|
nop -74
|
||||||
|
jmp +33
|
||||||
|
jmp +91
|
||||||
|
nop +463
|
||||||
|
acc +41
|
||||||
|
nop -2
|
||||||
|
jmp +132
|
||||||
|
acc +41
|
||||||
|
acc +43
|
||||||
|
acc +28
|
||||||
|
jmp -65
|
||||||
|
acc -17
|
||||||
|
acc +33
|
||||||
|
jmp +183
|
||||||
|
acc +11
|
||||||
|
jmp +181
|
||||||
|
jmp +450
|
||||||
|
acc -18
|
||||||
|
acc -2
|
||||||
|
acc +44
|
||||||
|
nop +416
|
||||||
|
jmp +108
|
||||||
|
acc -18
|
||||||
|
acc +12
|
||||||
|
acc -1
|
||||||
|
acc -19
|
||||||
|
jmp +321
|
||||||
|
acc +50
|
||||||
|
acc -17
|
||||||
|
jmp +1
|
||||||
|
nop +161
|
||||||
|
jmp -41
|
||||||
|
jmp +52
|
||||||
|
jmp +84
|
||||||
|
acc +11
|
||||||
|
acc +19
|
||||||
|
acc +40
|
||||||
|
jmp +293
|
||||||
|
acc +29
|
||||||
|
jmp +1
|
||||||
|
jmp +311
|
||||||
|
nop +91
|
||||||
|
acc +1
|
||||||
|
acc +0
|
||||||
|
acc +16
|
||||||
|
jmp -42
|
||||||
|
acc +0
|
||||||
|
acc -16
|
||||||
|
acc +41
|
||||||
|
nop +348
|
||||||
|
jmp -39
|
||||||
|
nop -114
|
||||||
|
nop +320
|
||||||
|
acc +46
|
||||||
|
acc -1
|
||||||
|
jmp +55
|
||||||
|
nop +278
|
||||||
|
jmp -94
|
||||||
|
acc +47
|
||||||
|
jmp +365
|
||||||
|
acc +44
|
||||||
|
jmp -58
|
||||||
|
jmp +1
|
||||||
|
jmp +114
|
||||||
|
acc -13
|
||||||
|
acc -5
|
||||||
|
acc +12
|
||||||
|
jmp +183
|
||||||
|
nop +237
|
||||||
|
acc +26
|
||||||
|
acc +49
|
||||||
|
acc +1
|
||||||
|
jmp -189
|
||||||
|
acc +7
|
||||||
|
acc +2
|
||||||
|
jmp -190
|
||||||
|
acc -17
|
||||||
|
acc +18
|
||||||
|
acc -1
|
||||||
|
jmp -47
|
||||||
|
nop -39
|
||||||
|
acc -18
|
||||||
|
nop +354
|
||||||
|
jmp +264
|
||||||
|
acc +46
|
||||||
|
jmp +179
|
||||||
|
acc +22
|
||||||
|
acc +24
|
||||||
|
jmp +309
|
||||||
|
acc +45
|
||||||
|
acc -9
|
||||||
|
jmp -206
|
||||||
|
jmp +34
|
||||||
|
nop +254
|
||||||
|
acc +9
|
||||||
|
acc +32
|
||||||
|
jmp +391
|
||||||
|
acc +9
|
||||||
|
acc +20
|
||||||
|
acc +7
|
||||||
|
acc +48
|
||||||
|
jmp -85
|
||||||
|
acc +27
|
||||||
|
acc -3
|
||||||
|
jmp +146
|
||||||
|
acc -12
|
||||||
|
acc +37
|
||||||
|
acc +23
|
||||||
|
jmp +1
|
||||||
|
jmp +48
|
||||||
|
acc +46
|
||||||
|
jmp +99
|
||||||
|
acc -12
|
||||||
|
acc -2
|
||||||
|
acc +49
|
||||||
|
jmp +1
|
||||||
|
jmp +293
|
||||||
|
jmp +1
|
||||||
|
acc +38
|
||||||
|
jmp +13
|
||||||
|
jmp -215
|
||||||
|
jmp -145
|
||||||
|
acc +7
|
||||||
|
nop +73
|
||||||
|
nop +189
|
||||||
|
jmp +167
|
||||||
|
jmp +332
|
||||||
|
acc +29
|
||||||
|
jmp -146
|
||||||
|
jmp +198
|
||||||
|
acc +10
|
||||||
|
jmp +342
|
||||||
|
acc +31
|
||||||
|
jmp -136
|
||||||
|
acc +16
|
||||||
|
acc +33
|
||||||
|
acc +26
|
||||||
|
jmp -48
|
||||||
|
acc +14
|
||||||
|
jmp +91
|
||||||
|
acc -15
|
||||||
|
nop +274
|
||||||
|
acc -2
|
||||||
|
jmp -75
|
||||||
|
acc +14
|
||||||
|
acc +21
|
||||||
|
acc +4
|
||||||
|
jmp +332
|
||||||
|
jmp -243
|
||||||
|
acc +25
|
||||||
|
acc -5
|
||||||
|
jmp +250
|
||||||
|
acc -17
|
||||||
|
acc +32
|
||||||
|
acc +28
|
||||||
|
acc +34
|
||||||
|
jmp -80
|
||||||
|
acc +23
|
||||||
|
acc +30
|
||||||
|
acc +10
|
||||||
|
nop -98
|
||||||
|
jmp -205
|
||||||
|
acc -16
|
||||||
|
acc -15
|
||||||
|
acc +49
|
||||||
|
acc +15
|
||||||
|
jmp +11
|
||||||
|
nop +97
|
||||||
|
acc -2
|
||||||
|
acc +31
|
||||||
|
jmp +1
|
||||||
|
jmp -130
|
||||||
|
acc +25
|
||||||
|
jmp +129
|
||||||
|
nop -231
|
||||||
|
jmp +274
|
||||||
|
jmp -280
|
||||||
|
acc +0
|
||||||
|
acc -14
|
||||||
|
acc +8
|
||||||
|
nop -224
|
||||||
|
jmp +328
|
||||||
|
acc +6
|
||||||
|
acc +29
|
||||||
|
acc +9
|
||||||
|
jmp -229
|
||||||
|
acc +8
|
||||||
|
jmp -284
|
||||||
|
acc +4
|
||||||
|
acc +0
|
||||||
|
jmp -200
|
||||||
|
acc +18
|
||||||
|
acc +33
|
||||||
|
jmp -76
|
||||||
|
acc -2
|
||||||
|
jmp +139
|
||||||
|
nop -70
|
||||||
|
acc -6
|
||||||
|
acc +9
|
||||||
|
jmp -25
|
||||||
|
nop +21
|
||||||
|
acc +37
|
||||||
|
acc +15
|
||||||
|
acc +45
|
||||||
|
jmp +130
|
||||||
|
acc +45
|
||||||
|
acc -5
|
||||||
|
jmp -86
|
||||||
|
acc -15
|
||||||
|
jmp +55
|
||||||
|
nop -305
|
||||||
|
acc +24
|
||||||
|
jmp -275
|
||||||
|
jmp +1
|
||||||
|
acc +31
|
||||||
|
acc -19
|
||||||
|
jmp -148
|
||||||
|
acc +27
|
||||||
|
jmp +279
|
||||||
|
acc +11
|
||||||
|
jmp +253
|
||||||
|
acc +17
|
||||||
|
nop -1
|
||||||
|
acc -15
|
||||||
|
jmp -57
|
||||||
|
acc +12
|
||||||
|
acc +10
|
||||||
|
acc -7
|
||||||
|
acc +18
|
||||||
|
jmp -100
|
||||||
|
acc +39
|
||||||
|
jmp -180
|
||||||
|
jmp +155
|
||||||
|
acc -14
|
||||||
|
acc -10
|
||||||
|
acc -14
|
||||||
|
nop -202
|
||||||
|
jmp -267
|
||||||
|
acc +11
|
||||||
|
acc +0
|
||||||
|
jmp -130
|
||||||
|
acc +19
|
||||||
|
acc -18
|
||||||
|
jmp +166
|
||||||
|
jmp +61
|
||||||
|
jmp +13
|
||||||
|
acc -2
|
||||||
|
jmp +1
|
||||||
|
acc +19
|
||||||
|
jmp -160
|
||||||
|
acc +23
|
||||||
|
jmp +1
|
||||||
|
acc +37
|
||||||
|
acc +40
|
||||||
|
jmp +86
|
||||||
|
acc +17
|
||||||
|
acc -18
|
||||||
|
jmp -195
|
||||||
|
acc +11
|
||||||
|
nop -149
|
||||||
|
acc -13
|
||||||
|
jmp +41
|
||||||
|
acc -16
|
||||||
|
jmp -30
|
||||||
|
acc +34
|
||||||
|
acc +13
|
||||||
|
acc +38
|
||||||
|
jmp +46
|
||||||
|
acc -13
|
||||||
|
acc +34
|
||||||
|
jmp -273
|
||||||
|
acc -9
|
||||||
|
acc -8
|
||||||
|
acc +23
|
||||||
|
acc +8
|
||||||
|
jmp +82
|
||||||
|
acc +3
|
||||||
|
acc +43
|
||||||
|
nop +137
|
||||||
|
jmp -46
|
||||||
|
acc -15
|
||||||
|
acc +41
|
||||||
|
acc +25
|
||||||
|
acc +3
|
||||||
|
jmp -208
|
||||||
|
acc +0
|
||||||
|
jmp -169
|
||||||
|
acc +20
|
||||||
|
acc +12
|
||||||
|
jmp -221
|
||||||
|
acc -14
|
||||||
|
jmp +96
|
||||||
|
acc +47
|
||||||
|
acc +25
|
||||||
|
acc +7
|
||||||
|
jmp +141
|
||||||
|
acc -19
|
||||||
|
jmp -294
|
||||||
|
acc +28
|
||||||
|
jmp -94
|
||||||
|
acc +35
|
||||||
|
jmp +33
|
||||||
|
jmp -349
|
||||||
|
acc -17
|
||||||
|
jmp +193
|
||||||
|
jmp +1
|
||||||
|
acc -16
|
||||||
|
jmp -169
|
||||||
|
jmp +1
|
||||||
|
nop -258
|
||||||
|
acc +44
|
||||||
|
nop -13
|
||||||
|
jmp -330
|
||||||
|
jmp +189
|
||||||
|
acc +20
|
||||||
|
acc +31
|
||||||
|
nop +35
|
||||||
|
acc +42
|
||||||
|
jmp +64
|
||||||
|
acc +9
|
||||||
|
nop -406
|
||||||
|
acc -14
|
||||||
|
jmp +1
|
||||||
|
jmp +74
|
||||||
|
acc +34
|
||||||
|
acc +0
|
||||||
|
jmp -285
|
||||||
|
jmp -422
|
||||||
|
nop -338
|
||||||
|
jmp +47
|
||||||
|
nop -445
|
||||||
|
jmp -145
|
||||||
|
jmp +1
|
||||||
|
jmp -116
|
||||||
|
acc +41
|
||||||
|
acc +44
|
||||||
|
acc +34
|
||||||
|
jmp -146
|
||||||
|
acc +44
|
||||||
|
jmp -434
|
||||||
|
acc +44
|
||||||
|
acc +34
|
||||||
|
jmp -185
|
||||||
|
acc -17
|
||||||
|
nop -187
|
||||||
|
nop -5
|
||||||
|
jmp -96
|
||||||
|
nop -20
|
||||||
|
jmp -199
|
||||||
|
acc +33
|
||||||
|
jmp -229
|
||||||
|
nop +50
|
||||||
|
jmp -263
|
||||||
|
acc -5
|
||||||
|
acc -4
|
||||||
|
acc +16
|
||||||
|
jmp -340
|
||||||
|
jmp -77
|
||||||
|
nop -71
|
||||||
|
jmp -168
|
||||||
|
acc -18
|
||||||
|
nop -447
|
||||||
|
nop -479
|
||||||
|
jmp -118
|
||||||
|
acc +49
|
||||||
|
nop -35
|
||||||
|
jmp -264
|
||||||
|
acc +21
|
||||||
|
jmp -76
|
||||||
|
acc +25
|
||||||
|
acc +46
|
||||||
|
jmp -339
|
||||||
|
jmp -382
|
||||||
|
nop -54
|
||||||
|
nop -169
|
||||||
|
jmp -208
|
||||||
|
acc -8
|
||||||
|
jmp -395
|
||||||
|
acc -8
|
||||||
|
acc +45
|
||||||
|
nop -312
|
||||||
|
jmp +92
|
||||||
|
jmp -31
|
||||||
|
acc +45
|
||||||
|
acc +42
|
||||||
|
nop -259
|
||||||
|
jmp -169
|
||||||
|
nop -255
|
||||||
|
nop -69
|
||||||
|
acc +47
|
||||||
|
acc +35
|
||||||
|
jmp -428
|
||||||
|
acc +15
|
||||||
|
acc +47
|
||||||
|
acc +50
|
||||||
|
acc +13
|
||||||
|
jmp -491
|
||||||
|
jmp -386
|
||||||
|
acc +32
|
||||||
|
acc +36
|
||||||
|
jmp -73
|
||||||
|
acc +22
|
||||||
|
acc +0
|
||||||
|
acc +35
|
||||||
|
jmp -531
|
||||||
|
acc +21
|
||||||
|
nop -365
|
||||||
|
acc +16
|
||||||
|
jmp +89
|
||||||
|
acc +50
|
||||||
|
jmp -467
|
||||||
|
acc +42
|
||||||
|
nop -167
|
||||||
|
acc +39
|
||||||
|
jmp -481
|
||||||
|
acc -13
|
||||||
|
acc +49
|
||||||
|
acc +8
|
||||||
|
acc -11
|
||||||
|
jmp -47
|
||||||
|
acc +22
|
||||||
|
acc +23
|
||||||
|
nop +14
|
||||||
|
jmp +56
|
||||||
|
jmp -57
|
||||||
|
acc +0
|
||||||
|
acc +45
|
||||||
|
acc -12
|
||||||
|
jmp -339
|
||||||
|
acc +41
|
||||||
|
jmp -286
|
||||||
|
acc +24
|
||||||
|
acc -14
|
||||||
|
acc +7
|
||||||
|
nop -481
|
||||||
|
jmp -539
|
||||||
|
acc +14
|
||||||
|
jmp -511
|
||||||
|
acc +1
|
||||||
|
acc -14
|
||||||
|
jmp +1
|
||||||
|
acc -12
|
||||||
|
jmp -123
|
||||||
|
acc -17
|
||||||
|
acc +11
|
||||||
|
jmp -16
|
||||||
|
nop -148
|
||||||
|
acc -14
|
||||||
|
jmp -485
|
||||||
|
nop -258
|
||||||
|
nop -123
|
||||||
|
acc +22
|
||||||
|
jmp -359
|
||||||
|
nop -527
|
||||||
|
nop -443
|
||||||
|
acc +43
|
||||||
|
jmp +1
|
||||||
|
jmp -406
|
||||||
|
acc +39
|
||||||
|
acc +13
|
||||||
|
acc +3
|
||||||
|
acc -5
|
||||||
|
jmp -585
|
||||||
|
acc +41
|
||||||
|
acc +26
|
||||||
|
jmp -83
|
||||||
|
acc +30
|
||||||
|
acc +8
|
||||||
|
acc +36
|
||||||
|
jmp -150
|
||||||
|
acc +36
|
||||||
|
acc +43
|
||||||
|
jmp -305
|
||||||
|
acc +10
|
||||||
|
acc +33
|
||||||
|
jmp -188
|
||||||
|
nop -285
|
||||||
|
acc -4
|
||||||
|
jmp -385
|
||||||
|
acc -1
|
||||||
|
jmp +1
|
||||||
|
nop -23
|
||||||
|
jmp -471
|
||||||
|
acc +24
|
||||||
|
acc +16
|
||||||
|
acc +29
|
||||||
|
jmp -114
|
||||||
|
nop -471
|
||||||
|
acc +4
|
||||||
|
nop -360
|
||||||
|
nop -294
|
||||||
|
jmp -220
|
||||||
|
acc -18
|
||||||
|
acc +21
|
||||||
|
acc +10
|
||||||
|
acc +0
|
||||||
|
jmp -166
|
||||||
|
jmp -192
|
||||||
|
acc +37
|
||||||
|
acc +24
|
||||||
|
nop -198
|
||||||
|
jmp -425
|
||||||
|
acc -19
|
||||||
|
acc +43
|
||||||
|
jmp -608
|
||||||
|
acc +17
|
||||||
|
acc +32
|
||||||
|
acc +0
|
||||||
|
jmp -424
|
||||||
|
acc +50
|
||||||
|
acc +46
|
||||||
|
nop -555
|
||||||
|
acc -16
|
||||||
|
jmp +1
|
||||||
Loading…
x
Reference in New Issue
Block a user