Day 14
This commit is contained in:
44
14/02.sh
Executable file
44
14/02.sh
Executable file
@@ -0,0 +1,44 @@
|
||||
#!/bin/bash
|
||||
|
||||
rules=()
|
||||
n_step=40
|
||||
declare -A polymer
|
||||
declare -A occurences
|
||||
read line
|
||||
occurences[${line:0:1}]=$((${occurences[${line:0:1}]}+1))
|
||||
for ((i=1; i<${#line}; i++)); do
|
||||
pair=${line:$((i-1)):2}
|
||||
polymer[$pair]=$((${polymer[$pair]}+1))
|
||||
occurences[${line:$i:1}]=$((${occurences[${line:$i:1}]}+1))
|
||||
done
|
||||
read
|
||||
|
||||
while read line; do
|
||||
rules+=( ${line% ->*}'|'${line#*-> } )
|
||||
done
|
||||
|
||||
for ((i=0; i<$n_step; i++)); do
|
||||
declare -A new_polymer
|
||||
for rule in ${rules[@]}; do
|
||||
rule_pair=${rule:0:2}
|
||||
rule_pair_1=${rule:0:1}${rule:3:1}
|
||||
rule_pair_2=${rule:3:1}${rule:1:1}
|
||||
if ! [ -v polymer[$rule_pair] ]; then
|
||||
polymer[$rule_pair]=0
|
||||
fi
|
||||
new_polymer[$rule_pair]=$((${new_polymer[$rule_pair]}-${polymer[$rule_pair]}))
|
||||
new_polymer[$rule_pair_1]=$((${new_polymer[$rule_pair_1]}+${polymer[$rule_pair]}))
|
||||
new_polymer[$rule_pair_2]=$((${new_polymer[$rule_pair_2]}+${polymer[$rule_pair]}))
|
||||
occurences[${rule:3:1}]=$((${occurences[${rule:3:1}]}+${polymer[$rule_pair]}))
|
||||
done
|
||||
for new_pair in ${!new_polymer[@]}; do
|
||||
if ! [ -v polymer[$new_pair] ]; then
|
||||
polymer[$new_pair]=0
|
||||
fi
|
||||
polymer[$new_pair]=$((${polymer[$new_pair]}+${new_polymer[$new_pair]}))
|
||||
done
|
||||
unset new_polymer
|
||||
done
|
||||
|
||||
occurences_array=( $(printf "%s\n" "${occurences[@]}" | sort -nr) )
|
||||
echo $((occurences_array[0]-occurences_array[-1]))
|
||||
Reference in New Issue
Block a user