Day 10
This commit is contained in:
42
10/01.sh
Executable file
42
10/01.sh
Executable file
@@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
score=0
|
||||||
|
while read line; do
|
||||||
|
chars=( $(sed 's/\(.\)/\1 /g' <<< $line) )
|
||||||
|
opened_chars=()
|
||||||
|
for char in ${chars[@]}; do
|
||||||
|
case $char in
|
||||||
|
'('|'['|'{'|'<')
|
||||||
|
opened_chars+=( $char );;
|
||||||
|
')')
|
||||||
|
if [ ${opened_chars[-1]} = '(' ]; then
|
||||||
|
unset 'opened_chars[-1]'
|
||||||
|
else
|
||||||
|
score=$((score+3))
|
||||||
|
break
|
||||||
|
fi;;
|
||||||
|
']')
|
||||||
|
if [ ${opened_chars[-1]} = '[' ]; then
|
||||||
|
unset 'opened_chars[-1]'
|
||||||
|
else
|
||||||
|
score=$((score+57))
|
||||||
|
break
|
||||||
|
fi;;
|
||||||
|
'}')
|
||||||
|
if [ ${opened_chars[-1]} = '{' ]; then
|
||||||
|
unset 'opened_chars[-1]'
|
||||||
|
else
|
||||||
|
score=$((score+1197))
|
||||||
|
break
|
||||||
|
fi;;
|
||||||
|
'>')
|
||||||
|
if [ ${opened_chars[-1]} = '<' ]; then
|
||||||
|
unset 'opened_chars[-1]'
|
||||||
|
else
|
||||||
|
score=$((score+25137))
|
||||||
|
break
|
||||||
|
fi;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
done
|
||||||
|
echo $score
|
||||||
62
10/02.sh
Executable file
62
10/02.sh
Executable file
@@ -0,0 +1,62 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
scores=()
|
||||||
|
while read line; do
|
||||||
|
chars=( $(sed 's/\(.\)/\1 /g' <<< $line) )
|
||||||
|
opened_chars=()
|
||||||
|
broken=0
|
||||||
|
for char in ${chars[@]}; do
|
||||||
|
case $char in
|
||||||
|
'('|'['|'{'|'<')
|
||||||
|
opened_chars+=( $char );;
|
||||||
|
')')
|
||||||
|
if [ ${opened_chars[-1]} = '(' ]; then
|
||||||
|
unset 'opened_chars[-1]'
|
||||||
|
else
|
||||||
|
broken=1
|
||||||
|
break
|
||||||
|
fi;;
|
||||||
|
']')
|
||||||
|
if [ ${opened_chars[-1]} = '[' ]; then
|
||||||
|
unset 'opened_chars[-1]'
|
||||||
|
else
|
||||||
|
broken=1
|
||||||
|
break
|
||||||
|
fi;;
|
||||||
|
'}')
|
||||||
|
if [ ${opened_chars[-1]} = '{' ]; then
|
||||||
|
unset 'opened_chars[-1]'
|
||||||
|
else
|
||||||
|
broken=1
|
||||||
|
break
|
||||||
|
fi;;
|
||||||
|
'>')
|
||||||
|
if [ ${opened_chars[-1]} = '<' ]; then
|
||||||
|
unset 'opened_chars[-1]'
|
||||||
|
else
|
||||||
|
broken=1
|
||||||
|
break
|
||||||
|
fi;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
if [ $broken -eq 0 ]; then
|
||||||
|
score=0
|
||||||
|
n_opened_chars=${#opened_chars[@]}
|
||||||
|
for i in $(seq $((n_opened_chars-1)) -1 0); do
|
||||||
|
case ${opened_chars[$i]} in
|
||||||
|
'(')
|
||||||
|
score=$((score*5+1));;
|
||||||
|
'[')
|
||||||
|
score=$((score*5+2));;
|
||||||
|
'{')
|
||||||
|
score=$((score*5+3));;
|
||||||
|
'<')
|
||||||
|
score=$((score*5+4));;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
scores+=( $score )
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
scores=( $(printf '%s\n' "${scores[@]}" | sort -nr) )
|
||||||
|
n_scores=${#scores[@]}
|
||||||
|
echo ${scores[$((n_scores/2))]}
|
||||||
Reference in New Issue
Block a user