Skip to content

Commit a467b4b

Browse files
committed
AoC 2025 Day 5 - bash - faster
1 parent 550690a commit a467b4b

File tree

1 file changed

+28
-30
lines changed

1 file changed

+28
-30
lines changed

src/main/bash/AoC2025_05.sh

Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -6,50 +6,25 @@
66
year=2025
77
day=05
88

9-
part1() {
10-
declare -a ranges
11-
local -i split=0
12-
local -i ans=0
13-
while read -r line || [ -n "$line" ]; do
14-
[ -z "$line" ] && {
15-
split=1
16-
continue
17-
}
18-
((split == 0)) && {
19-
ranges+=("$line")
20-
continue
21-
}
22-
local -i val="$line"
23-
for rng in "${ranges[@]}"; do
24-
local -i lo="${rng%%-*}"
25-
local -i hi="${rng:${#lo}+1}"
26-
((lo <= val && val <= hi)) && {
27-
((ans++))
28-
break
29-
}
30-
done
31-
done < "$1"
32-
echo "$ans"
33-
return 0
34-
}
9+
declare -a merged
10+
declare -a ids
3511

36-
part2() {
12+
parse_input() {
3713
declare -a ranges
3814
local -i split=0
3915
while read -r line || [ -n "$line" ]; do
4016
[ -z "$line" ] && {
4117
split=1
42-
break
18+
continue
4319
}
4420
((split == 0)) && {
4521
ranges+=("$line")
4622
continue
4723
}
24+
ids+=("$line")
4825
done < "$1"
49-
local -i ans=0
5026
# shellcheck disable=SC2207
5127
IFS=$'\n' sorted=($(sort --numeric-sort <<< "${ranges[*]}"))
52-
declare -a merged
5328
for rng in "${sorted[@]}"; do
5429
local -i lo="${rng%%-*}"
5530
local -i hi="${rng:${#lo}+1}"
@@ -75,6 +50,29 @@ part2() {
7550
merged+=("$rng")
7651
fi
7752
done
53+
return 0
54+
}
55+
56+
part1() {
57+
parse_input "$1"
58+
local -i ans=0
59+
for val in "${ids[@]}"; do
60+
for rng in "${merged[@]}"; do
61+
local -i lo="${rng%%-*}"
62+
local -i hi="${rng:${#lo}+1}"
63+
((lo <= val && val <= hi)) && {
64+
((ans++))
65+
break
66+
}
67+
done
68+
done
69+
echo "$ans"
70+
return 0
71+
}
72+
73+
part2() {
74+
parse_input "$1"
75+
local -i ans=0
7876
for rng in "${merged[@]}"; do
7977
local -i lo="${rng%%-*}"
8078
local -i hi="${rng:${#lo}+1}"

0 commit comments

Comments
 (0)