Skip to content

Commit 981e6cd

Browse files
committed
Shellcheck: Fix warnings
shellcheck --exclude=SC2128 *.sh
1 parent 90fe714 commit 981e6cd

24 files changed

+134
-133
lines changed

01.sh

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#! /usr/bin/env bash
22
input=${1:-1.txt}
3-
A=($(sort -n $input));
4-
for a in ${A[@]}; do grep -wq $((2020-a)) $input && break; done
3+
A=($(sort -n "$input"));
4+
for a in "${A[@]}"; do grep -wq $((2020-a)) "$input" && break; done
55
echo "1A: $((2020-a)) + $a = $(((2020-a)*a))"
6-
b=:; for a in ${A[@]};do for i in ${A[@]}; do grep -wq $((2020-a-i)) $input && b=break; $b ; done; $b; done
6+
b=:; for a in "${A[@]}";do for i in "${A[@]}"; do grep -wq $((2020-a-i)) "$input" && b=break; $b ; done; $b; done
77
echo "1B: $((2020-a-i)) + $a + $i = $(((2020-a-i)*a*i))"

02.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#! /usr/bin/env bash
22
ans=0
33
IFS=$'-:\ \n'
4-
while read m M b c; do x=${c//[^$b]}; [[ ${#x} -ge $m && ${#x} -le $M ]] && ((++ans)); done < ${1:-2.txt}
4+
while read -r m M b c; do x=${c//[^$b]}; (( ${#x} >= m && ${#x} <= M && ++ans)); done < "${1:-2.txt}"
55
echo "2A: $ans"
66
ans=0
7-
while read m M b c; do x=${c:m-1:1}; y=${c:M-1:1}; [[ $x != $y ]] && [[ $b == $x || $b == $y ]] && ((++ans)); done < ${1:-2.txt}
7+
while read -r m M b c; do x=${c:m-1:1}; y=${c:M-1:1}; (( x != y && ( b == x || b == y ) && ++ans)); done < "${1:-2.txt}"
88
echo "2B: $ans"

03.sh

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#! /usr/bin/env bash
2-
A=($(< ${1:-3.txt})); l=${#A[0]}; k=0; j=3; total=1; x=""
3-
for i in ${A[@]}; do x+=${i:k:1}; ((k=(k+j)%l)); done; x=${x//\.}
2+
A=($(< "${1:-3.txt}")); l=${#A[0]}; k=0; j=3; total=1; x=""
3+
for i in "${A[@]}"; do x+=${i:k:1}; ((k=(k+j)%l)); done; x=${x//\.}
44
echo "3A: ${#x}"
55
idx2=$(seq 0 2 $((${#A[@]}-1)))
6-
for j in 1 3 5 7; do x=""; k=0; for i in ${A[@]}; do x+=${i:k:1}; ((k=(k+j)%l)); done; x=${x//\.}; total+="*${#x}"; done
7-
for j in 1; do x=""; k=0; for i in $idx2; do x+=${A[i]:k:1}; ((k=(k+j)%l)); done ; x=${x//\.}; total+="*${#x}"; done
6+
for j in 1 3 5 7; do x=""; k=0; for i in "${A[@]}"; do x+=${i:k:1}; ((k=(k+j)%l)); done; x=${x//\.}; total+="*${#x}"; done
7+
x=""; k=0; for i in $idx2; do x+=${A[i]:k:1}; ((k=(k+j)%l)); done ; x=${x//\.}; total+="*${#x}"
88
echo "3B: ${total:2} = $((total))"

04.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#! /usr/bin/env bash
22
X='epEhbiH'; x=$X; ans=0
33
IFS=$' \n'
4-
A=($(sed s/^$/XXX/ ${1:-4.txt}))
4+
A=($(sed s/^$/XXX/ "${1:-4.txt}"))
55
for i in "${A[@]}" XXX; do
66
case $i in
77
ecl:*) x=${x/e};;

05.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
#! /usr/bin/env bash
2-
A=($(cat ${1:-5.txt} | tr 'FBLR' '0101' | sort -nr))
2+
A=($(tr 'FBLR' '0101' < "${1:-5.txt}" | sort -nr))
33
echo "5A: $((2#$A))"
4-
j=; for i in ${A[@]}; do [[ ${j: -1} == ${i: -1} ]] && echo "5B: $((2#$j-1))=$((2#$i+1))"; j=$i; done
4+
j=; for i in "${A[@]}"; do [[ "${j: -1}" == "${i: -1}" ]] && echo "5B: $((2#$j-1))=$((2#$i+1))"; j=$i; done

06.sh

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#! /usr/bin/env bash
22
X=abcdefghijklmnopqrstuvwxyz; x=$X; a=0
3-
A=($(sed s/^$/X/ ${1:-6.txt}))
3+
A=($(sed s/^$/X/ "${1:-6.txt}"))
44
A+=(X)
5-
while read -n1 i; do
5+
while read -r -n1 i; do
66
[ "$i" = X ] && { ((a+=26-${#x})); x=$X; }
77
x=${x/$i}
88
done <<< "${A[*]}"
@@ -13,8 +13,8 @@ for line in "${A[@]}"; do
1313
if [[ "$line" = X ]]; then ((a+=${#x})); x=X;
1414
elif [ "$x" = X ]; then x=$line;
1515
else
16-
y=""; while read -n1 i; do [[ ${x/$i} != ${x} ]] && y+="$i"; done <<< $line
17-
# y="";for ((i=0;i<${#line};i++ )); do [[ ${x/${line:i:1}} != ${x} ]] && y+="${line:i:1}"; done
16+
y=""; while read -r -n1 i; do [[ ${x/$i} != "${x}" ]] && y+="$i"; done <<< "$line"
17+
#y="";for ((i=0;i<${#line};i++ )); do [[ ${x/${line:i:1}} != ${x} ]] && y+="${line:i:1}"; done
1818
x=$y;
1919
fi
2020
done

07.sh

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
#! /usr/bin/env bash
22
IFS=$'\n'
33
input=${1:-7.txt}
4-
NEW=($(grep " shiny gold" $input))
4+
NEW=($(grep " shiny gold" "$input"))
55
FOUND=("${NEW[@]// bag*}")
66
BAGS=("${NEW[@]}")
77
while [ ${#FOUND[@]} != 0 ]; do
8-
NEW=($(grep -F "${FOUND[*]}" $input | grep -v -F "${BAGS[*]}" | sort -u))
8+
NEW=($(grep -F "${FOUND[*]}" "$input" | grep -v -F "${BAGS[*]}" | sort -u))
99
BAGS+=("${NEW[@]}")
1010
FOUND=("${NEW[@]// bag*}")
1111
done
1212
echo "7A: ${#BAGS[@]}"
1313
r(){
1414
local A=() a=${1// *} b=0 c=0
15-
A=($(grep ^${1:2} $input | grep -o "[0-9] [a-z]* [a-z]*"))
16-
for i in "${A[@]}"; do c=$(r $i); ((b+=c)); done
15+
A=($(grep "^${1:2}" "$input" | grep -o "[0-9] [a-z]* [a-z]*"))
16+
for i in "${A[@]}"; do c=$(r "$i"); ((b+=c)); done
1717
echo $((a+a*b))
1818
}
1919
total=$(r "1 shiny gold")

08.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#! /usr/bin/env bash
22
IFS=$'\n'
3-
A=($(< ${1:-8.txt}))
3+
A=($(< "${1:-8.txt}"))
44
B=("${A[@]}")
55
solve8() {
66
acc=0; i=0;
@@ -19,7 +19,7 @@ solve8() {
1919
solve8 || echo "8A: $acc"
2020

2121
A=("${B[@]}");
22-
for k in ${!A[@]}; do
22+
for k in "${!A[@]}"; do
2323
if [ ${A[k]:0:3} = nop ]; then A[k]=${A[k]/nop/jmp};
2424
elif [ ${A[k]:0:3} = jmp ]; then A[k]=${A[k]/jmp/nop};
2525
else continue; fi

09.sh

+8-9
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,24 @@
11
#! /usr/bin/env bash
2-
A=($(< ${1:-9.txt}))
2+
A=($(< "${1:-9.txt}"))
33
idx=(${!A[@]})
4-
for i in ${idx[@]:25}; do
4+
for i in "${idx[@]:25}"; do
55
b=:
6-
for j in ${idx[@]:i-25:25-1}; do
7-
[ ${A[j]} -ge ${A[i]} ] && continue
8-
for k in ${idx[@]:j+1:i-j-1}; do
9-
[[ $((${A[j]}+${A[k]})) == ${A[i]} ]] && b=break; $b
6+
for j in "${idx[@]:i-25:25-1}"; do
7+
[[ ${A[j]} -ge ${A[i]} ]] && continue
8+
for k in "${idx[@]:j+1:i-j-1}"; do
9+
((A[j]+A[k] == A[i])) && b=break; $b
1010
done
1111
$b
1212
done
1313
[ "$b" = ":" ] && echo "9A: line $i = ${A[i]}" && break
1414
done
1515

1616
k=0; j=0; sum=${A[j++]}
17-
while [ $sum != ${A[i]} ]; do
17+
while [ "$sum" != "${A[i]}" ]; do
1818
if [[ $sum -lt ${A[i]} ]]; then ((sum+=A[j++]))
1919
elif [[ $sum -gt ${A[i]} ]]; then ((sum-=A[k++]))
2020
fi
2121
[[ $j -ge $i ]] && echo NOT FOUND && break
2222
done
23-
IFS=$'\n'
24-
B=($(echo "${A[*]:k:j-k+1}" | sort -n))
23+
B=($(printf "%s\n" "${A[*]:k:j-k+1}" | sort -n))
2524
echo "9B: $j..$k = $((B+B[${#B[@]}-1]))"

10.sh

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
#! /usr/bin/env bash
2-
A=($(sort -n ${1:-10.txt}))
2+
A=($(sort -n "${1:-10.txt}"))
33
DIFF=(0 0 0 1) # add 3 for the built-in
4-
j=0; for i in "${A[@]}"; do ((DIFF[i-j]+=1));j=$i; done
5-
echo "10A: ${DIFF[1]}*${DIFF[3]}=$((${DIFF[1]}*${DIFF[3]}))"
4+
j=0; for i in "${A[@]}"; do ((DIFF[i-j]+=1)); j=$i; done
5+
echo "10A: ${DIFF[1]}*${DIFF[3]}=$((DIFF[1]*DIFF[3]))"
66
B=; j=0; for i in "${A[@]}"; do B+=$((i-j)); j=$i; done; B+=3;
77
C=(${B//3/ }) # only works because there are nothing but 1s and 3s
88
D=(0 1 2 4 7)
9-
total=1; for i in "${C[@]}"; do total+=*${D[${#i}]}; done
9+
total=1; for i in "${C[@]}"; do total+="*${D[${#i}]}"; done
1010
echo "10B: ${total:2} = $((total))"

11.sh

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
#! /usr/bin/env bash
2-
A=($(tr "L" "X" < ${1:-11.txt}))
2+
A=($(tr "L" "X" < "${1:-11.txt}"))
33
B=(.${A//?/.}.); for i in "${A[@]}"; do B+=(.$i.); done; B+=($B); C=("${B[@]}");
4-
J=$(seq 1 ${#A}); I=$(seq 1 ${#A[@]}); change=($I); round=0
4+
J=$(seq 1 ${#A}); I=$(seq 1 ${#A[@]}); CHANGE=($I); round=0
55
while [ ${#change} != 0 ]; do
6-
change=(); l=
6+
CHANGE=(); l=
77
for i in $I; do
88
for j in $J; do
99
x=${B[i]:j:1}
@@ -14,23 +14,23 @@ while [ ${#change} != 0 ]; do
1414
fi
1515
l+=$x
1616
done
17-
[ "${B[i]}" != .$l. ] && change+=($((i-1)) $i $((i+1)))
17+
[ "${B[i]}" != .$l. ] && CHANGE+=($((i-1)) $i $((i+1)))
1818
C[i]=.$l.; l=
1919
done
2020
B=("${C[@]}")
21-
I=$(printf "%s\n" ${change[@]} |sort -u)
21+
I=$(printf "%s\n" "${CHANGE[@]}" |sort -u)
2222
((++round==1)) && B=("${C[@]//X/x}")
2323
#((round%10)) || echo "$round: $((${#change[@]}/3))"
2424
done
2525
ans="${B[*]}"; ans=${ans//[ L.]}
2626
echo "11A: ${#ans}"
2727

28-
#A=($(< ${1:-11.txt}))
28+
#A=($(< "${1:-11.txt}"))
2929
B=(L${A//?/L}L); for i in "${A[@]}"; do B+=(L${i}L); done; B+=($B)
3030
J=$(seq ${#A}); I=$(seq ${#A[@]}); change=1; round=0
3131
while [ ${#change} != 0 ]; do
3232
change=""; C=($B); l=""
33-
for i in $I; do
33+
for i in $I; do # shellcheck disable=SC2034
3434
for j in $J; do
3535
x=${B[i]:j:1}
3636
[[ "$x" != "L" && "$x" != "X" ]] && l+=$x && continue
@@ -46,7 +46,7 @@ while [ ${#change} != 0 ]; do
4646
s=${s//L}
4747
if [[ ${#s} == 0 ]]; then l+=X; elif [[ ${#s} -ge 5 ]]; then l+=L; else l+=$x; fi
4848
done
49-
[ ${B[i]} != L${l}L ] && change+=1
49+
[ "${B[i]}" != "L${l}L" ] && change+=1
5050
C+=(L${l}L); l=
5151
done
5252
C+=($B); B=("${C[@]}")

12.sh

+15-15
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
11
#! /usr/bin/env bash
2-
A=($(< ${1:-12.txt}))
2+
A=($(< "${1:-12.txt}"))
33
H=1; X=0; Y=0; D=(N E S W)
44
for i in "${A[@]}"; do
55
i=${i/F/${D[H]}}
66
n=${i:1}
77
case $i in
8-
N*) ((Y+=n));;
9-
S*) ((Y-=n));;
10-
E*) ((X+=n));;
11-
W*) ((X-=n));;
12-
R*) ((H=((n/90)+H)%4));;
13-
L*) ((H=((-n/90)+H)%4));;
14-
*) echo ERROR $i; break;;
8+
N*) Y+=+$n;;
9+
S*) Y+=-$n;;
10+
E*) X+=+$n;;
11+
W*) X+=-$n;;
12+
R*) H=$((((n/90)+H)%4));;
13+
L*) H=$((((-n/90)+H)%4));;
14+
*) echo "ERROR $i"; break;;
1515
esac
1616
done
17-
echo "12A: $X+$Y = $((${X/-}+${Y/-}))"
17+
echo "12A: $((X))+$((Y)) = $(((X<0?-X:X)+(Y<0?-Y:Y)))"
1818
H=1; X=10; Y=1; x=0; y=0
1919
for i in "${A[@]}"; do
2020
n=${i:1}
2121
case $i in
22-
N*) ((Y+=n));;
23-
S*) ((Y-=n));;
24-
E*) ((X+=n));;
25-
W*) ((X-=n));;
22+
N*) Y+=+$n;;
23+
S*) Y+=-$n;;
24+
E*) X+=+$n;;
25+
W*) X+=-$n;;
2626
F*) ((x+=n*X,y+=n*Y));;
2727
R90|L270) TMP=$X; ((X=Y,Y=-TMP));;
2828
R270|L90) TMP=$X; ((X=-Y,Y=TMP));;
2929
R180|L180) ((X=-X,Y=-Y));;
30-
*) echo ERROR $i; break;;
30+
*) echo "ERROR $i"; break;;
3131
esac
3232
done
33-
echo "12B: $x+$y = $((${x/-}+${y/-}))"
33+
echo "12B: $x+$y = $(((x<0?-x:x)+(y<0?-y:y)))"

13.sh

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
#! /usr/bin/env bash
22
IFS=$',\n'
33
input=${1:-13.txt}
4-
A=($(sed s/x,//g $input))
4+
A=($(sed s/x,//g "$input"))
55
time=$A; min=($A 0)
66
for i in "${A[@]:1}"; do
77
w=$((i-time%i))
8-
[ $w -lt $min ] && min=($w $i)
8+
(( w < min )) && min=($w $i)
99
done
10-
echo "13A: $min*${min[1]} = $((min*${min[1]}))"
10+
echo "13A: $min*${min[1]} = $((min[0]*min[1]))"
1111

12-
A=($(tail -1 $input))
13-
for i in ${!A[@]}; do [ ${A[i]} != x ] && B[$i]=${A[i]} ; done
12+
A=($(tail -1 "$input"))
13+
for i in "${!A[@]}"; do [ "${A[i]}" != x ] && B[$i]=${A[i]} ; done
1414
N=0; step=1
1515
#echo "${!B[@]} => "${B[@]}""
1616
for i in "${!B[@]}"; do
17-
while (((N+i)%${B[$i]})); do ((N+=step)); done
18-
((step*=${B[$i]}))
17+
while (((N+i)%B[i])); do ((N+=step)); done
18+
((step*=B[i]))
1919
done
2020
echo "13B: $N"

14.sh

+10-9
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,32 @@
11
#! /usr/bin/env bash
22
IFS=$'\n'
3-
A=($(< ${1:-14.txt}))
3+
A=($(< "${1:-14.txt}"))
4+
declare -a mem
45
for i in "${A[@]}"; do
56
case $i in
67
mask*) y=${i//*= }; o=$((2#${y//X/0})); z=$((2#${y//X/1}));;
7-
mem*) y=${i//*= }; eval ${i// =*}=$(((y&z)|o));;
8+
mem*) y=${i//*= }; eval "${i// =*}=$(((y&z)|o))";;
89
esac
910
done
10-
sum=$(echo ${mem[*]}| tr ' ' '+')
11+
printf -v sum "+%s" "${mem[@]}"
1112
echo "14A: $((sum))"
1213

1314
r() {
1415
local x=${2/X/0}
1516
if [ "$x" = "$2" ]; then
1617
mem2[$1|(2#$x)]=$3
1718
else
18-
r $1 $x $3
19-
r $1 ${2/X/1} $3
19+
r "$1" "$x" "$3"
20+
r "$1" "${2/X/1}" "$3"
2021
fi
2122
}
2223

2324
IFS=$' []=\n'
24-
while read i y _ v; do
25+
while read -r i y _ v; do
2526
case "$i" in
2627
mask*) o=$((2#${y//X/0})); m=${y//1/0}; z=$((~2#${m//X/1}));;
27-
mem*) r $(((y&z)|o)) $m $v;;
28+
mem*) r $(((y&z)|o)) "$m" "$v";;
2829
esac
29-
done < ${1:-14.txt}
30-
sum=$(echo ${mem2[*]}| tr ' ' '+')
30+
done < "${1:-14.txt}"
31+
printf -v sum "+%s" "${mem2[@]}"
3132
echo "14B: $((sum))"

15.sh

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
#! /usr/bin/env bash
2-
A=($(<${1:-15.txt}))
2+
A=($(<"${1:-15.txt}"))
33
GIVEUP=${2:-10}
44
#A=(0 3 6)
55
B=(); i=0; l=""
6-
for a in ${A[@]}; do B[a]=$((++i)); done
6+
for a in "${A[@]}"; do B[a]=$((++i)); done
77
while [ $i -lt 2020 ]; do
88
n=$((i-${l:-$i})); l=${B[n]}; B[n]=$((++i))
99
done
@@ -16,7 +16,7 @@ sharded_swap() { # syntax: l=B[$1]; B[$1]=$2
1616
}
1717
SECONDS=0
1818
trap 'echo "$i: $SECONDS sec $((i/300000))%"' USR1 EXIT
19-
i=0; for a in ${A[@]}; do sharded_swap $a $((++i)); done; l="";
19+
i=0; for a in "${A[@]}"; do sharded_swap "$a" $((++i)); done; l="";
2020
while [[ $i -lt 30000000 && $SECONDS -le $GIVEUP ]]; do
2121
n=$((i-${l:-$i})); sharded_swap $n $((++i))
2222
done
@@ -25,7 +25,7 @@ if [ $i = 30000000 ]; then
2525
else
2626
# The code above is painfully slow. Switch to awk
2727
echo "15B(round $i): $n (Gave up after $SECONDS seconds)"
28-
printf "%s\n" ${A[@]} | awk '{B[$0]=++i;}
28+
printf "%s\n" "${A[@]}" | awk '{B[$0]=++i;}
2929
END {
3030
while (i<30000000) { n=l?(i-l):0; l=B[n]; B[n]=++i; }
3131
print "15B(awk):", n;

0 commit comments

Comments
 (0)