#!/bin/bash declare -A positions declare -A scores declare -A victories read line start_position_1=$(sed 's/^.* \([0-9]*\)$/\1/' <<< $line) read line start_position_2=$(sed 's/^.* \([0-9]*\)$/\1/' <<< $line) positions[$start_position_1,$start_position_2]=1 scores[0,0,$start_position_1,$start_position_2]=1 victories[1]=0 victories[2]=0 rolls=( 0 0 0 1 3 6 7 6 3 1 ) iter=0 for ((iter=0;iter<21;iter++)); do declare -A new_positions declare -A new_scores for position in ${!positions[@]}; do for ((i=3;i<10;i++)); do position_1=${position%,*} position_2=${position#*,} new_position_1=$(((position_1+i-1)%10+1)) new_positions[$new_position_1,$position_2]=$((${new_positions[$new_position_1,$position_2]}+${positions[$position]}*rolls[i])) for score in ${!scores[@]}; do score_1=${score%%,*} score_2=${score#*,} score_2=${score_2%%,*} score_position_1=${score%,*} score_position_1=${score_position_1##*,} score_position_2=${score##*,} if [ $score_position_1 -eq $position_1 ] && [ $score_position_2 -eq $position_2 ]; then new_score_1=$((score_1+new_position_1)) if [ $new_score_1 -ge 21 ]; then victories[1]=$((${victories[1]}+${scores[$score]}*rolls[i])) new_positions[$new_position_1,$position_2]=$((${new_positions[$new_position_1,$position_2]}-${scores[$score]})) else new_scores[$new_score_1,$score_2,$new_position_1,$position_2]=$((${new_scores[$new_score_1,$score_2,$new_position_1,$position_2]}+${scores[$score]}*rolls[i])) fi fi done done done unset positions declare -A positions for position in ${!new_positions[@]}; do positions[$position]=${new_positions[$position]} positions[$position]=${new_positions[$position]} done unset new_positions unset scores declare -A scores for score in ${!new_scores[@]}; do scores[$score]=${new_scores[$score]} scores[$score]=${new_scores[$score]} done unset new_scores declare -A new_positions declare -A new_scores for position in ${!positions[@]}; do for ((i=3;i<10;i++)); do position_1=${position%,*} position_2=${position#*,} new_position_2=$(((position_2+i-1)%10+1)) new_positions[$position_1,$new_position_2]=$((${new_positions[$position_1,$new_position_2]}+${positions[$position]}*rolls[i])) for score in ${!scores[@]}; do score_1=${score%%,*} score_2=${score#*,} score_2=${score_2%%,*} score_position_1=${score%,*} score_position_1=${score_position_1##*,} score_position_2=${score##*,} if [ $score_position_1 -eq $position_1 ] && [ $score_position_2 -eq $position_2 ]; then new_score_2=$((score_2+new_position_2)) if [ $new_score_2 -ge 21 ]; then victories[2]=$((${victories[2]}+${scores[$score]}*rolls[i])) new_positions[$position_1,$new_position_2]=$((${new_positions[$position_1,$new_position_2]}-${scores[$score]})) else new_scores[$score_1,$new_score_2,$position_1,$new_position_2]=$((${new_scores[$score_1,$new_score_2,$position_1,$new_position_2]}+${scores[$score]}*rolls[i])) fi fi done done done unset positions declare -A positions for position in ${!new_positions[@]}; do positions[$position]=${new_positions[$position]} positions[$position]=${new_positions[$position]} done unset new_positions unset scores declare -A scores for score in ${!new_scores[@]}; do scores[$score]=${new_scores[$score]} scores[$score]=${new_scores[$score]} done unset new_scores done most_victories=0 for victory in ${victories[@]}; do if [ $victory -gt $most_victories ]; then most_victories=$victory fi done echo $most_victories