Skip to content

Instantly share code, notes, and snippets.

@ouuan
Last active October 22, 2021 07:39
Show Gist options
  • Select an option

  • Save ouuan/16356cec86fe6603ed05948db8a135ec to your computer and use it in GitHub Desktop.

Select an option

Save ouuan/16356cec86fe6603ed05948db8a135ec to your computer and use it in GitHub Desktop.
Do math in the terminal!
# add this in ~/.zshrc
math() {
local MATH_RESPONSE
case $(($RANDOM % 3)) in
0)
local MATH_A=$(($RANDOM % 10000))
local MATH_B=$(($RANDOM % 10000))
read "MATH_RESPONSE?$MATH_A + $MATH_B = "
local MATH_ANSWER=$(($MATH_A + $MATH_B))
;;
1)
local MATH_A=$(($RANDOM % 100))
local MATH_B=$(($RANDOM % 100))
read "MATH_RESPONSE?$MATH_A * $MATH_B = "
local MATH_ANSWER=$(($MATH_A * $MATH_B))
;;
2)
local MATH_NUMBER=$(($RANDOM % 500 + 1))
read "MATH_RESPONSE?The prime divisors of $MATH_NUMBER are (from small to big, separated by a single space) "
local FACTORRESULT=$(factor $MATH_NUMBER)
local MATH_ANSWER=${FACTORRESULT#$MATH_NUMBER: }
;;
esac
if [ "$MATH_RESPONSE" != "$MATH_ANSWER" ]; then
cowsay "The answer is $MATH_ANSWER"
false
else
true
fi
}
domath() {
local MATH_SCORE=0
while do
local MATH_START_TIME=$(\date +%s%N)
math
if [[ $? != 0 ]] then
printf "Score: %.3lf\n" $MATH_SCORE
if [[ $MATH_HIGHEST_FILE_PATH == '' ]]; then
MATH_HIGHEST_FILE_PATH="$HOME/.math_highest_score"
fi
MATH_HIGHEST=$(( $(\cat "$MATH_HIGHEST_FILE_PATH") ))
if [[ $MATH_SCORE -gt MATH_HIGHEST ]]; then
echo "New highest score!!!"
echo $MATH_SCORE > "$MATH_HIGHEST_FILE_PATH"
fi
break
else
MATH_SCORE=$(($MATH_SCORE + 10000000000.0 / $(($(\date +%s%N) - $MATH_START_TIME + 1000000000)) ))
fi
done
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment