Working part 2 solution

This commit is contained in:
2024-12-13 16:35:36 +08:00
parent 3764b25f6d
commit beac193288
3 changed files with 47 additions and 23 deletions

View File

@ -2,7 +2,7 @@
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
#printf "%s\n" "${INPUT_ARRAY[@]}" >&2
INPUT_LEN=${#INPUT_ARRAY[@]}
TOTAL_TOKEN=0
@ -12,32 +12,52 @@ do
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]}"
X=$(( 10000000000000 + ${INPUT_ARRAY[i+4]} ))
Y=$(( 10000000000000 + ${INPUT_ARRAY[i+5]} ))
I=$(( ( B*Y - D*X ) / ( B*C - D*A ) )) # Button A
J=$(( ( X - A*I ) / B )) # Button B
# 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
TOKEN=$(( I*3 + J*1 ))
# Numbers have to position integers
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"
#echo "Modulus I: $(( ( B*Y - D*X ) % ( B*C - D*A ) ))" # Button A
#echo "Modulus J: $(( ( X - A*I ) % B ))" # Button B
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
if ! [[ $(( A*I + B*J )) -eq $X ]]
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 ]]
elif ! [[ $(( C*I + D*J )) -eq $Y ]] # Y position
then
continue
elif [[ $I -lt 1 ]] || [[ $J -lt 1 ]]
then
continue
#elif [[ $I -gt 100 ]] || [[ $J -gt 100 ]]
#then
# continue
else
(( TOTAL_TOKEN+=TOKEN ))
fi