This commit is contained in:
Stefan Harmuth 2021-01-15 07:37:05 +01:00
parent cffbd23a11
commit 4328f27544
4 changed files with 118 additions and 0 deletions

65
day23/day.go Normal file
View File

@ -0,0 +1,65 @@
package day23
import (
"strconv"
"strings"
"tools"
)
func run(code []string, registers map[string]int) {
instptr := 0
for instptr < len(code) {
instrparts := strings.Split(code[instptr], " ")
switch instrparts[0] {
case "hlf": // half a register
registers[instrparts[1]] /= 2
instptr++
case "tpl": // tripple a register
registers[instrparts[1]] *= 3
instptr++
case "inc": // increase register by 1
registers[instrparts[1]]++
instptr++
case "jmp": // jump to instruction
jumpamount, _ := strconv.Atoi(instrparts[1])
instptr += jumpamount
case "jie": // jump to instruction if register is even
if registers[string(instrparts[1][0])]%2 == 0 {
jumpamount, _ := strconv.Atoi(instrparts[2])
instptr += jumpamount
} else {
instptr++
}
case "jio": // jump to instruction if register is one
if registers[string(instrparts[1][0])] == 1 {
jumpamount, _ := strconv.Atoi(instrparts[2])
instptr += jumpamount
} else {
instptr++
}
}
}
}
func Part1(puzzle tools.AoCPuzzle) interface{} {
code := puzzle.GetInputArray()
registers := map[string]int{
"a": 0,
"b": 0,
}
run(code, registers)
return registers["b"]
}
func Part2(puzzle tools.AoCPuzzle) interface{} {
code := puzzle.GetInputArray()
registers := map[string]int{
"a": 1,
"b": 0,
}
run(code, registers)
return registers["b"]
}

47
inputs/23 Normal file
View File

@ -0,0 +1,47 @@
jio a, +18
inc a
tpl a
inc a
tpl a
tpl a
tpl a
inc a
tpl a
inc a
tpl a
inc a
inc a
tpl a
tpl a
tpl a
inc a
jmp +22
tpl a
inc a
tpl a
inc a
inc a
tpl a
inc a
tpl a
inc a
inc a
tpl a
tpl a
inc a
inc a
tpl a
inc a
inc a
tpl a
inc a
inc a
tpl a
jio a, +8
inc b
jie a, +4
tpl a
inc a
jmp +2
hlf a
jmp -7

4
inputs/23_test Normal file
View File

@ -0,0 +1,4 @@
inc a
jio a, +2
tpl a
inc a

View File

@ -23,6 +23,7 @@ import (
"aoc2015/day20"
"aoc2015/day21"
"aoc2015/day22"
"aoc2015/day23"
"flag"
"fmt"
"os"
@ -62,6 +63,7 @@ func initDayFunctions() {
20: {1: day20.Part1, 2: day20.Part2},
21: {1: day21.Part1, 2: day21.Part2},
22: {1: day22.Part1, 2: day22.Part2},
23: {1: day23.Part1, 2: day23.Part2},
}
}