Pi es un número irracional , lo que significa que su representación decimal nunca termina o se repite.
Pi truncado a 41 dígitos decimales (40 lugares) es 3.1415926535897932384626433832795028841971
.
Si ignoramos el punto decimal y enumeramos los dígitos como una secuencia de enteros positivos, evitando duplicados , obtenemos 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 ).
(Observe que 15
aparece en la secuencia en lugar de 1 5
porque 1
ya había ocurrido.
También tenga en cuenta que 0
no ocurre porque no es positivo; 950
contiene el primer cero).
Para construir el primer número pirracional , usamos esta secuencia para indexar los dígitos de Pi (el primer dígito es 3, el segundo 1, etc.).
Entonces, el primer dígito del primer número pirracional es el tercer dígito de Pi,
el segundo dígito es el primer dígito de Pi,
el tercer dígito es el cuarto dígito de Pi,
el cuarto es el décimo quinto dígito de Pi,
y así sucesivamente.
Se agrega un punto decimal después del primer dígito para imitar Pi.
Así, el primer número pirracional de 41 dígitos es 4.3195195867462520687356193644029372991880
.
(Tenga en cuenta que para el 30º dígito tuve que ir hasta el 974º dígito de Pi).
Para construir el segundo número pirracional, el proceso se repite utilizando el primer número pirracional en lugar de Pi. (Pi mismo puede llamarse el número pirracional cero). Entonces, la nueva secuencia es 4 3 1 9 5 19 58 ...
y el primer número piracional se indexa para producir el segundo, que comienza 9.14858...
.
Otros números pirracionales se crean de la misma manera, cada uno generado a partir del anterior.
Desafío
Su tarea consiste en escribir el programa más corto posible que se lleva en dos enteros, N
y D
, y emite el N
número pirrational º truncada de D
dígitos decimales.
D
siempre es positivo, pero N
no es negativo, y los D
dígitos de Pi deben salir cuando N
es 0.
Cuando D
es 1, no importa si el punto decimal está presente o no.
La entrada debe provenir de stdin o la línea de comando y la salida debe ir a stdout (o las alternativas más cercanas a su idioma).
Su programa debería funcionar para todos los valores de entrada de N
y D
por debajo de 2 16 , pero no necesita ser oportuno o eficiente.
El código más corto en bytes gana.
(Tenga en cuenta que los números pirracionales existen en otras bases, pero todo en este desafío se hace en la base 10.)
N=1
,D=13393
por ejemplo, se necesitaría el dígito 31000000o de PIRespuestas:
Python 292 bytes
Muy ineficiente, solo he podido obtener unos pocos dígitos de N = 3 y ninguno de N = 4.
Entrada de muestra:
fuente
=="0"
a<"1"
. Haga el interior mientras bucle una línea. Eliminar espacios alrededorx += 1
.if l not in h
->if(l in h)<1:
N==0
->N<1
if(l in h)<1
también es bastante inteligente.s
como un parámetro deP
(def P(N,D,s=''):
).str(...)
probablemente se puede escribir con backticks.while'1'>...
ahorra el espacio Hagah
un conjunto e inicialice conh=l,={''}
, luego escribal in h
como{l}<h
.h
ser ordenada. Aún así, ese es un buen truco que intentaré recordar.while j+1:
se puede acortar awhile-~j
, por cierto.Haskell,
431400369¡Tengo que amar listas infinitas! Dado suficiente tiempo y memoria, este programa eventualmente calculará la respuesta correcta para cualquier N y D (supongo).
Estoy generando los dígitos de pi
g
usando un algoritmo de espita (descaradamente robado de un tipo llamado Stanley Rabinowitz), agrupando los dígitos / creando la secuencia usandov
y generando un número pirracional a partir de estos usandom
.Aquí está en acción:
fuente