Skip to content

Commit a8afab4

Browse files
committed
feat(angch/2025-06): Initial
1 parent 2144cfa commit a8afab4

File tree

2 files changed

+152
-0
lines changed

2 files changed

+152
-0
lines changed

angch/2025-06/main.go

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
package main
2+
3+
import (
4+
"bufio"
5+
"fmt"
6+
"log"
7+
"os"
8+
"strconv"
9+
"strings"
10+
"time"
11+
)
12+
13+
func day6(file string) (part1, part2 int) {
14+
f, err := os.Open(file)
15+
if err != nil {
16+
log.Fatal(err)
17+
}
18+
defer f.Close()
19+
scanner := bufio.NewScanner(f)
20+
21+
cells := [][]int{}
22+
cells2 := [][]int{}
23+
24+
// ops := map[byte]bool{
25+
// '*':true, '+':true,
26+
// }
27+
ops := []string{}
28+
grid := [][]byte{}
29+
for scanner.Scan() {
30+
t := scanner.Text()
31+
gridrow := []byte{}
32+
for _, v := range t {
33+
gridrow = append(gridrow, byte(v))
34+
}
35+
grid = append(grid, gridrow)
36+
37+
for {
38+
ot := t
39+
t = strings.ReplaceAll(t, " ", " ")
40+
t = strings.TrimSpace(t)
41+
if t == ot {
42+
break
43+
}
44+
}
45+
46+
if t[0] == '*' || t[0] == '+' {
47+
ops = strings.Split(t, " ")
48+
break
49+
}
50+
51+
nums_ := strings.Split(t, " ")
52+
row := []int{}
53+
for _, v := range nums_ {
54+
n, _ := strconv.Atoi(v)
55+
row = append(row, n)
56+
}
57+
cells = append(cells, row)
58+
}
59+
60+
row2 := []int{}
61+
opCount := len(ops) - 1
62+
a:
63+
for y := len(grid[0]) - 1; y >= 0; y-- {
64+
s := ""
65+
for x := range len(grid) - 1 {
66+
if grid[x][y] != ' ' {
67+
s += string(grid[x][y])
68+
}
69+
}
70+
i, _ := strconv.Atoi(s)
71+
if i == 0 {
72+
if ops[opCount] == "*" {
73+
out := 1
74+
for _, j := range row2 {
75+
out *= j
76+
}
77+
// fmt.Println("part2", out)
78+
part2 += out
79+
} else {
80+
out := 0
81+
for _, j := range row2 {
82+
out += j
83+
}
84+
// fmt.Println("part2", out)
85+
part2 += out
86+
}
87+
row2 = []int{}
88+
opCount--
89+
if opCount < 0 {
90+
break a
91+
}
92+
} else {
93+
row2 = append(row2, i)
94+
}
95+
}
96+
if ops[opCount] == "*" {
97+
out := 1
98+
for _, j := range row2 {
99+
out *= j
100+
}
101+
// fmt.Println("part2", out)
102+
part2 += out
103+
} else {
104+
out := 0
105+
for _, j := range row2 {
106+
out += j
107+
}
108+
// fmt.Println("part2", out)
109+
part2 += out
110+
}
111+
_ = cells2
112+
113+
// log.Printf("cells %+v\n", cells)
114+
// log.Printf("%#v\n", grid)
115+
116+
for col, op := range ops {
117+
a := 0
118+
if op == "*" {
119+
a = 1
120+
}
121+
for i := range cells {
122+
// log.Println(i, col, cells[i][col])
123+
if op == "*" {
124+
a *= cells[i][col]
125+
} else {
126+
a += cells[i][col]
127+
}
128+
}
129+
// fmt.Println(a)
130+
part1 += a
131+
}
132+
133+
return
134+
}
135+
136+
func main() {
137+
log.SetFlags(log.Lshortfile | log.LstdFlags)
138+
t1 := time.Now()
139+
part1, part2 := day6("test.txt")
140+
fmt.Println(part1, part2)
141+
if part1 != 4277556 || part2 != 3263827 {
142+
log.Fatal("Test failed ", part1, part2)
143+
}
144+
145+
part1, part2 = day6("input.txt")
146+
fmt.Println(part1, part2)
147+
fmt.Println("Elapsed time:", time.Since(t1))
148+
}

angch/2025-06/test.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
123 328 51 64
2+
45 64 387 23
3+
6 98 215 314
4+
* + * +

0 commit comments

Comments
 (0)