Day 6
[advent-of-code-2021.git] / day06 / lanternfish2.sh
diff --git a/day06/lanternfish2.sh b/day06/lanternfish2.sh
new file mode 100755 (executable)
index 0000000..924ac46
--- /dev/null
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+set -u
+set -e
+
+declare -a fish
+
+filename="${1:-example.txt}"
+
+exec 3<"$filename"
+
+OLDIFS="$IFS"
+IFS=","
+read -u 3 -a fish
+IFS="$OLDIFS"
+
+buckets=(0 0 0 0 0 0 0 0 0)
+
+for f in "${fish[@]}"; do
+    ((buckets[$f]+=1))
+done
+
+for (( d=1; d<=256; 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
+done
+
+count=0
+for (( i=0; i<=8; i++ )); do
+    ((count+=${buckets[$i]}))
+done
+
+echo "After 256 days there are $count fish"