Pitão , 11 bytes
WOyG~ZtOT)Z
Nota: este programa provavelmente trava com um erro de memória em qualquer computador real. Para testá-lo, tente substituir G
por uma sequência mais curta, como neste código, que gera números com uma média de 28000:
pyth -c 'WOy"abcdefghijklm"~ZtOUT)Z'
Esse código faz um loop, adicionando um número aleatório de -1 a 8 a Z
, com uma probabilidade de 2 ^ -26 de sair do loop em cada repetição. A probabilidade 2 ^ -26 é obtida selecionando-se um elemento aleatório ( O
) do conjunto de todos os subconjuntos ( y
) do alfabeto ( G
).
Detalhes técnicos e justificativa:
A probabilidade 2 ^ -26 é derivada de dois fatos: y
quando chamada em seqüências, é a função de conjunto de potência, constrói a lista de todos os subconjuntos da entrada. Como a entrada,, G
possui 26 caracteres, este conjunto de energia yG
possui 2 ^ 26 entradas. OyG
seleciona um elemento aleatório dessas 2 ^ 26 entradas. Exatamente uma dessas entradas, a sequência vazia, será avaliada como falsa quando transmitida paraW
o loop while. Portanto, há uma probabilidade de 2 ^ -26 de sair do loop a cada vez.
Em qualquer número fixo de ciclos de loop K, a probabilidade de obter o número K * 3,5 + me obter K * 3,5 - m é igual, porque cada sequência de adendos que atinge um total pode ser invertida, -1 -> 8, 0 -> 7, etc., para alcançar o outro. Além disso, números mais próximos de K * 3.5 são claramente mais prováveis que números mais distantes. Portanto, se K> 2000000 / 3.5 = 571428.5, a probabilidade de obter um número acima de 1000000 é maior que 75%, porque alguns dos resultados acima desse número podem ser colocados em uma correspondência individual com todos os resultados abaixo desse número. O número e a metade inferior podem ser colocados em uma correspondência individual com aqueles abaixo de 1000000. A probabilidade de obter pelo menos 571429 loops é (1-2 ^ -26) ^ 571429, o que não é menor que (1-2 ^ -26 * 571429), o número esperado de vezes que sai do loop nas primeiras 571429 tentativas, que é de 99,1%. Assim, em 99,1% ou mais dos ensaios, há uma chance de 75% ou mais de obter pelo menos 1000000, portanto, há mais de 50% de chance de obter mais de 1000000.
Esse código baseia-se no comportamento de O
onde um bug foi introduzido acidentalmente há 3 dias e foi corrigido hoje. Ele deve funcionar em qualquer versão do Pyth 3 antes de 22 de dezembro ou depois de hoje. O código a seguir é equivalente e sempre funcionou:
WOyG~ZtOUT)Z