diff --git a/day8/day8.go b/day8/day8.go new file mode 100644 index 0000000..55b41a8 --- /dev/null +++ b/day8/day8.go @@ -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 +} + + diff --git a/day8/day8Input.txt b/day8/day8Input.txt new file mode 100644 index 0000000..bb00420 --- /dev/null +++ b/day8/day8Input.txt @@ -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 \ No newline at end of file diff --git a/day8/day8Test.txt b/day8/day8Test.txt new file mode 100644 index 0000000..6fee349 --- /dev/null +++ b/day8/day8Test.txt @@ -0,0 +1,9 @@ +nop +0 +acc +1 +jmp +4 +acc +3 +jmp -3 +acc -99 +acc +1 +jmp -4 +acc +6 \ No newline at end of file