Files
advent-of-code-go/2016/day08/main.go
T
2020-12-22 20:09:03 -05:00

90 lines
1.9 KiB
Go

package main
import (
"flag"
"fmt"
"strings"
"github.com/alexchao26/advent-of-code-go/util"
)
func main() {
var part int
flag.IntVar(&part, "part", 1, "part 1 or 2")
flag.Parse()
fmt.Println("Running part", part)
count, finalString := twoFA(util.ReadFile("./input.txt"), 6, 50)
if part == 1 {
fmt.Println("Output:", count)
} else {
fmt.Println("Output:")
fmt.Println(finalString)
}
}
func twoFA(input string, height, width int) (int, string) {
instructions := strings.Split(input, "\n")
var grid [][]bool
for i := 0; i < height; i++ {
grid = append(grid, make([]bool, width))
}
for _, inst := range instructions {
if strings.HasPrefix(inst, "rect") {
var row, col int
fmt.Sscanf(inst, "rect %dx%d", &col, &row)
for r := 0; r < row; r++ {
for c := 0; c < col; c++ {
grid[r][c] = true
}
}
} else if strings.HasPrefix(inst, "rotate row") {
var row, by int
_, err := fmt.Sscanf(inst, "rotate row y=%d by %d", &row, &by)
if err != nil {
panic("parsing error on instruction: " + err.Error())
}
for count := 0; count < by; count++ {
store := grid[row][width-1]
for i := width - 1; i > 0; i-- {
grid[row][i] = grid[row][i-1]
}
grid[row][0] = store
}
} else if strings.HasPrefix(inst, "rotate column") {
var col, by int
_, err := fmt.Sscanf(inst, "rotate column x=%d by %d", &col, &by)
if err != nil {
panic("parsing error on instruction: " + err.Error())
}
for count := 0; count < by; count++ {
store := grid[height-1][col]
for r := height - 1; r > 0; r-- {
grid[r][col] = grid[r-1][col]
}
grid[0][col] = store
}
} else {
panic("unhandled instruction: " + inst)
}
}
var count int
var finalState string
// count on pixels
for _, row := range grid {
for _, v := range row {
if v {
finalState += "#"
count++
} else {
finalState += " "
}
}
finalState += "\n"
}
return count, finalState
}