10000 2021: I can't stop · einarjon/adventofcode.sh@b37a204 · GitHub
[go: up one dir, main page]

Skip to content

Commit b37a204

Browse files
committed
2021: I can't stop
I need help
1 parent 6e49114 commit b37a204

File tree

5 files changed

+99
-1
lines changed

5 files changed

+99
-1
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
./*.txt*
22
201[6-9]/
3-
202[1-9]/
3+
202[2-9]/

2021/01.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#! /usr/bin/env bash
2+
A=($(< "${1:-1.txt}")); a=${A[0]}; ANS=0
3+
for b in "${A[@]:1}"; do ((b>a && ++ANS)); a=$b; done
4+
echo "1A: ${ANS}"
5+
a=$((A[0]+A[1]+A[2])); b=$a; idx=(${!A[@]}); ANS2=0
6+
for i in "${idx[@]:3}"; do ((b+=A[i]-A[i-3], b>a && ++ANS2)); a=$b; done
7+
echo "1B: ${ANS2}"

2021/02.sh

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#! /usr/bin/env bash
2+
declare -i X=0 Y=0 y=0
3+
while read -r dir n; do
4+
case $dir in
5+
up) Y+=-$n;;
6+
down) Y+=$n;;
7+
forward) X+=$n; y+=$((Y*n));;
8+
esac
9+
done < "${1:-2.txt}"
10+
echo "12A: $X*$Y = $((X*Y))"
11+
echo "12B: $X*$y = $((X*y))"
12+
# golfed with awk
13+
#awk 'n=$2 /u/{Y-=n}/n/{Y+=n}/f/{X+=n;y+=n*Y}END{print X*Y,X*y}' ${1:-2.txt}
14+
#paste -d"*" <(paste -sd+ <(rg ^f input.txt | rev | cut -c 1) | bc) <(paste -sd+ <(rg '^[du]' input.txt | sed 's/down/1\*/;s/up/-1\*/g' | bc) | bc) | bc
15+
16+
#paste -d"*" <(paste -sd+ <(paste -d* <(cut -c 1 input.txt) <(rev input.txt | cut -c -1) <(sed 's/down/1\*/;s/up/-1\*/;s/forward/0\*/g' input.txt | bc | awk '{total += $0; $0 = total}1') | rg f | tr f 1 | bc ) | bc) <(paste -sd+ <(rg ^f input.txt | rev | cut -c 1) | bc) | bc
17+
# /u/obluff
18+
paste -d"*" <(paste -sd+ <(sed -n 's/f.* //p' input.txt )|bc) <(paste -sd+ <(sed 's/down //;s/up /-/g;/f/d' input.txt)|bc) | bc
19+
paste -d"*" <(paste -sd+ <(paste -d* <(cut -c1 input.txt) <(tr -dc '0-9\n' < input.txt) <(x=0 && sed 's/down //;s/up/-/;s/f.*/0/' input.txt | while read a;do echo $((x+=a));done) | sed -n s/f.//p | bc) | bc) <(paste -sd+ <(sed -n 's/f.* //p' input.txt) | bc) | bc

2021/03.sh

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#! /usr/bin/env bash
2+
nextchar() {
3+
local -n most=$1 least=$2 in=$3
4+
local all=$(printf "%s\n" "${in[@]}" | cut -c"$4" | tr -d '\n' )
5+
local ones=${all//0} zeros=${all//1}
6+
if (( ${#ones} >= ${#zeros} )); then
7+
most+=1; least+=0
8+
else most+=0; least+=1; fi
9+
}
10+
A=($(< "${1:-3.txt}"))
11+
idx=(${!A[@]}) len=${#A[0]} g="" e=""
12+
time for i in "${idx[@]:1:len}"; do
13+
nextchar g e A $i
14+
done
15+
echo "3A: $g*$e = $(($((2#$g))*$((2#$e))))"
16+
time {
17+
O=(${A[@]}) C=(${A[@]}) c=${e:0:1} o=${g:0:1}
18+
for i in "${idx[@]:2:len}"; do
19+
O=($(printf "%s\n" "${O[@]}" | grep "^$o"))
20+
(( ${#O[@]} <= 1 )) && break
21+
nextchar o _ O $i
22+
done
23+
for i in "${idx[@]:2:len}"; do
24+
C=($(printf "%s\n" "${C[@]}" | grep "^$c"))
25+
(( ${#C[@]} <= 1 )) && break
26+
nextchar _ c C $i
27+
done
28+
}
29+
echo "3B: $O*$C = $(($((2#$O))*$((2#$C))))"

2021/04.sh

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#! /usr/bin/env bash
2+
declare -i i
3+
while read -r a b c d e; do
4+
if (( ${#NUMBERS[@]} == 0 )); then NUMBERS=(${a//,/ });
5+
elif [[ -n $a ]]; then
6+
C[i++]="-$a--$b--$c--$d--$e-" # rows
7+
j=$((10*(i/10))) # columns
8+
C[j+5]+="-$a-";C[j+6]+="-$b-";C[j+7]+="-$c-";C[j+8]+="-$d-";C[j+9]+="-$e-";
9+
((i%5==0)) && i+=5
10+
fi
11+
done < "${1:-4.txt}"
12+
idx=(${!C[@]})
13+
for k in "${!NUMBERS[@]}"; do
14+
n=${NUMBERS[k]}
15+
C=("${C[@]//-$n-}")
16+
B=(${C[@]}) # lazy "find empty"
17+
(( ${#B[@]} != ${#C[@]} )) && break
18+
done
19+
for i in "${idx[@]}"; do [[ -z ${C[i]} ]] && break; done
20+
j=$((10*(i/10))) # columns
21+
printf -v sum "%s" "${C[@]:j:5}"
22+
sum=${sum//--/+}; sum=${sum//-}
23+
echo "12A: $n*$sum = $((n*(sum)))"
24+
printf -v WON "=%d=" {0..990..10}
25+
WON=${WON/=$j=} # only do each card once
26+
for i in "${idx[@]:j:10}"; do C[i]=DONE; done
27+
for k in "${!NUMBERS[@]}"; do
28+
n=${NUMBERS[k]}
29+
C=("${C[@]//-$n-}")
30+
B=(${C[@]})
31+
if (( ${#B[@]} != ${#C[@]} )); then
32+
for i in "${idx[@]}"; do
33+
if [[ -z ${C[i]} ]]; then
34+
j=$((10*(i/10)))
35+
WON=${WON/=$j=}; [[ -z $WON ]] && break 2
36+
for l in "${idx[@]:j:10}"; do C[l]=DONE; done
37+
fi
38+
done
39+
fi
40+
done
41+
printf -v sum "%s" "${C[@]:j:5}"
42+
sum=${sum//--/+}; sum=${sum//-}
43+
echo "12B: $n*$sum = $((n*(sum)))"

0 commit comments

Comments
 (0)
0