Files
adventofcode/2022/go/day10/day10.go
2023-11-16 10:48:53 +00:00

77 lines
1.5 KiB
Go

package day10
import (
"adventofcode2022/utils"
_ "fmt"
"strings"
)
func Part1(input string) int {
lines := strings.Split(input, "\n")
cycle := 0
strength := 0
x := 1
for _, line := range lines {
cmd := strings.Split(line, " ")
switch {
case cmd[0] == "noop":
strength,cycle = cycles_1(1, cycle, strength, x)
case cmd[0] == "addx":
strength, cycle = cycles_1(2, cycle, strength, x)
x += utils.MustAtoi(cmd[1])
}
}
return strength
}
func Part2(input string) string {
lines := strings.Split(input, "\n")
cycle := 0
x := 1
crt := [6][40]string{}
for _, line := range lines {
cmd := strings.Split(line, " ")
switch {
case cmd[0] == "noop":
cycle = cycles_2(1, cycle, x, &crt)
case cmd[0] == "addx":
cycle = cycles_2(2, cycle, x, &crt)
x += utils.MustAtoi(cmd[1])
}
}
output := "\n"
for i:=0;i<6;i++ {
for j:=0;j<40;j++ {
output = output + crt[i][j]
}
output = output + "\n"
}
return output
}
func cycles_1(num int, cycle int, strength int, x int) (int, int) {
for i:=0;i<num;i++ {
cycle++
if cycle == 20 {
strength = strength + (x * cycle)
} else if (cycle - 20) % 40 == 0 {
strength = strength + (x * cycle)
}
}
return strength, cycle
}
func cycles_2(num int, cycle int, x int, crt *[6][40]string) int {
for i:=0;i<num;i++ {
crt_x := cycle / 40
crt_y := cycle % 40
if x-1 == crt_y || x == crt_y || x+1 == crt_y {
crt[crt_x][crt_y] = "#"
} else {
crt[crt_x][crt_y] = " "
}
cycle++
}
return cycle
}