Skip to content

Commit b66f54e

Browse files
committed
AoC 2025 Day 11 - bash
1 parent 85ac648 commit b66f54e

File tree

2 files changed

+105
-1
lines changed

2 files changed

+105
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
| ---| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
1111
| python3 | [](src/main/python/AoC2025_01.py) | [](src/main/python/AoC2025_02.py) | [](src/main/python/AoC2025_03.py) | [](src/main/python/AoC2025_04.py) | [](src/main/python/AoC2025_05.py) | [](src/main/python/AoC2025_06.py) | [](src/main/python/AoC2025_07.py) | [](src/main/python/AoC2025_08.py) | [](src/main/python/AoC2025_09.py) | [](src/main/python/AoC2025_10.py) | [](src/main/python/AoC2025_11.py) | |
1212
| java | [](src/main/java/AoC2025_01.java) | [](src/main/java/AoC2025_02.java) | [](src/main/java/AoC2025_03.java) | [](src/main/java/AoC2025_04.java) | [](src/main/java/AoC2025_05.java) | [](src/main/java/AoC2025_06.java) | [](src/main/java/AoC2025_07.java) | [](src/main/java/AoC2025_08.java) | [](src/main/java/AoC2025_09.java) | [](src/main/java/AoC2025_10.java) | [](src/main/java/AoC2025_11.java) | |
13-
| bash | [](src/main/bash/AoC2025_01.sh) | [](src/main/bash/AoC2025_02.sh) | [](src/main/bash/AoC2025_03.sh) | [](src/main/bash/AoC2025_04.sh) | [](src/main/bash/AoC2025_05.sh) | [](src/main/bash/AoC2025_06.sh) | [](src/main/bash/AoC2025_07.sh) | | | | | |
13+
| bash | [](src/main/bash/AoC2025_01.sh) | [](src/main/bash/AoC2025_02.sh) | [](src/main/bash/AoC2025_03.sh) | [](src/main/bash/AoC2025_04.sh) | [](src/main/bash/AoC2025_05.sh) | [](src/main/bash/AoC2025_06.sh) | [](src/main/bash/AoC2025_07.sh) | | | | [](src/main/bash/AoC2025_11.sh) | |
1414
<!-- @END:ImplementationsTable:2025@ -->
1515

1616
## 2024

src/main/bash/AoC2025_11.sh

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
#!/bin/bash
2+
#
3+
# Advent of Code 2025 Day 11
4+
#
5+
6+
year=2025
7+
day=11
8+
9+
declare -A edges
10+
declare -A cache
11+
12+
create_graph() {
13+
while read -r line || [ -n "$line" ]; do
14+
local node="${line%%:*}"
15+
local neighbours="${line:${#node}+2}"
16+
edges[$node]="$neighbours"
17+
done < "$1"
18+
return 0
19+
}
20+
21+
dfs() {
22+
local node="$1"
23+
[[ -n "${cache[$node]}" ]] && {
24+
return 0
25+
}
26+
[ "$node" = "$end" ] && {
27+
((cache["$node"] += 1))
28+
return 0
29+
}
30+
IFS=' ' read -ra neighbours <<< "${edges[$node]}"
31+
local n
32+
for n in "${neighbours[@]}"; do
33+
dfs "$n"
34+
((cache["$node"] += cache["$n"]))
35+
done
36+
return 0
37+
}
38+
39+
count_all_paths() {
40+
cache=()
41+
local start="$1"
42+
local end="$2"
43+
dfs "$start"
44+
echo "${cache[$start]}"
45+
return 0
46+
}
47+
48+
part1() {
49+
create_graph "$1"
50+
count_all_paths "you" "out"
51+
return 0
52+
}
53+
54+
part2() {
55+
create_graph "$1"
56+
local -i ans1=1
57+
((ans1 *= $(count_all_paths "svr" "dac")))
58+
((ans1 *= $(count_all_paths "dac" "fft")))
59+
((ans1 *= $(count_all_paths "fft" "out")))
60+
local -i ans2=1
61+
((ans2 *= $(count_all_paths "svr" "fft")))
62+
((ans2 *= $(count_all_paths "fft" "dac")))
63+
((ans2 *= $(count_all_paths "dac" "out")))
64+
echo $((ans1 + ans2))
65+
return 0
66+
}
67+
68+
tests() {
69+
# shellcheck disable=SC2034
70+
{
71+
sample1=(
72+
"aaa: you hhh"
73+
"you: bbb ccc"
74+
"bbb: ddd eee"
75+
"ccc: ddd eee fff"
76+
"ddd: ggg"
77+
"eee: out"
78+
"fff: out"
79+
"ggg: out"
80+
"hhh: ccc fff iii"
81+
"iii: out"
82+
)
83+
sample2=(
84+
"svr: aaa bbb"
85+
"aaa: fft"
86+
"fft: ccc"
87+
"bbb: tty"
88+
"tty: ccc"
89+
"ccc: ddd eee"
90+
"ddd: hub"
91+
"hub: fff"
92+
"eee: dac"
93+
"dac: fff"
94+
"fff: ggg hhh"
95+
"ggg: out"
96+
"hhh: out"
97+
)
98+
}
99+
100+
TEST part1 sample1 5
101+
TEST part2 sample2 2
102+
}
103+
104+
source "$(dirname "$0")/aoc_main.sh"

0 commit comments

Comments
 (0)