Pi è un numero irrazionale , il che significa che la sua rappresentazione decimale non si interrompe mai o si ripete.
Pi troncato a 41 cifre decimali (40 posizioni) è 3.1415926535897932384626433832795028841971
.
Se ignoriamo il punto decimale ed elenchiamo le cifre come una sequenza di numeri interi positivi, evitando duplicati , otteniamo 3 1 4 15 9 2 6 5 35 8 97 93 23 84 62 64 33 83 27 950 28 841 971
( OEIS A064809 ).
(Notare che 15
appare nella sequenza anziché 1 5
perché si 1
era già verificato.
Si noti inoltre che 0
non si verifica perché non è positivo; 950
contiene il primo zero.)
Per costruire il primo numero pirrazionale usiamo questa sequenza per indicizzare le cifre di Pi (la prima cifra è 3, la seconda 1, ecc.).
Quindi la prima cifra del primo numero pirrazionale è la terza cifra di Pi,
la seconda cifra è la prima cifra di Pi,
la terza cifra è la quarta cifra di Pi,
la quarta è la 15a cifra di Pi
e così via.
Un punto decimale viene aggiunto dopo la prima cifra per imitare Pi.
Quindi il primo numero pirrazionale a 41 cifre è 4.3195195867462520687356193644029372991880
.
(Notare che per la 30a cifra ho dovuto arrivare fino alla 974a cifra di Pi.)
Per costruire il secondo numero pirrazionale, il processo viene ripetuto usando il primo numero pirrazionale anziché Pi. (Pi stesso può essere chiamato il numero pirrazionale di zeroth.) Quindi la nuova sequenza è 4 3 1 9 5 19 58 ...
e il primo numero di penetrazione viene indicizzato per produrre il secondo, che inizia 9.14858...
.
Ulteriori numeri pirrazionali vengono creati allo stesso modo, ciascuno generato da quello precedente.
Sfida
Il tuo compito è quello di scrivere il programma più breve possibile che comprenda due numeri interi N
e D
che N
generi il numero pirrazionale troncato in D
cifre decimali.
D
è sempre positivo ma N
non negativo e le D
cifre di Pi devono essere emesse quando N
è 0.
Quando D
è 1, non importa se il punto decimale è presente o meno.
L'input dovrebbe provenire da stdin o dalla riga di comando e l'output dovrebbe andare a stdout (o alle alternative più vicine alla tua lingua).
Il programma dovrebbe funzionare per tutti i valori di input di N
e D
inferiore a 2 16 , ma non deve essere tempestivo o efficiente.
Vince il codice più breve in byte .
(Nota che i numeri pirrazionali escono in altre basi ma tutto in questa sfida viene fatto nella base 10.)
N=1
, D=13393
ad esempio, si avrebbe bisogno la cifra il 31 milionesimo di PI