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
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy