8000 Add source files · einarjon/adventofcode.sh@485f46d · GitHub
[go: up one dir, main page]

Skip to content

Commit 485f46d

Browse files
committed
Add source files
1 parent e1e95f3 commit 485f46d

27 files changed

+760
-1
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.txt*

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+
input=${1:-1.txt}
3+
A=($(sort -n $input));
4+
for a in ${A[@]}; do grep -wq $((2020-a)) $input && break; done
5+
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
7+
echo "1B: $((2020-a-i)) + $a + $i = $(((2020-a-i)*a*i))"

02.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#! /usr/bin/env bash
2+
ans=0
3+
IFS=$'-:\ \n'
4+
while read m M b c; do x=${c//[^$b]}; [[ ${#x} -ge $m && ${#x} -le $M ]] && ans=$((ans+1)); done < ${1:-2.txt}
5+
echo "2A: $ans"
6+
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=$((ans+1)); done < ${1:-2.txt}
8+
echo "2B: $ans"

03.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#! /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//\.}
4+
echo "3A: ${#x}"
5+
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
8+
echo "3B: ${total:2} = $((total))"

04.sh

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#! /usr/bin/env bash
2+
X='epEhbiH'; x=$X; ans=""
3+
IFS=$'\r\n\ '
4+
A=($(sed s/^$/XXX/ ${1:-4.txt}))
5+
for i in "${A[@]}" XXX; do
6+
case $i in
7+
ecl:*) x=${x/e};;
8+
pid:*) x=${x/p};;
9+
eyr:*) x=${x/E};;
10+
hcl:*) x=${x/h};;
11+
byr:*) x=${x/b};;
12+
iyr:*) x=${x/i};;
13+
hgt:*) x=${x/H};;
14+
cid:*) : ;;
15+
XXX) [ -z "$x" ] && ans+=1; x=$X;;
16+
esac
17+
done
< 10000 /td>18+
echo "4A: ${#ans}"
19+
x=$X; ans=""
20+
for i in "${A[@]}" XXX; do
21+
k=${i/*:}
22+
case $i in
23+
ecl:amb|ecl:blu|ecl:brn|ecl:gry|ecl:grn|ecl:hzl|ecl:oth) x=${x/e};;
24+
pid:[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]) x=${x/p};;
25+
eyr:[0-9][0-9][0-9][0-9]) [[ $k -ge 2020 && $k -le 2030 ]] && x=${x/E};;
26+
hcl:\#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]) x=${x/h};;
27+
byr:[0-9][0-9][0-9][0-9]) [[ $k -ge 1920 && $k -le 2002 ]] && x=${x/b};;
28+
iyr:[0-9][0-9][0-9][0-9]) [[ $k -ge 2010 && $k -le 2020 ]] && x=${x/i};;
29+
hgt:[0-9][0-9]in) [[ ${k:0:2} -ge 59 && ${k:0:2} -le 76 ]] && x=${x/H};;
30+
hgt:1[0-9][0-9]cm) [[ ${k:0:3} -ge 150 && ${k:0:3} -le 193 ]] && x=${x/H};;
31+
cid:*) : ;;
32+
XXX) [ -z "$x" ] && ans+=1; x=$X;;
33+
esac
34+
done
35+
echo "4B: ${#ans}"

05.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#! /usr/bin/env bash
2+
A=($(cat ${1:-5.txt} | tr 'FBLR' '0101' | sort -nr))
3+
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

06.sh

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#! /usr/bin/env bash
2+
X=abcdefghijklmnopqrstuvwxyz; x=$X; j=-; a=0
3+
A=($(sed s/^$/X/ ${1:-6.txt}))
4+
while read -n1 i; do
5+
[ "$i" = X ] && a=$((a+26-${#x})) && x=$X
6+
x=${x/$i}
7+
done < <(echo ${A[*]} X)
8+
echo "6A: $a";
9+
10+
x=""; a=0
11+
for line in "${A[@]}" X; do
12+
if [[ "$line" = X ]]; then a=$((a+${#x})); x=X;
13+
elif [ "$x" = X ]; then x=$line;
14+
else
15+
y=""; while read -n1 i; do [[ ${x/$i} != ${x} ]] && y+="$i"; done <<< $line
16+
# y="";for ((i=0;i<${#line};i++ )); do [[ ${x/${line:$i:1}} != ${x} ]] && y+="${line:$i:1}"; done
17+
x=$y;
18+
fi
19+
done
20+
echo "6B: $a"

07.sh

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#! /usr/bin/env bash
2+
IFS=$'\n'
3+
input=${1:-7.txt}
4+
NEW=($(grep " shiny gold" $input))
5+
FOUND=("${NEW[@]// bag*}")
6+
BAGS=("${NEW[@]}")
7+
while [ ${#FOUND[@]} != 0 ]; do
8+
NEW=($(grep -F "${FOUND[*]}" $input | grep -v -F "${BAGS[*]}" | sort -u))
9+
BAGS+=("${NEW[@]}")
10+
FOUND=("${NEW[@]// bag*}")
11+
done
12+
echo "7A: ${#BAGS[@]}"
13+
r(){
14+
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=$((b+c)); done
17+
echo $(($a+$a*$b))
18+
}
19+
total=$(r "1 shiny gold")
20+
echo "7B: $((total-1))" # minus 1 shiny gold bag

08.sh

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#! /usr/bin/env bash
2+
IFS=$'\n'
3+
A=($(< ${1:-8.txt}))
4+
B=("${A[@]}")
5+
solve8() {
6+
acc=0; i=0;
7+
while true; do
8+
x=${A[i]}; y=${x/* }; A[i]+=DONE
9+
case "$x" in
10+
*DONE) return 1;;
11+
acc*) acc=$((acc+($y))); i=$((i+1));;
12+
jmp*) i=$((i+($y)));;
13+
nop*) i=$((i+1)) ;;
14+
*) echo "ERROR $i: $x"; return 1;;
15+
esac
16+
[[ $i -ge ${#A[@]} ]] && return 0
17+
done
18+
}
19+
solve8 || echo "8A: $acc"
20+
21+
A=("${B[@]}");
22+
for k in ${!A[@]}; do
23+
if [ ${A[k]:0:3} = nop ]; then A[k]=${A[k]/nop/jmp};
24+
elif [ ${A[k]:0:3} = jmp ]; then A[k]=${A[k]/jmp/nop};
25+
else continue; fi
26+
solve8 && break
27+
A=("${B[@]}")
28+
done
29+
[[ $i -ge ${#A[@]} ]] && echo "8B: $acc"
30+

09.sh

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#! /usr/bin/env bash
2+
A=($(< ${1:-9.txt}))
3+
idx=(${!A[@]})
4+
for i in ${idx[@]:25}; do
5+
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
10+
done
11+
$b
12+
done
13+
[ "$b" = ":" ] && echo "9A: line $i = ${A[i]}" && break
14+
done
15+
16+
k=0; j=0; sum=${A[j++]}
17+
while [ $sum != ${A[i]} ]; do
18+
if [[ $sum -lt ${A[i]} ]]; then sum=$((sum+A[j++]))
19+
elif [[ $sum -gt ${A[i]} ]]; then sum=$((sum-A[k++]))
20+
fi
21+
[[ $j -ge $i ]] && echo NOT FOUND && break
22+
done
23+
IFS=$'\n'
24+
B=($(echo "${A[*]:k:j-k+1}" | sort -n))
25+
echo "9B: $j..$k = $((B+B[${#B[@]}-1]))"

0 commit comments

Comments
 (0)
0