AoC, Day 11, Parts 1 and 2 (Solved)
This commit is contained in:
114
2023/11/code.go
Normal file
114
2023/11/code.go
Normal file
@@ -0,0 +1,114 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"math"
|
||||
"strings"
|
||||
|
||||
"github.com/jpillora/puzzler/harness/aoc"
|
||||
)
|
||||
|
||||
func main() {
|
||||
aoc.Harness(run)
|
||||
}
|
||||
|
||||
// on code change, run will be executed 4 times:
|
||||
// 1. with: false (part1), and example input
|
||||
// 2. with: true (part2), and example input
|
||||
// 3. with: false (part1), and user input
|
||||
// 4. with: true (part2), and user input
|
||||
// the return value of each run is printed to stdout
|
||||
func run(part2 bool, input string) any {
|
||||
|
||||
universe := make([][]rune, 0)
|
||||
for _, l := range strings.Split(input, "\n") {
|
||||
if l == "" {
|
||||
continue
|
||||
}
|
||||
line := make([]rune, 0)
|
||||
empty := true
|
||||
for r := range strings.Split(l, "") {
|
||||
if rune(l[r]) != '.' {
|
||||
empty = false
|
||||
}
|
||||
line = append(line, rune(l[r]))
|
||||
}
|
||||
|
||||
if empty {
|
||||
for e := range line {
|
||||
line[e] = '↕'
|
||||
}
|
||||
}
|
||||
universe = append(universe, line)
|
||||
}
|
||||
|
||||
// Now expand inner cols
|
||||
for h := 0; h < len(universe[0]); h++ {
|
||||
empty := true
|
||||
for v := range universe {
|
||||
if universe[v][h] != '.' && universe[v][h] != '↕' {
|
||||
empty = false
|
||||
}
|
||||
}
|
||||
|
||||
if empty {
|
||||
for v := range universe {
|
||||
if universe[v][h] == '↕' {
|
||||
universe[v][h] = '⥁'
|
||||
} else {
|
||||
universe[v][h] = '↔'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// when you're ready to do part 2, remove this "not implemented" block
|
||||
factor := 1
|
||||
if part2 {
|
||||
factor = 1000000
|
||||
} else {
|
||||
// solve part 1 here
|
||||
factor = 2
|
||||
}
|
||||
|
||||
coords := make([][]int, 0)
|
||||
|
||||
vr := 0
|
||||
for v := range universe {
|
||||
if universe[v][0] == '↕' || universe[v][0] == '⥁' {
|
||||
// expand else normal v
|
||||
vr += factor
|
||||
} else {
|
||||
vr += 1
|
||||
}
|
||||
|
||||
hr := 0
|
||||
for h := range universe {
|
||||
if universe[0][h] == '↔' || universe[0][h] == '⥁' {
|
||||
hr += factor
|
||||
} else {
|
||||
hr += 1
|
||||
}
|
||||
|
||||
if universe[v][h] == '#' {
|
||||
coords = append(coords, []int{vr, hr})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sumHyp := 0
|
||||
compared := 0
|
||||
for c1 := 0; c1 < len(coords)-1; c1++ {
|
||||
for c2 := c1 + 1; c2 < len(coords); c2++ {
|
||||
// add rise and run?
|
||||
lenv := int(math.Abs(float64(coords[c1][0] - coords[c2][0])))
|
||||
lenh := int(math.Abs(float64(coords[c1][1] - coords[c2][1])))
|
||||
|
||||
// convert to int?
|
||||
sumHyp += lenv + lenh
|
||||
|
||||
compared++
|
||||
}
|
||||
}
|
||||
|
||||
return sumHyp
|
||||
}
|
||||
Reference in New Issue
Block a user