#!/bin/bash rules=() n_step=10 read polymer read while read line; do rules+=( ${line% ->*}'|'${line#*-> } ) done for ((i=0; i<$n_step; i++)); do polymer_size=0 while [ $polymer_size -lt ${#polymer} ]; do polymer_size=${#polymer} for rule in ${rules[@]}; do polymer=${polymer//${rule:0:2}/${rule:0:1}'|'${rule:3:1}'|'${rule:1:1}} done done polymer=${polymer//'|'/} done occurences=( $(printf "%s\n" $(sed 's/\(.\)/\1 /g' <<< $polymer) | sort | uniq -c \ | sort -nr | sed 's/.$//') ) echo $((occurences[0]-occurences[-1]))