Day 24 solved.
This commit is contained in:
parent
3f9bfdf512
commit
ed95f875ad
98
2020/day24.go
Normal file
98
2020/day24.go
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"git.annabunch.es/annabunches/adventofcode/2020/lib/util"
|
||||||
|
)
|
||||||
|
|
||||||
|
func parseInput(input []string) map[[2]int]bool {
|
||||||
|
tiles := make(map[[2]int]bool)
|
||||||
|
for _, line := range input {
|
||||||
|
coords := [2]int{0, 0}
|
||||||
|
for i := 0; i < len(line); i++ {
|
||||||
|
switch line[i] {
|
||||||
|
case 'e':
|
||||||
|
coords[0]++
|
||||||
|
case 'w':
|
||||||
|
coords[0]--
|
||||||
|
case 'n':
|
||||||
|
next := line[i+1]
|
||||||
|
switch next {
|
||||||
|
case 'e':
|
||||||
|
coords[0]++
|
||||||
|
coords[1]--
|
||||||
|
case 'w':
|
||||||
|
coords[1]--
|
||||||
|
}
|
||||||
|
i++
|
||||||
|
case 's':
|
||||||
|
next := line[i+1]
|
||||||
|
switch next {
|
||||||
|
case 'e':
|
||||||
|
coords[1]++
|
||||||
|
case 'w':
|
||||||
|
coords[0]--
|
||||||
|
coords[1]++
|
||||||
|
}
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if tile, ok := tiles[coords]; ok && tile == true {
|
||||||
|
tiles[coords] = false
|
||||||
|
} else {
|
||||||
|
tiles[coords] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return tiles
|
||||||
|
}
|
||||||
|
|
||||||
|
func runGeneration(oldGen map[[2]int]bool) map[[2]int]bool {
|
||||||
|
counts := make(map[[2]int]int)
|
||||||
|
newGen := make(map[[2]int]bool)
|
||||||
|
|
||||||
|
for coords, live := range oldGen {
|
||||||
|
if live {
|
||||||
|
counts[[2]int{coords[0] + 1, coords[1]}]++
|
||||||
|
counts[[2]int{coords[0] - 1, coords[1]}]++
|
||||||
|
counts[[2]int{coords[0], coords[1] + 1}]++
|
||||||
|
counts[[2]int{coords[0], coords[1] - 1}]++
|
||||||
|
counts[[2]int{coords[0] + 1, coords[1] - 1}]++
|
||||||
|
counts[[2]int{coords[0] - 1, coords[1] + 1}]++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for coords, count := range counts {
|
||||||
|
if oldGen[coords] && count <= 2 {
|
||||||
|
newGen[coords] = true
|
||||||
|
}
|
||||||
|
if !oldGen[coords] && count == 2 {
|
||||||
|
newGen[coords] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return newGen
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
step := os.Args[1]
|
||||||
|
values := util.InputParserStrings(os.Args[2])
|
||||||
|
|
||||||
|
tiles := parseInput(values)
|
||||||
|
|
||||||
|
if step == "2" {
|
||||||
|
for i := 0; i < 100; i++ {
|
||||||
|
tiles = runGeneration(tiles)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
count := 0
|
||||||
|
for _, v := range tiles {
|
||||||
|
if v == true {
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println(count)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user