Day8
This commit is contained in:
parent
0fa49136a9
commit
bcacad9d15
|
@ -0,0 +1,102 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"AoC2020/helper"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
var band []string
|
||||||
|
var pointer int
|
||||||
|
var accumulator int
|
||||||
|
var result int
|
||||||
|
var terminated bool
|
||||||
|
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
args := os.Args[1:]
|
||||||
|
input, err := helper.GetInput(args[0])
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
runMachine(input)
|
||||||
|
fmt.Println(result)
|
||||||
|
part2(input)
|
||||||
|
}
|
||||||
|
|
||||||
|
func part2(input []string) {
|
||||||
|
for i,_ := range input {
|
||||||
|
if strings.Fields(input[i])[0] == "nop" {
|
||||||
|
changedInput := make([]string, len(input))
|
||||||
|
copy(changedInput,input)
|
||||||
|
changedInput[i] = strings.Replace(band[i],"nop","jmp",-1)
|
||||||
|
runMachine(changedInput)
|
||||||
|
}
|
||||||
|
if strings.Fields(input[i])[0] == "jmp" {
|
||||||
|
changedInput := make([]string, len(input))
|
||||||
|
copy(changedInput,input)
|
||||||
|
changedInput[i] = strings.Replace(band[i],"jmp","nop",-1)
|
||||||
|
runMachine(changedInput)
|
||||||
|
}
|
||||||
|
if terminated == true {
|
||||||
|
fmt.Printf("Change value at: %d \n", i)
|
||||||
|
fmt.Printf("Accumulator: %d", result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func runMachine(input []string) {
|
||||||
|
pointer = 0
|
||||||
|
result = 0
|
||||||
|
accumulator = 0
|
||||||
|
band = input
|
||||||
|
var visitedPointer []bool = make([]bool, len(band))
|
||||||
|
for i := 0; i < len(band); i++ {
|
||||||
|
visitedPointer[i] = false
|
||||||
|
}
|
||||||
|
for result == 0 {
|
||||||
|
terminated = run(visitedPointer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func run(visitedPointer []bool) bool {
|
||||||
|
if pointer == len(band) {
|
||||||
|
result = accumulator
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if visitedPointer[pointer] {
|
||||||
|
result = accumulator
|
||||||
|
return false
|
||||||
|
} else {
|
||||||
|
visitedPointer[pointer] = true
|
||||||
|
}
|
||||||
|
command := strings.Fields(band[pointer])
|
||||||
|
number, _ := strconv.Atoi(command[1])
|
||||||
|
if command[0] == "acc"{
|
||||||
|
acc(number)
|
||||||
|
}
|
||||||
|
if command[0] == "jmp"{
|
||||||
|
jmp(number)
|
||||||
|
}
|
||||||
|
if command[0] == "nop"{
|
||||||
|
nop()
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func nop() {
|
||||||
|
pointer++
|
||||||
|
}
|
||||||
|
|
||||||
|
func acc(number int) {
|
||||||
|
accumulator += number
|
||||||
|
pointer++
|
||||||
|
}
|
||||||
|
|
||||||
|
func jmp(number int) {
|
||||||
|
pointer += number
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,623 @@
|
||||||
|
acc +37
|
||||||
|
acc -4
|
||||||
|
nop +405
|
||||||
|
jmp +276
|
||||||
|
acc +39
|
||||||
|
acc +40
|
||||||
|
acc -3
|
||||||
|
jmp +231
|
||||||
|
acc +44
|
||||||
|
acc +12
|
||||||
|
jmp +505
|
||||||
|
acc +35
|
||||||
|
jmp +282
|
||||||
|
acc +23
|
||||||
|
jmp +598
|
||||||
|
nop +392
|
||||||
|
acc +18
|
||||||
|
acc +44
|
||||||
|
acc +18
|
||||||
|
jmp +297
|
||||||
|
nop +460
|
||||||
|
jmp +152
|
||||||
|
nop +541
|
||||||
|
acc +33
|
||||||
|
jmp -11
|
||||||
|
acc -5
|
||||||
|
acc +9
|
||||||
|
jmp +327
|
||||||
|
acc +30
|
||||||
|
acc -1
|
||||||
|
acc -3
|
||||||
|
jmp +50
|
||||||
|
acc +22
|
||||||
|
acc +18
|
||||||
|
acc +33
|
||||||
|
acc +37
|
||||||
|
jmp +57
|
||||||
|
acc -17
|
||||||
|
acc -6
|
||||||
|
acc -2
|
||||||
|
jmp +535
|
||||||
|
acc -15
|
||||||
|
jmp +279
|
||||||
|
acc +34
|
||||||
|
acc +44
|
||||||
|
acc +41
|
||||||
|
jmp +349
|
||||||
|
acc +2
|
||||||
|
acc +6
|
||||||
|
nop +351
|
||||||
|
nop +252
|
||||||
|
jmp +505
|
||||||
|
jmp +1
|
||||||
|
jmp +1
|
||||||
|
nop +61
|
||||||
|
jmp +524
|
||||||
|
nop +351
|
||||||
|
jmp +399
|
||||||
|
acc +1
|
||||||
|
nop +397
|
||||||
|
acc +39
|
||||||
|
nop +141
|
||||||
|
jmp +134
|
||||||
|
acc +46
|
||||||
|
acc +14
|
||||||
|
acc +26
|
||||||
|
jmp +236
|
||||||
|
acc +7
|
||||||
|
acc -6
|
||||||
|
acc +35
|
||||||
|
jmp +397
|
||||||
|
acc +15
|
||||||
|
jmp +140
|
||||||
|
acc +3
|
||||||
|
acc -4
|
||||||
|
acc +37
|
||||||
|
acc +12
|
||||||
|
jmp +86
|
||||||
|
jmp +416
|
||||||
|
jmp +1
|
||||||
|
jmp +55
|
||||||
|
acc -19
|
||||||
|
jmp +536
|
||||||
|
jmp +1
|
||||||
|
acc -11
|
||||||
|
acc +15
|
||||||
|
jmp -61
|
||||||
|
acc +25
|
||||||
|
jmp -25
|
||||||
|
acc +50
|
||||||
|
acc +43
|
||||||
|
jmp +1
|
||||||
|
jmp +140
|
||||||
|
acc +46
|
||||||
|
nop -53
|
||||||
|
acc +1
|
||||||
|
nop +440
|
||||||
|
jmp +488
|
||||||
|
jmp +396
|
||||||
|
nop +443
|
||||||
|
acc +41
|
||||||
|
jmp +168
|
||||||
|
acc +25
|
||||||
|
nop +383
|
||||||
|
acc +12
|
||||||
|
acc -19
|
||||||
|
jmp +21
|
||||||
|
acc +29
|
||||||
|
acc +30
|
||||||
|
jmp +497
|
||||||
|
jmp +502
|
||||||
|
jmp +417
|
||||||
|
nop +351
|
||||||
|
acc -15
|
||||||
|
jmp +243
|
||||||
|
acc +21
|
||||||
|
acc +16
|
||||||
|
jmp +332
|
||||||
|
acc +28
|
||||||
|
acc +22
|
||||||
|
acc +38
|
||||||
|
jmp +476
|
||||||
|
acc +8
|
||||||
|
acc -11
|
||||||
|
jmp +458
|
||||||
|
acc +9
|
||||||
|
jmp +246
|
||||||
|
acc +40
|
||||||
|
acc +31
|
||||||
|
acc +26
|
||||||
|
jmp +218
|
||||||
|
acc +27
|
||||||
|
acc +9
|
||||||
|
nop +347
|
||||||
|
jmp +478
|
||||||
|
nop +28
|
||||||
|
nop +106
|
||||||
|
acc +25
|
||||||
|
acc -15
|
||||||
|
jmp +397
|
||||||
|
acc +31
|
||||||
|
jmp +231
|
||||||
|
acc -4
|
||||||
|
nop +136
|
||||||
|
acc +14
|
||||||
|
jmp +181
|
||||||
|
jmp +361
|
||||||
|
acc +16
|
||||||
|
acc +11
|
||||||
|
jmp -108
|
||||||
|
nop +299
|
||||||
|
acc +21
|
||||||
|
acc -2
|
||||||
|
jmp -106
|
||||||
|
jmp +246
|
||||||
|
acc +31
|
||||||
|
jmp +407
|
||||||
|
jmp +377
|
||||||
|
acc +43
|
||||||
|
acc -12
|
||||||
|
nop +142
|
||||||
|
acc +8
|
||||||
|
jmp -91
|
||||||
|
jmp +1
|
||||||
|
acc +34
|
||||||
|
acc +5
|
||||||
|
acc +31
|
||||||
|
jmp +12
|
||||||
|
acc +34
|
||||||
|
acc +7
|
||||||
|
acc +34
|
||||||
|
acc +20
|
||||||
|
jmp -45
|
||||||
|
acc -11
|
||||||
|
acc +41
|
||||||
|
acc +10
|
||||||
|
jmp +310
|
||||||
|
nop -106
|
||||||
|
jmp -36
|
||||||
|
acc +23
|
||||||
|
acc +46
|
||||||
|
acc +46
|
||||||
|
jmp +112
|
||||||
|
acc +41
|
||||||
|
nop +179
|
||||||
|
acc +17
|
||||||
|
nop +356
|
||||||
|
jmp +147
|
||||||
|
acc +42
|
||||||
|
nop +49
|
||||||
|
jmp +119
|
||||||
|
acc +0
|
||||||
|
acc +7
|
||||||
|
acc -18
|
||||||
|
acc -8
|
||||||
|
jmp +11
|
||||||
|
acc +12
|
||||||
|
acc +38
|
||||||
|
acc +39
|
||||||
|
jmp +281
|
||||||
|
nop +186
|
||||||
|
jmp +162
|
||||||
|
acc +44
|
||||||
|
acc +20
|
||||||
|
jmp +153
|
||||||
|
jmp +395
|
||||||
|
acc +49
|
||||||
|
jmp +1
|
||||||
|
acc +2
|
||||||
|
jmp +1
|
||||||
|
jmp -31
|
||||||
|
jmp +301
|
||||||
|
nop +97
|
||||||
|
jmp -102
|
||||||
|
jmp +262
|
||||||
|
acc +28
|
||||||
|
acc -15
|
||||||
|
acc +44
|
||||||
|
acc -13
|
||||||
|
jmp +191
|
||||||
|
jmp +281
|
||||||
|
acc +36
|
||||||
|
acc +1
|
||||||
|
nop +15
|
||||||
|
jmp +211
|
||||||
|
acc +6
|
||||||
|
acc -4
|
||||||
|
jmp +42
|
||||||
|
acc +34
|
||||||
|
acc +0
|
||||||
|
jmp +104
|
||||||
|
jmp +311
|
||||||
|
jmp +84
|
||||||
|
acc +43
|
||||||
|
acc -8
|
||||||
|
acc -10
|
||||||
|
acc +38
|
||||||
|
jmp -90
|
||||||
|
acc +49
|
||||||
|
jmp +303
|
||||||
|
nop +132
|
||||||
|
jmp +301
|
||||||
|
nop +60
|
||||||
|
acc +37
|
||||||
|
nop +96
|
||||||
|
jmp +182
|
||||||
|
acc +16
|
||||||
|
acc +18
|
||||||
|
nop +152
|
||||||
|
acc +19
|
||||||
|
jmp +325
|
||||||
|
jmp -63
|
||||||
|
acc +28
|
||||||
|
jmp +56
|
||||||
|
acc +18
|
||||||
|
acc +29
|
||||||
|
acc +33
|
||||||
|
jmp -115
|
||||||
|
acc +47
|
||||||
|
acc +19
|
||||||
|
jmp +1
|
||||||
|
nop +41
|
||||||
|
jmp +1
|
||||||
|
jmp -207
|
||||||
|
nop -62
|
||||||
|
acc -9
|
||||||
|
acc +42
|
||||||
|
acc -12
|
||||||
|
jmp -56
|
||||||
|
acc +28
|
||||||
|
jmp -163
|
||||||
|
acc +25
|
||||||
|
acc +17
|
||||||
|
jmp -217
|
||||||
|
acc +7
|
||||||
|
jmp +272
|
||||||
|
acc +43
|
||||||
|
acc +22
|
||||||
|
jmp +70
|
||||||
|
acc -17
|
||||||
|
jmp -117
|
||||||
|
acc +24
|
||||||
|
acc +26
|
||||||
|
nop -275
|
||||||
|
jmp -46
|
||||||
|
nop +87
|
||||||
|
acc +19
|
||||||
|
acc +28
|
||||||
|
jmp -34
|
||||||
|
acc +4
|
||||||
|
acc +9
|
||||||
|
acc +6
|
||||||
|
jmp +1
|
||||||
|
jmp +28
|
||||||
|
acc -6
|
||||||
|
nop -67
|
||||||
|
acc -10
|
||||||
|
jmp +271
|
||||||
|
acc +40
|
||||||
|
acc +25
|
||||||
|
acc -4
|
||||||
|
jmp -63
|
||||||
|
acc +46
|
||||||
|
jmp +78
|
||||||
|
acc +41
|
||||||
|
nop -126
|
||||||
|
nop +70
|
||||||
|
jmp +1
|
||||||
|
jmp +172
|
||||||
|
nop +270
|
||||||
|
jmp +30
|
||||||
|
jmp +1
|
||||||
|
acc +38
|
||||||
|
nop +68
|
||||||
|
acc +29
|
||||||
|
jmp +253
|
||||||
|
acc -18
|
||||||
|
jmp -89
|
||||||
|
acc +18
|
||||||
|
acc +30
|
||||||
|
jmp +147
|
||||||
|
acc +24
|
||||||
|
acc +11
|
||||||
|
acc +50
|
||||||
|
jmp -225
|
||||||
|
jmp -210
|
||||||
|
acc -18
|
||||||
|
acc +1
|
||||||
|
acc +38
|
||||||
|
jmp +1
|
||||||
|
jmp -79
|
||||||
|
acc +45
|
||||||
|
acc +12
|
||||||
|
jmp +209
|
||||||
|
jmp -207
|
||||||
|
acc +32
|
||||||
|
acc +4
|
||||||
|
acc +32
|
||||||
|
acc +14
|
||||||
|
jmp +83
|
||||||
|
acc +13
|
||||||
|
acc +1
|
||||||
|
acc +46
|
||||||
|
acc +38
|
||||||
|
jmp +28
|
||||||
|
nop +153
|
||||||
|
acc -17
|
||||||
|
jmp -73
|
||||||
|
acc +11
|
||||||
|
jmp +248
|
||||||
|
acc +29
|
||||||
|
acc +45
|
||||||
|
acc +16
|
||||||
|
jmp +96
|
||||||
|
jmp -273
|
||||||
|
acc +34
|
||||||
|
jmp +87
|
||||||
|
nop +99
|
||||||
|
acc -3
|
||||||
|
jmp -74
|
||||||
|
acc +12
|
||||||
|
nop -119
|
||||||
|
jmp -141
|
||||||
|
acc -18
|
||||||
|
nop -79
|
||||||
|
acc +1
|
||||||
|
acc +6
|
||||||
|
jmp +9
|
||||||
|
acc +3
|
||||||
|
acc +44
|
||||||
|
acc +39
|
||||||
|
jmp -165
|
||||||
|
acc +6
|
||||||
|
jmp +44
|
||||||
|
acc +25
|
||||||
|
jmp -133
|
||||||
|
acc +0
|
||||||
|
jmp +14
|
||||||
|
jmp +1
|
||||||
|
acc +1
|
||||||
|
jmp -223
|
||||||
|
jmp +71
|
||||||
|
nop -1
|
||||||
|
acc +22
|
||||||
|
acc +11
|
||||||
|
jmp -274
|
||||||
|
jmp -330
|
||||||
|
acc +45
|
||||||
|
jmp +1
|
||||||
|
acc +15
|
||||||
|
jmp -158
|
||||||
|
jmp -128
|
||||||
|
acc +50
|
||||||
|
acc +26
|
||||||
|
jmp -73
|
||||||
|
nop +99
|
||||||
|
jmp +71
|
||||||
|
acc +35
|
||||||
|
acc +7
|
||||||
|
jmp +192
|
||||||
|
acc +13
|
||||||
|
jmp +190
|
||||||
|
acc +4
|
||||||
|
acc -1
|
||||||
|
acc +40
|
||||||
|
acc -15
|
||||||
|
jmp +50
|
||||||
|
acc +29
|
||||||
|
jmp -337
|
||||||
|
jmp -75
|
||||||
|
acc +41
|
||||||
|
jmp +1
|
||||||
|
jmp -387
|
||||||
|
acc +28
|
||||||
|
acc +18
|
||||||
|
acc +19
|
||||||
|
jmp -62
|
||||||
|
nop -196
|
||||||
|
jmp -410
|
||||||
|
jmp +1
|
||||||
|
acc -17
|
||||||
|
jmp -267
|
||||||
|
acc +22
|
||||||
|
jmp -301
|
||||||
|
nop -98
|
||||||
|
acc -15
|
||||||
|
jmp -124
|
||||||
|
acc +45
|
||||||
|
acc -18
|
||||||
|
acc +15
|
||||||
|
acc +42
|
||||||
|
jmp -296
|
||||||
|
nop -10
|
||||||
|
acc +29
|
||||||
|
jmp -371
|
||||||
|
acc +3
|
||||||
|
jmp +1
|
||||||
|
nop +61
|
||||||
|
acc +5
|
||||||
|
jmp -361
|
||||||
|
acc -5
|
||||||
|
nop -326
|
||||||
|
jmp -379
|
||||||
|
acc -10
|
||||||
|
jmp +1
|
||||||
|
acc +44
|
||||||
|
jmp -231
|
||||||
|
acc +3
|
||||||
|
jmp -94
|
||||||
|
acc +1
|
||||||
|
jmp +113
|
||||||
|
jmp -336
|
||||||
|
acc +4
|
||||||
|
jmp -299
|
||||||
|
acc -13
|
||||||
|
jmp +1
|
||||||
|
acc +13
|
||||||
|
jmp +143
|
||||||
|
acc -11
|
||||||
|
acc -19
|
||||||
|
acc +18
|
||||||
|
nop -390
|
||||||
|
jmp -27
|
||||||
|
acc +42
|
||||||
|
jmp -232
|
||||||
|
acc +15
|
||||||
|
jmp -228
|
||||||
|
acc +21
|
||||||
|
acc +39
|
||||||
|
acc +47
|
||||||
|
acc +6
|
||||||
|
jmp +57
|
||||||
|
acc +28
|
||||||
|
acc +27
|
||||||
|
acc +50
|
||||||
|
jmp -397
|
||||||
|
acc +12
|
||||||
|
jmp -445
|
||||||
|
acc +30
|
||||||
|
jmp -352
|
||||||
|
acc -4
|
||||||
|
acc +26
|
||||||
|
acc +48
|
||||||
|
jmp +1
|
||||||
|
jmp -205
|
||||||
|
jmp +22
|
||||||
|
nop -284
|
||||||
|
acc -1
|
||||||
|
nop -361
|
||||||
|
acc +0
|
||||||
|
jmp -368
|
||||||
|
acc -17
|
||||||
|
nop -223
|
||||||
|
jmp -41
|
||||||
|
acc +4
|
||||||
|
acc +46
|
||||||
|
jmp +79
|
||||||
|
jmp -370
|
||||||
|
jmp -260
|
||||||
|
acc +42
|
||||||
|
jmp -14
|
||||||
|
acc +30
|
||||||
|
acc +50
|
||||||
|
acc +13
|
||||||
|
jmp -61
|
||||||
|
acc +46
|
||||||
|
jmp -63
|
||||||
|
nop -55
|
||||||
|
nop -320
|
||||||
|
jmp -11
|
||||||
|
acc +10
|
||||||
|
jmp -424
|
||||||
|
jmp -11
|
||||||
|
acc +3
|
||||||
|
jmp -71
|
||||||
|
acc +42
|
||||||
|
acc -13
|
||||||
|
jmp +4
|
||||||
|
nop -155
|
||||||
|
nop -138
|
||||||
|
jmp +62
|
||||||
|
acc +11
|
||||||
|
acc +19
|
||||||
|
acc +15
|
||||||
|
acc +17
|
||||||
|
jmp -73
|
||||||
|
acc -11
|
||||||
|
jmp -273
|
||||||
|
acc +8
|
||||||
|
acc +6
|
||||||
|
acc -7
|
||||||
|
acc +41
|
||||||
|
jmp -311
|
||||||
|
jmp -111
|
||||||
|
jmp -260
|
||||||
|
jmp +50
|
||||||
|
jmp -60
|
||||||
|
jmp +1
|
||||||
|
nop -89
|
||||||
|
acc +36
|
||||||
|
acc +14
|
||||||
|
jmp -220
|
||||||
|
nop -415
|
||||||
|
acc +28
|
||||||
|
jmp -402
|
||||||
|
acc +41
|
||||||
|
jmp -165
|
||||||
|
acc +9
|
||||||
|
acc -13
|
||||||
|
acc -18
|
||||||
|
acc +18
|
||||||
|
jmp -504
|
||||||
|
acc -9
|
||||||
|
acc +29
|
||||||
|
acc +44
|
||||||
|
jmp -444
|
||||||
|
acc +5
|
||||||
|
acc +47
|
||||||
|
jmp -545
|
||||||
|
acc +23
|
||||||
|
acc +7
|
||||||
|
nop -240
|
||||||
|
jmp -320
|
||||||
|
jmp -141
|
||||||
|
jmp +1
|
||||||
|
acc +28
|
||||||
|
nop -287
|
||||||
|
jmp -118
|
||||||
|
acc +44
|
||||||
|
acc -7
|
||||||
|
jmp -550
|
||||||
|
acc +10
|
||||||
|
acc +20
|
||||||
|
acc -3
|
||||||
|
jmp -401
|
||||||
|
acc +45
|
||||||
|
acc +36
|
||||||
|
jmp -375
|
||||||
|
jmp -485
|
||||||
|
acc +9
|
||||||
|
jmp -338
|
||||||
|
jmp -510
|
||||||
|
jmp -196
|
||||||
|
acc -16
|
||||||
|
jmp -372
|
||||||
|
acc +0
|
||||||
|
jmp -380
|
||||||
|
acc -3
|
||||||
|
nop -473
|
||||||
|
nop -361
|
||||||
|
jmp -311
|
||||||
|
acc +0
|
||||||
|
nop +20
|
||||||
|
jmp -436
|
||||||
|
acc +9
|
||||||
|
jmp +1
|
||||||
|
jmp -215
|
||||||
|
acc +19
|
||||||
|
jmp -451
|
||||||
|
jmp -43
|
||||||
|
acc -13
|
||||||
|
acc -10
|
||||||
|
acc -5
|
||||||
|
jmp -208
|
||||||
|
acc -11
|
||||||
|
jmp -156
|
||||||
|
acc +11
|
||||||
|
acc -2
|
||||||
|
nop -357
|
||||||
|
jmp -73
|
||||||
|
acc +21
|
||||||
|
jmp -159
|
||||||
|
acc +28
|
||||||
|
acc -16
|
||||||
|
acc +12
|
||||||
|
acc +1
|
||||||
|
jmp -282
|
||||||
|
jmp -131
|
||||||
|
acc -11
|
||||||
|
acc +45
|
||||||
|
acc +0
|
||||||
|
acc +28
|
||||||
|
jmp +1
|
|
@ -0,0 +1,9 @@
|
||||||
|
nop +0
|
||||||
|
acc +1
|
||||||
|
jmp +4
|
||||||
|
acc +3
|
||||||
|
jmp -3
|
||||||
|
acc -99
|
||||||
|
acc +1
|
||||||
|
jmp -4
|
||||||
|
acc +6
|
Loading…
Reference in New Issue
Block a user