Day 7
[advent-of-code-2021.git] / day07 / crabs2.sh
diff --git a/day07/crabs2.sh b/day07/crabs2.sh
new file mode 100755 (executable)
index 0000000..c4e6ccd
--- /dev/null
@@ -0,0 +1,44 @@
+#!/bin/bash
+
+set -u
+
+filename="${1:-example.txt}"
+
+exec 3<"$filename"
+
+OLDIFS="$IFS"
+IFS=","
+read -u 3 -a crabs
+
+IFS=$'\n'
+crabs=($(sort -n <<<"${crabs[*]}"))
+
+count=$((${#crabs[@]}))
+total=0
+for elem in "${crabs[@]}"; do
+    ((total+=$elem))
+done
+mean=$((total / $count))
+
+fuel=0
+
+# Actual best position could be mean +- 1, so loop through them to check
+for (( tempmean=$((mean-1)); tempmean<=$((mean+1)); tempmean++ )); do
+    new_fuel=0
+    for (( a=0; a<${#crabs[@]}; a++ )); do
+        diff=$((tempmean-${crabs[$a]}))
+        diff=${diff#-}
+        if [ $diff -gt 0 ]; then
+            for (( i=0; i<=$diff; i++ )); do
+                ((new_fuel+=$i))
+            done
+        fi
+    done
+    if [ $fuel -eq 0 ] || [ $new_fuel -lt $fuel ]; then
+        fuel=$new_fuel
+        found_mean=$tempmean
+    fi
+done
+
+echo "Found mean: $found_mean"
+echo "Fuel needed: $fuel"