Skip to content

Commit 46dd9fb

Browse files
committed
cleanup
1 parent 8e19dec commit 46dd9fb

File tree

1 file changed

+25
-32
lines changed

1 file changed

+25
-32
lines changed

2024/day05/p1.sh

Lines changed: 25 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,60 +5,53 @@ FILE="$1"
55
declare -A deps
66

77
parse_rule() {
8-
first="${1%%|*}"
9-
second="${1##*|}"
10-
if [[ -n "${deps[$second]}" ]]; then
11-
first="${deps[$second]} $first"
8+
IFS='|' read a b <<< "$line"
9+
if [[ -n "${deps[$b]}" ]]; then
10+
a="${deps[$b]} $a"
1211
fi
13-
deps[$second]="$first"
12+
deps[$b]="$a"
1413
}
1514

1615
split() {
17-
# Usage: split "string" "delimiter"
1816
IFS=$'\n' read -d "" -ra arr <<< "${1//$2/$'\n'}"
1917
}
2018

2119
parse_update() {
22-
local -a arr
23-
local INVALID
24-
local -a violations
25-
split "$1" ,
20+
local -a arr violations
21+
local invalid
22+
split "$line" ,
2623
local -a pages=("${arr[@]}")
2724
for page in "${pages[@]}"; do
2825
split "${deps[$page]}" ' '
2926
for v in "${violations[@]}"; do
3027
if [[ "$v" == "$page" ]]; then
31-
INVALID=yes
28+
invalid=yes
3229
fi
3330
done
3431
violations+=("${arr[@]}")
3532
done
36-
[[ -z "$INVALID" ]] && echo "${pages[@]}"
33+
[[ -z "$invalid" ]] && echo "${pages[@]}"
3734
}
3835

3936
middle() {
40-
local line
41-
local -a arr
42-
while IFS= read -r line; do
43-
split "$line" ' '
44-
LEN="${#arr[@]}"
45-
((LEN/=2))
46-
echo ${arr["$LEN"]}
37+
awk '{print $((NF+1)/2)}'
38+
}
39+
40+
main() {
41+
while read line; do
42+
test -z "$line" && break
43+
parse_rule
44+
done
45+
46+
while read line; do
47+
parse_update
4748
done
4849
}
4950

50-
while IFS= read -r line; do
51-
if [[ "$line" == "" ]]; then
52-
section=2
53-
continue
54-
fi
51+
sum() {
52+
paste -sd+ | bc
53+
}
5554

56-
if [[ $section -eq 2 ]]; then
57-
parse_update "$line"
58-
else
59-
parse_rule "$line"
60-
fi
61-
done < "$FILE" \
55+
main < "$FILE" \
6256
| middle \
63-
| paste -sd+ \
64-
| bc
57+
| sum

0 commit comments

Comments
 (0)