File tree Expand file tree Collapse file tree 1 file changed +95
-0
lines changed
Expand file tree Collapse file tree 1 file changed +95
-0
lines changed Original file line number Diff line number Diff line change 1+ #! /bin/bash
2+ #
3+ # Advent of Code 2025 Day 4
4+ #
5+
6+ year=2025
7+ day=04
8+
9+ declare -a grid
10+ H=0
11+ W=0
12+
13+ find_removable () {
14+ local -a ans_removable=()
15+ for (( r = 0 ; r < H; r++ )) ; do
16+ for (( c = 0 ; c < W; c++ )) ; do
17+ if [ " ${grid[r]: c: 1} " = ' @' ]; then
18+ local -i cnt=0
19+ for dr in {-1,0,1}; do
20+ for dc in {-1,0,1}; do
21+ local -i rr=$(( r + dr))
22+ local -i cc=$(( c + dc))
23+ (( rr == r && cc == c)) && continue
24+ (( rr < 0 || rr >= H)) && continue
25+ (( cc < 0 || cc >= W)) && continue
26+ if [ " ${grid[rr]: cc: 1} " = ' @' ]; then
27+ (( cnt++ ))
28+ fi
29+ done
30+ done
31+ if [ " $cnt " -lt 4 ]; then
32+ ans_removable+=(" $r :$c " )
33+ fi
34+ fi
35+ done
36+ done
37+ for row in " ${ans_removable[@]} " ; do
38+ echo " $row "
39+ done
40+ }
41+
42+ part1 () {
43+ mapfile -t grid < " $@ "
44+ H=${# grid[@]}
45+ W=${# grid[0]}
46+ mapfile -t removable < <( find_removable)
47+ echo " ${# removable[@]} "
48+ return 0
49+ }
50+
51+ part2 () {
52+ mapfile -t grid < " $@ "
53+ H=${# grid[@]}
54+ W=${# grid[0]}
55+ local -i ans=0
56+ while true ; do
57+ mapfile -t removable < <( find_removable)
58+ (( ${# removable[@]} == 0 )) && break
59+ (( ans += ${# removable[@]} ))
60+ _debug " ${# removable[@]} "
61+ for rem in " ${removable[@]} " ; do
62+ IFS=' :' read -ra rc <<< " $rem"
63+ r=" ${rc[0]} "
64+ c=" ${rc[1]} "
65+ row=" ${grid[r]: 0: c} .${grid[r]: c+1} "
66+ grid[r]=" $row "
67+ done
68+ _debug " updated grid"
69+ done
70+ echo " $ans "
71+ return 0
72+ }
73+
74+ tests () {
75+ # shellcheck disable=SC2034
76+ {
77+ sample=(
78+ " ..@@.@@@@."
79+ " @@@.@.@.@@"
80+ " @@@@@.@.@@"
81+ " @.@@@@..@."
82+ " @@.@@@@.@@"
83+ " .@@@@@@@.@"
84+ " .@.@.@.@@@"
85+ " @.@@@.@@@@"
86+ " .@@@@@@@@."
87+ " @.@.@@@.@."
88+ )
89+ }
90+
91+ TEST part1 sample 13
92+ TEST part2 sample 43
93+ }
94+
95+ source " $( dirname " $0 " ) /aoc_main.sh"
You can’t perform that action at this time.
0 commit comments