2024 All Complete!
This commit is contained in:
parent
40da8b1a0a
commit
521b8c2bcf
3999
2024/day25/input
Normal file
3999
2024/day25/input
Normal file
File diff suppressed because it is too large
Load Diff
81
2024/day25/main.go
Normal file
81
2024/day25/main.go
Normal file
@ -0,0 +1,81 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
||||
)
|
||||
|
||||
func main() {
|
||||
inp := h.StdinToStringSlice()
|
||||
part1(inp)
|
||||
}
|
||||
|
||||
func part1(inp []string) {
|
||||
fmt.Println("# Part 1")
|
||||
keys, locks := parseInput(inp)
|
||||
var pairs int
|
||||
for k := range keys {
|
||||
for l := range locks {
|
||||
if fits(keys[k], locks[l]) {
|
||||
pairs++
|
||||
}
|
||||
}
|
||||
}
|
||||
fmt.Println("Unique Pairs:", pairs)
|
||||
}
|
||||
|
||||
func parseInput(inp []string) ([][]int, [][]int) {
|
||||
var keys, locks [][]int
|
||||
for i := 0; i < len(inp); i += 8 {
|
||||
switch inp[i] {
|
||||
case "#####":
|
||||
locks = append(locks, findPinDepths(inp[i:i+7]))
|
||||
case ".....":
|
||||
keys = append(keys, findToothDepths(inp[i:i+7]))
|
||||
}
|
||||
}
|
||||
return keys, locks
|
||||
}
|
||||
|
||||
func findPinDepths(inp []string) []int {
|
||||
pins := make(map[int]int)
|
||||
for i := range inp {
|
||||
for pin := range inp[i] {
|
||||
if _, ok := pins[pin]; !ok {
|
||||
if inp[i][pin] == '.' {
|
||||
pins[pin] = i - 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ret := []int{pins[0], pins[1], pins[2], pins[3], pins[4]}
|
||||
return ret
|
||||
}
|
||||
|
||||
func findToothDepths(inp []string) []int {
|
||||
teeth := make(map[int]int)
|
||||
for i := range inp {
|
||||
for tooth := range inp[i] {
|
||||
if _, ok := teeth[tooth]; !ok {
|
||||
if inp[i][tooth] == '#' {
|
||||
teeth[tooth] = 6 - i
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ret := []int{teeth[0], teeth[1], teeth[2], teeth[3], teeth[4]}
|
||||
return ret
|
||||
}
|
||||
|
||||
func fits(key, lock []int) bool {
|
||||
if len(key) != len(lock) {
|
||||
return false
|
||||
}
|
||||
for i := 0; i < len(key); i++ {
|
||||
if key[i]+lock[i] > 5 {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
39
2024/day25/testinput
Normal file
39
2024/day25/testinput
Normal file
@ -0,0 +1,39 @@
|
||||
#####
|
||||
.####
|
||||
.####
|
||||
.####
|
||||
.#.#.
|
||||
.#...
|
||||
.....
|
||||
|
||||
#####
|
||||
##.##
|
||||
.#.##
|
||||
...##
|
||||
...#.
|
||||
...#.
|
||||
.....
|
||||
|
||||
.....
|
||||
#....
|
||||
#....
|
||||
#...#
|
||||
#.#.#
|
||||
#.###
|
||||
#####
|
||||
|
||||
.....
|
||||
.....
|
||||
#.#..
|
||||
###..
|
||||
###.#
|
||||
###.#
|
||||
#####
|
||||
|
||||
.....
|
||||
.....
|
||||
.....
|
||||
#....
|
||||
#.#..
|
||||
#.#.#
|
||||
#####
|
Loading…
Reference in New Issue
Block a user