1
0
This commit is contained in:
Hubert Van De Walle 2020-12-08 07:30:51 +01:00
parent f2280bc2b5
commit 7d8db7b493
2 changed files with 720 additions and 0 deletions

View 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())
}

View 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