#!/bin/bash

set -u
set -e

declare -a fish

filename="${1:-example.txt}"

iter_1=80
iter_2=256

exec 3<"$filename"

OLDIFS="$IFS"
IFS=","
read -u 3 -a fish
IFS="$OLDIFS"

buckets=(0 0 0 0 0 0 0 0 0)

get_count() {
    local count=0

    for (( i=0; i<=8; i++ )); do
        ((count+=${buckets[$i]}))
    done

    echo "$count"
}

for f in "${fish[@]}"; do
    ((buckets[$f]+=1))
done

for (( d=1; d<=$iter_2; d++ )); do
    orig_zeros=${buckets[0]}
    for (( i=1; i<=8; i++ )); do
        temp=${buckets[$i]}
        ((buckets[$((i-1))]+=$temp)) || true
        buckets[$i]=0
    done
    ((buckets[8]+=$orig_zeros)) || true
    ((buckets[6]+=$orig_zeros)) || true
    ((buckets[0]-=$orig_zeros)) || buckets[0]=0

    [ $d -eq $iter_1 ] && echo "After $iter_1 days there are $(get_count) fish"
done

echo "After $iter_2 days there are $(get_count) fish"
