#!/usr/bin/env bash set -eufCo pipefail function play_one() ( local game="$1" local id=0 id=$(echo "$game" | cut -d' ' -f2 | cut -d':' -f1) while read -r set; do local red=12 local green=13 local blue=14 while read -r item; do local n=0 n=$(echo "$item" | cut -d' ' -f1) if [[ "$item" =~ "red" ]]; then red=$((red - n)) elif [[ "$item" =~ "green" ]]; then green=$((green - n)) elif [[ "$item" =~ "blue" ]]; then blue=$((blue - n)) fi done < <(echo "$set" | tr ',' '\n') if [[ "$red" -lt 0 || "$green" -lt 0 || "$blue" -lt 0 ]]; then echo 0; return 0; fi done < <(echo "$game" | cut -d':' -f2 | cut -d' ' -f2- | tr ';' '\n') echo "$id" ) function play_two() ( local game="$1" local id=0 id=$(echo "$game" | cut -d' ' -f2 | cut -d':' -f1) local colors=() while read -r set; do local red=0 local green=0 local blue=0 while read -r item; do local n=0 n=$(echo "$item" | cut -d' ' -f1) if [[ "$item" =~ "red" ]]; then red=$((red + n)) elif [[ "$item" =~ "green" ]]; then green=$((green + n)) elif [[ "$item" =~ "blue" ]]; then blue=$((blue + n)) fi done < <(echo "$set" | tr ',' '\n') colors+=("$red $green $blue") done < <(echo "$game" | cut -d':' -f2 | cut -d' ' -f2- | tr ';' '\n') local red=0 local green=0 local blue=0 for i in "${colors[@]}"; do rbg=($i) [[ "${rbg[0]}" -gt "$red" ]] && red="${rbg[0]}" [[ "${rbg[1]}" -gt "$green" ]] && green="${rbg[1]}" [[ "${rbg[2]}" -gt "$blue" ]] && blue="${rbg[2]}" done echo "$((red * green * blue))" ) sum_one=0 sum_two=0 while read -r game; do sum_one=$((sum_one + $(play_one "$game"))) sum_two=$((sum_two + $(play_two "$game"))) done < <(cat 02.txt) echo "$sum_one" echo "$sum_two"