diff --git a/day03.sh b/day03.sh new file mode 100755 index 0000000..885a655 --- /dev/null +++ b/day03.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +unset PATH; readonly PATH +source ./utils/main.sh + +p1() { + local input="$1" result=0 + + while [[ -n "$input" ]]; do + if [[ "$input" =~ mul\(([0-9]{1,3}),([0-9]{1,3})\) ]]; then + result="$((result + (BASH_REMATCH[1] * BASH_REMATCH[2])))" + input="${input#*"${BASH_REMATCH[0]}"}" + else + input='' + fi + done + + printf '%d' "$result" +} + +p2() { + local input="$1" result=0 do=true + + while [[ -n "$input" ]]; do + if [[ "$input" =~ mul\(([0-9]{1,3}),([0-9]{1,3})\)|do\(\)|don\'t\(\) ]]; then + case "${BASH_REMATCH[0]}" in + do\(\)) do=true;; + don\'t\(\)) do=false;; + *) [[ "$do" == true ]] && result="$((result + (BASH_REMATCH[1] * BASH_REMATCH[2])))";; + esac + + input="${input#*"${BASH_REMATCH[0]}"}" + else + input='' + fi + done + + printf '%d' "$result" +} + +main "$@"