Acerte a carta
Publicado por Xerxes (última atualização em 01/06/2016)
[ Hits: 3.683 ]
Homepage: -
Na sua frente há três cartas viradas. Duas delas tem estrelas brancas e apenas uma tem estrela preta.
Você deve adivinhar onde está a carta com a estrela preta.
Após escolher sua carta, uma carta de estrela branca será revelada. Cabe a você, então, escolher se continua com a sua primeira escolha ou se troca de carta.
Sim, esta é uma variação do problema de Monty Hall. Mostra na prática se é mais vantajoso, ou não, trocar de carta.
#!/bin/bash
#
# ----------------------------------------------------------------------
# Na sua frente há três cartas viradas. Duas delas tem estrelas brancas e
# apenas uma tem estrela preta.
#
# Você deve adivinhar onde está a carta com a estrela preta.
#
# Após escolher sua carta, uma carta de estrela branca será revelada.
# Cabe a você, então, escolher se continua com a sua primeira escolha ou
# Se troca de carta.
#
# Sim, esta é uma variação do problema de Monty Hall.
# Mostra na prática se é mais vantajoso, ou não, trocar de carta.
#
# ----------------------------------------------------------------------
#
# Autor: Xerxes Lins (xerxeslins@gmail.com) vivaolinux.com.br/~xerxeslins
#
# Versão 1.0b - 25/04/2016
#
# ----------------------------------------------------------------------
#
# Define qual das três é a carta certa
function _certa {
CERTA=$(( ( RANDOM % 3 ) + 1 ))
}
# "Redesenha" as cartas
function _atualiza_cartas {
DESENHO=" $FIG_CARTA1 $FIG_CARTA2 $FIG_CARTA3"
}
# Vira todas as cartas para baixo
function _vira_cartas {
FIG_CARTA1="🂠"
FIG_CARTA2="🂠"
FIG_CARTA3="🂠"
}
# Vira todas as cartas para cima
function _vira_cartas2 {
FIG_CARTA1="🃟"
FIG_CARTA2="🃟"
FIG_CARTA3="🃟"
}
# Ao final do jogo exibe sua taxa de sucesso
function _stats {
# Com contribuição do Lcavalheiro para obter casas decimais
VIT_PERCENT=$(bc -l <<< "scale=2 ; $WIN_TROCA / $TOTAL_ROLLS * 100 ")
#LOS_PERCENT=$(( ( $LOSE_TROCA / $LOSE ) * 100 ))
clear
echo "De todas as suas tentativas ($TOTAL_ROLLS), $VIT_PERCENT% dos acertos ocorreram quando você trocou de carta."
#echo "De todas os seus erros, $LOS_PERCENT% ocorreram quando você trocou de carta."
}
# Fim do jogo
function _finalizou {
clear
echo ""
echo "$FRASE_FINAL"
echo ""
echo "A carta certa era a de número $CERTA!"
_atualiza_cartas
echo ""
echo "$DESENHO"
echo ""
ERRADA=0
echo "Continuar? (S/*)"
read CONT
case $CONT in
s|S) NOVO_JOGO=0 && TROCA=0 && _vira_cartas && _jogo ;;
*) _stats && exit;;
esac
}
# Verifica se a carta escolhida é a certa
function _checa {
# Contador de tentativas
TOTAL_ROLLS=$(( $TOTAL_ROLLS + 1 ))
# Verifica se houve troca
if [ $OLD_CARD != $ESCOLHIDA ]
then
TROCA=yes
fi
# Desvira todas e "pinta" a certa
_vira_cartas2
if [ $CERTA = 1 ]
then
FIG_CARTA1="🃏"
elif [ $CERTA = 2 ]
then
FIG_CARTA2="🃏"
else
FIG_CARTA3="🃏"
fi
# Acertou ou errou?
if [ $ESCOLHIDA -eq $CERTA ]
then
FRASE_FINAL="Você acertou!!!"
WIN=$(( $WIN + 1 ))
# Se teve troca, lembra disso
if [ $TROCA == yes ]
then
WIN_TROCA=$(( $WIN_TROCA + 1 ))
fi
else
FRASE_FINAL="Você errou!!!"
LOSE=$(( $LOSE + 1 ))
# Se teve troca, lembra disso
if [ $TROCA == yes ]
then
LOSE_TROCA=$(( $LOSE_TROCA + 1 ))
fi
fi
_finalizou
}
# Após escolher a carta, pergunta se quer trocar
function _escolha1() {
clear
_vira_cartas
# Se o jogo for "novo" então lembra se houve troca
if [ $NOVO_JOGO -eq 1 ]
then OLD_CARD=$1
fi
# carta escolhida pelo jogador
ESCOLHIDA=$1
# Carta errada
ERRADA=1
while [ "$ERRADA" = "$ESCOLHIDA" ] || [ "$ERRADA" = "$CERTA" ]; do
ERRADA=$(( ( RANDOM % 3 ) + 1 ))
done
# Carta que "sobra"
SOBRA=1
while [ "$SOBRA" = "$ESCOLHIDA" ] || [ "$SOBRA" = "$ERRADA" ]; do
SOBRA=$(( ( RANDOM % 3 ) + 1 ))
done
# Desvira a carta errada
if [ $ERRADA = 1 ]
then
FIG_CARTA1="🃟"
elif [ $ERRADA = 2 ]
then
FIG_CARTA2="🃟"
else
FIG_CARTA3="🃟"
fi
_atualiza_cartas
echo "
Você escolheu a carta $ESCOLHIDA.
Revelação:
A carta certa NÃO É a carta $ERRADA
$DESENHO
Gostaria de trocar para a carta $SOBRA? (S/N)"
read RESPOSTA
case $RESPOSTA in
s|S) ESCOLHIDA=$SOBRA && _checa ;;
n|N) _checa ;;
*) clear && echo "Opção inválida. Saindo..." && exit ;;
esac
}
# Jogo principal
function _jogo {
# Contador para saber se é novo
NOVO_JOGO=$(( $NOVO_JOGO + 1 ))
clear
_atualiza_cartas
echo "
Onde está a carta certa (🃏)?
Cartas (1, 2 e 3):
$DESENHO
Escolha uma carta...
________________________________
Acertos
totais $WIN
Acertos
após trocar
de carta $WIN_TROCA
Erros
totais $LOSE
Erros
após trocar
de carta $LOSE_TROCA
(X e Enter para sair)"
read CARD
case $CARD in
1|2|3) _escolha1 $CARD ;;
x|X) _stats && exit ;;
*) clear && echo "Opção inválida. Escolha 1, 2 ou 3." && sleep 2 && _jogo ;;
esac
}
# Função do começo
function _start {
_vira_cartas
NOVO_JOGO=0
TOTAL_ROLLS=0
ERRADA=0
ESCOLHIDA=0
WIN=0
LOSE=0
WIN_TROCA=0
LOSE_TROCA=0
_certa
_jogo
}
# Começa o jogo
_start
Script para executar o giFT daemon e uma interface de usuário
Listar o número de arquivos de um diretório
Remover/Exibir Arquivo/Diretório de uma estrutura de diretórios
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Programa fora de escala na tela do pc (2)
Fedora KDE plasma 42 X Módulo de segurança BB (Warsaw-2) (1)
O programa assinador digital (1)









