No capítulo anterior ficamos com uma partida, mas sem a verificação do vencedor, ou seja o jogador com o maior valor, menor ou igual a 21. Uma decisão de projeto é dizer que no caso de empate, os jogadores, com os maiores valores ganham e dividem o prêmio.
Logo, a partida devolve a pontuação de cada jogador, para podermos verificar na rotina ganhador quem ganhou.
functionganhador(v) i =1 maximo =0while i <=length(v)if v[i] >21# se estourou é como se tivesse o menor valor v[i] =0endif v[i] > maximo maximo = v[i] # encontra o vencedorend i = i +1end result =zeros(Int64, length(v)) i =1while i <=length(v)if v[i] == maximo result[i] =1end i = i +1endreturn resultend
ganhador (generic function with 1 method)
A rotinha ganhador devolve um vetor com os vencedores, com 1 na posição de quem ganhou e zero na posição dos perdedores.
Uma das vantagens de se usar um computador é que podemos ter milhares de partidas de 21 para encontrar qual seria a melhor estratégia.
functionporcentagem() i =1 porc =zeros(Int64, 6)while i <100000 porc = porc +ganhador(partida()) i = i +1endprintln(porc)end
porcentagem (generic function with 1 method)
Ao simularmos o jogo 10000 vezes, podemos encontrar qual é a melhor estratégia dentre as que foram apresentadas.
O código acima ficou relativamente grande, e uma das coisas que podemos notar é que há muita duplicação nos códigos dos Jogadores a partir do segundo. Um dos maiores problemas de código é a duplicação. No caso acima, podemos evitá-la adicionando um parâmetro à função Jogador, de forma que esse seja o limite a ser considerado no laço. A função jogador2 fica assim: