45 lines
1.3 KiB
Bash
Executable File
45 lines
1.3 KiB
Bash
Executable File
#!/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]))
|