Em um quebra-cabeça em um livro antigo meu, é definido um jogo no qual dois jogadores escolhem sequências de lançamentos de moedas que eles acreditam que aparecerão primeiro quando uma moeda for lançada repetidamente. (Na verdade, eram dados ímpares e pares, mas esse pequeno detalhe não importa em termos de equivalência de problemas.)
Note-se que se o jogador 1 escolhe TTT
e o jogador 2 escolhe HTT
, esse jogador 2 tem 7/8 de chance de ganhar o jogo, pois a única maneira que TTT
pode surgir antes HTT
é se os três primeiros flips forem coroa.
Seu trabalho é criar um programa ou função que deduza a probabilidade de que uma das duas seqüências escolhidas chegue primeiro. Seu programa terá duas linhas de entrada (ou duas seqüências de caracteres como argumentos), cada uma representando uma sequência de 10 ou menos de comprimento:
HTT
TTT
E produza a probabilidade de o primeiro jogador vencer, na forma de fração ou decimal:
7/8
0.875
O código mais curto para fazer isso em qualquer idioma vence.
fonte
Respostas:
Python 3 (
139136134132126115(143)Usa o algoritmo de Conway, conforme descrito aqui . Manipula todos os pares de seqüências, desde que o primeiro não seja uma subsequência final do segundo (conforme as instruções).
Obrigado xnor por remover 6 bytes. Obrigado Zgarb por detectar um bug com subsequências.
fonte
"HTT"
e"TTT"
,o
tem o valor-1
e o divide por0
.2**i
com<<i
, e a probabilidade de saída pode ser escrito como1/(1/o + 1)
, na qual você pode colocar o recíprocoo
diretamente.HTH
eT
, mesmo que o primeiro jogador não possa vencer. A outra resposta tem o mesmo problema.CJam,
44 3836 bytesUsando o mesmo algoritmo de Conway como aqui .
Entrada são as duas seqüências distintas em duas linhas. O resultado é a probabilidade de ganhar primeiro sobre o segundo. As entradas não precisam ter o mesmo comprimento
Estou usando a fórmula para ganhar odds (
p
) para o primeiro jogador A comoEntão a probabilidade é definida como
que, depois de simplificado, se torna
e após alguma simplificação, torna-se
Exemplo de entrada:
Resultado:
Experimente online aqui
fonte
HTH
eT
, mesmo que o primeiro jogador não possa vencer. A outra resposta tem o mesmo problema.Lua
211 190184Também usando o algoritmo de Conway. Ainda novo para Lua, então isso pode ser jogado mais com certeza.
Ungolfed
Primeira versão
fonte