Acerte a carta
Publicado por Xerxes (última atualização em 01/06/2016)
[ Hits: 3.753 ]
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
User manager - o gerenciador de usuários para Slackware Linux
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
[Resolvido] VirtualBox can't enable the AMD-V extension
Como verificar a saúde dos discos no Linux
Como instalar , particionar, formatar e montar um HD adicional no Linux?
Como automatizar sua instalação do Ubuntu para desenvolvimento de software.
Quais os códigos mais dificeis que vcs sabem fazer? (9)
Fiz uma pergunta no fórum mas não consigo localizar (20)
Pfsense inacessivel após um periodo de tempo (1)
Não consigo instalar distro antiga no virtualbox nem direto no hd (9)









