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