63 lines
1.2 KiB
Bash
Executable File
63 lines
1.2 KiB
Bash
Executable File
#!/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))]}
|