91 lines
1.6 KiB
Go
91 lines
1.6 KiB
Go
package day13
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
type coord struct {
|
|
x int
|
|
y int
|
|
}
|
|
|
|
func Run(dat []byte) (int, int) {
|
|
|
|
splitBytes := bytes.Split(dat, []byte{10, 10})
|
|
stringCoords := strings.Split(string(splitBytes[0]), "\n")
|
|
stringInstructions := strings.Split(string(splitBytes[1]), "\n")
|
|
|
|
coordMap := make(map[coord]int)
|
|
|
|
for _, line := range stringCoords {
|
|
splitLine := strings.Split(line, ",")
|
|
x, _ := strconv.Atoi(splitLine[0])
|
|
y, _ := strconv.Atoi(splitLine[1])
|
|
coordMap[coord{x: x, y: y}] = coordMap[coord{x: x, y: y}] + 1
|
|
}
|
|
|
|
part1 := 0
|
|
part2 := 0
|
|
|
|
for i := 0; i < len(stringInstructions); i++ {
|
|
splitInstruction := strings.Split(stringInstructions[i], "fold along ")
|
|
number, _ := strconv.Atoi(string(splitInstruction[1][2:]))
|
|
if splitInstruction[1][0] == 'y' {
|
|
|
|
for k, _ := range coordMap {
|
|
if k.y > number {
|
|
delete(coordMap, k)
|
|
coordMap[coord{x: k.x, y: k.y - ((k.y - number) * 2)}] += 1
|
|
}
|
|
}
|
|
|
|
} else {
|
|
|
|
for k, _ := range coordMap {
|
|
if k.x > number {
|
|
delete(coordMap, k)
|
|
coordMap[coord{x: k.x - ((k.x - number) * 2), y: k.y}] = 1
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
if (i == 0) {
|
|
for k, _ := range coordMap {
|
|
if coordMap[k] > 0 {
|
|
part1++
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
highestX := 0
|
|
highestY := 0
|
|
for k, _ := range coordMap {
|
|
if k.x > highestX {
|
|
highestX = k.x
|
|
}
|
|
if k.y > highestY {
|
|
highestY = k.y
|
|
}
|
|
}
|
|
|
|
|
|
for i := 0; i <= highestY; i++ {
|
|
for j := 0; j <= highestX; j++ {
|
|
|
|
if coordMap[coord{x: j, y: i}] > 0 {
|
|
fmt.Print("#")
|
|
} else {
|
|
fmt.Print(".")
|
|
}
|
|
}
|
|
fmt.Println()
|
|
}
|
|
|
|
return part1, part2
|
|
} |