#!/usr/bin/env bash FILE=input read -r -a INPUT_ARRAY <<< "$( sed -E 's/.*X[\+\=]([0-9]+), Y[\+\=]([0-9]+)/\1 \2 /g' < "$FILE" | paste -s -d " " )" #printf "%s\n" "${INPUT_ARRAY[@]}" >&2 INPUT_LEN=${#INPUT_ARRAY[@]} TOTAL_TOKEN=0 for (( i=0 ; i < INPUT_LEN; i+=6 )) do A=${INPUT_ARRAY[i]} C=${INPUT_ARRAY[i+1]} B=${INPUT_ARRAY[i+2]} D=${INPUT_ARRAY[i+3]} X=$(( 10000000000000 + ${INPUT_ARRAY[i+4]} )) Y=$(( 10000000000000 + ${INPUT_ARRAY[i+5]} )) # Check if moduluses are eq 0 before proceeding I_MODULUS=$(( (B*Y - D*X) % (B*C - D*A) )) echo "I_MODULUS: $I_MODULUS" if [[ $I_MODULUS -eq 0 ]] then I=$(( ( B*Y - D*X ) / ( B*C - D*A ) )) # Button A else continue fi J_MODULUS=$(( ( X - A*I ) % B )) echo "J_MODULUS: $J_MODULUS" if [[ $J_MODULUS -eq 0 ]] then J=$(( ( X - A*I ) / B )) # Button b else continue fi # Numbers have to be positive ints if [[ $I -lt 1 ]] || [[ $J -lt 1 ]] then continue fi { echo "( $B*$Y - $D*$X ) / ( $B*$C - $D*$A )" >&2 # Button A echo "( $X - $A*$I ) / $B )" >&2 # Button B printf "Answer: I= %s, J= %s\n" "$I" "$J" printf "Verify answer : %s to %s, %s to %s\n" "$(( A*I + B*J ))" "$X" "$(( C*I + D*J ))" "$Y" printf "Total cost: %s\n" "$(( I*3 + J*1 ))" } >&2 TOKEN=$(( I*3 + J*1 )) # Calculate token cost # Verify numbers with results for positions if ! [[ $(( A*I + B*J )) -eq $X ]] # X position then continue elif ! [[ $(( C*I + D*J )) -eq $Y ]] # Y position then continue else (( TOTAL_TOKEN+=TOKEN )) fi done printf "Total token: %s\n" "$TOTAL_TOKEN"