Pyth , 11 byte
WOyG~ZtOT)Z
Nota: questo programma probabilmente si arresterà in modo anomalo con un errore di memoria su qualsiasi computer reale. Per provarlo, prova a sostituirlo G
con una stringa più corta, come in questo codice, che genera numeri in media intorno a 28000:
pyth -c 'WOy"abcdefghijklm"~ZtOUT)Z'
Questo codice scorre, aggiungendo un numero casuale da -1 a 8 a Z
, con una probabilità 2 ^ -26 di uscire dal ciclo su ogni ripetizione. La probabilità 2 ^ -26 si ottiene selezionando un elemento casuale ( O
) dell'insieme di tutti i sottoinsiemi ( y
) dell'alfabeto ( G
).
Dettagli tecnici e giustificazione:
La probabilità 2 ^ -26 è derivata da due fatti:, y
quando chiamata su sequenze, è la funzione di accensione, costruisce l'elenco di tutti i sottoinsiemi dell'input. Poiché l'ingresso, G
è lungo 26 caratteri, questo set di potenza yG
ha 2 ^ 26 voci. OyG
seleziona un elemento casuale tra quelle 2 ^ 26 voci. Esattamente una di quelle voci, la stringa vuota, verrà valutata come falsa quando passata al W
ciclo while. Pertanto, esiste una probabilità 2 ^ -26 di uscire dal loop ogni volta.
In qualsiasi numero fisso di cicli di loop K, la probabilità di ottenere il numero K * 3,5 + m e di ottenere K * 3,5 - m sono uguali, poiché ogni sequenza di addend che raggiunge un totale può essere invertita, -1 -> 8, 0 -> 7, ecc., Per raggiungere l'altro. Inoltre, i numeri più vicini a K * 3.5 sono chiaramente più probabili dei numeri più lontani. Pertanto, se K> 2000000 / 3.5 = 571428.5 la probabilità di ottenere un numero superiore a 1000000 è maggiore del 75%, poiché alcuni dei risultati sopra quel numero possono essere inseriti in una corrispondenza uno a uno con tutti i risultati sottostanti che numero, e la metà inferiore della metà, può essere messa in una corrispondenza uno a uno con quelle inferiori a 1000000. La probabilità di ottenere almeno 571429 loop è (1-2 ^ -26) ^ 571429, che è no inferiore a (1-2 ^ -26 * 571429), il numero previsto di volte in cui si è usciti dal ciclo durante i primi 571429 tentativi, pari al 99,1%. Pertanto, con il 99,1% o più di prove, c'è una probabilità del 75% o più di ottenere almeno 1000000, quindi c'è più del 50% di probabilità di superare 1000000.
Questo codice si basa su un comportamento in O
cui un bug è stato introdotto accidentalmente 3 giorni fa ed è stato corretto oggi. Dovrebbe funzionare su qualsiasi versione di Pyth 3 precedente al 22 dicembre o dopo oggi. Il seguente codice è equivalente e ha sempre funzionato:
WOyG~ZtOUT)Z