File tree Expand file tree Collapse file tree 2 files changed +88
-0
lines changed Expand file tree Collapse file tree 2 files changed +88
-0
lines changed Original file line number Diff line number Diff line change 1+ input :
2+ http " https://adventofcode.com/2024/day/25/input" " Cookie:session=${AOC_SESSION} ;" > input
3+
4+ main1 :
5+ go build -o main1 main1.go
6+
7+ .PHONY : run1 clean
8+
9+ run1 : main1 input
10+ ./main1 < input
11+
12+ clean :
13+ rm -f main1 input
Original file line number Diff line number Diff line change 1+ package main
2+
3+ import (
4+ "bufio"
5+ "fmt"
6+ "os"
7+ )
8+
9+ const (
10+ Pins = 5
11+ Height = 7
12+ )
13+
14+ type Schematic [Pins ]int
15+
16+ func main () {
17+ keys , locks := parseInput ()
18+
19+ count := 0
20+ for _ , key := range keys {
21+ for _ , lock := range locks {
22+ if ! overlap (key , lock ) {
23+ count ++
24+ }
25+ }
26+ }
27+ fmt .Println (count )
28+ }
29+
30+ func overlap (key , lock Schematic ) bool {
31+ for i := 0 ; i < Pins ; i ++ {
32+ if key [i ]+ lock [i ] > Height - 2 {
33+ return true
34+ }
35+ }
36+ return false
37+ }
38+
39+ func parseInput () ([]Schematic , []Schematic ) {
40+ var keys , locks []Schematic
41+
42+ scanner := bufio .NewScanner (os .Stdin )
43+ for {
44+ m := [Height ]string {}
45+ for i := 0 ; i < Height ; i ++ {
46+ if ! scanner .Scan () {
47+ return keys , locks
48+ }
49+ m [i ] = scanner .Text ()
50+ }
51+
52+ val , isLock := parseSchema (m )
53+ if isLock {
54+ locks = append (locks , val )
55+ } else {
56+ keys = append (keys , val )
57+ }
58+ scanner .Scan ()
59+ }
60+ }
61+
62+ func parseSchema (m [Height ]string ) (Schematic , bool ) {
63+ res := Schematic {}
64+ for j := 0 ; j < Pins ; j ++ {
65+ count := 0
66+ // ignore first and last line
67+ for i := 1 ; i < Height - 1 ; i ++ {
68+ if m [i ][j ] == '#' {
69+ count ++
70+ }
71+ }
72+ res [j ] = count
73+ }
74+ return res , m [0 ] == "#####" && m [Height - 1 ] == "....."
75+ }
You can’t perform that action at this time.
0 commit comments