66 lines
1.2 KiB
Bash
66 lines
1.2 KiB
Bash
#!/bin/bash
|
|
main() {
|
|
printf $'Penney\'s Game\n\n'
|
|
printf 'Flipping to see who goes first ... '
|
|
|
|
if [[ $(flip) == H ]]; then
|
|
printf 'I do.\n'
|
|
p2=$(choose_sequence)
|
|
printf 'I choose: %s\n' "$p2"
|
|
else
|
|
printf 'You do.\n'
|
|
fi
|
|
|
|
while true; do
|
|
read -p 'Enter your three-flip sequence: ' p1
|
|
p1=$(tr a-z A-Z <<<"$p1")
|
|
case "$p1" in
|
|
"$p2") printf 'Sequence must be different from mine\n';;
|
|
[HT][HT][HT]) break;;
|
|
*) printf $'Sequence must be three H\'s or T\'s\n';;
|
|
esac
|
|
done
|
|
|
|
if [ -z "$p2" ]; then
|
|
p2=$(choose_sequence "$p1")
|
|
printf 'I choose: %s\n' "$p2"
|
|
fi
|
|
|
|
printf '\nHere we go. %s, you win; %s, I win.\n' "$p1" "$p2"
|
|
printf 'Flips:'
|
|
|
|
flips=
|
|
while true; do
|
|
flip=$(flip)
|
|
printf ' %s' "$flip"
|
|
flips+=$flip
|
|
case "$flips" in
|
|
*$p1) printf $'\nYou win!\n'; exit 0;;
|
|
*$p2) printf $'\nI win!\n'; exit 1;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
choose_sequence() {
|
|
local result
|
|
if (( $# )); then
|
|
case "$1" in
|
|
?[Hh]?) result=T;;
|
|
*) result=H;;
|
|
esac
|
|
result+="${1%?}"
|
|
else
|
|
result=$(flip)$(flip)$(flip)
|
|
fi
|
|
printf '%s\n' "$result"
|
|
}
|
|
|
|
flip() {
|
|
if (( RANDOM % 2 )); then
|
|
printf '%s\n' H
|
|
else
|
|
printf '%s\n' T
|
|
fi
|
|
}
|
|
|
|
main "$@"
|