91 lines
1.5 KiB
Go
91 lines
1.5 KiB
Go
|
package day_10
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strconv"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
type Day struct{}
|
||
|
|
||
|
func (d *Day) Part1(in string) string {
|
||
|
sumSignals := 0
|
||
|
cycle := 0
|
||
|
sumValue := 1
|
||
|
|
||
|
for _, val := range strings.Split(in, "\n") {
|
||
|
if val == "" {
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
iterator := 1
|
||
|
if val[0:4] == "addx" {
|
||
|
iterator = 2
|
||
|
}
|
||
|
|
||
|
for i := 0; i < iterator; i++ {
|
||
|
cycle++
|
||
|
if (cycle-20)%40 == 0 {
|
||
|
//fmt.Printf("Cycle: %d | Strength: %d\n", cycle, sumValue)
|
||
|
sumSignals += cycle * sumValue
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if val[0:4] == "addx" {
|
||
|
valToAdd, _ := strconv.Atoi(val[5:])
|
||
|
sumValue += valToAdd
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return fmt.Sprintf("%d", sumSignals)
|
||
|
}
|
||
|
|
||
|
func (d *Day) Part2(in string) string {
|
||
|
//var screen [][]string = make([]string, 200)
|
||
|
//for i := range screen {
|
||
|
// screen [i] = append(screen, 39)
|
||
|
//}
|
||
|
|
||
|
cycle := 0
|
||
|
sumValue := 1
|
||
|
lastSpriteRow := 0
|
||
|
|
||
|
for _, val := range strings.Split(in, "\n") {
|
||
|
if val == "" {
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
iterator := 1
|
||
|
if val[0:4] == "addx" {
|
||
|
iterator = 2
|
||
|
}
|
||
|
|
||
|
for i := 0; i < iterator; i++ {
|
||
|
// The middle of the sprite
|
||
|
spriteColumn := sumValue % 40
|
||
|
|
||
|
cyclePos := cycle % 40
|
||
|
if cyclePos-1 == spriteColumn || cyclePos == spriteColumn || cyclePos+1 == spriteColumn {
|
||
|
fmt.Print("#")
|
||
|
} else {
|
||
|
fmt.Print(".")
|
||
|
}
|
||
|
|
||
|
cycle++
|
||
|
// Print new line
|
||
|
spriteRow := cycle / 40
|
||
|
if lastSpriteRow != spriteRow {
|
||
|
fmt.Print("\n")
|
||
|
lastSpriteRow = spriteRow
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if val[0:4] == "addx" {
|
||
|
valToAdd, _ := strconv.Atoi(val[5:])
|
||
|
sumValue += valToAdd
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return ""
|
||
|
}
|