Todo el mundo sabe pi la constante matemática, la razón de la circunferencia de un círculo a su diámetro.
3.14159265358979323846264338327950288419716939937510...
Es probable que también sabe ae la constante matemática, la base de un logaritmo natural.
2.71828182845904523536028747135266249775724709369996...
Pero ... ¿sabes pastel ? Es una de las constantes más importantes (para mí). Son los dígitos de pi y e intercalados.
32.1741185298216852385485997094352233854366206248373...
Como una expansión decimal:
3, 2, 1, 7, 4, 1, 1, 8, 5, 2, 9, 8, 2, 1, 6, 8, 5, 2...
Esta es la secuencia OEIS A001355 .
PALABRA CLAVE: nonn, base, tonto , fácil
Es una secuencia muy tonta.
Reto
Escriba un programa / función que tome un número entero no negativo n y genere el enésimo dígito del pastel .
Presupuesto
- Normas estándar de E / S se aplican .
- Las lagunas estándar están prohibidas .
- Su solución debe funcionar con al menos 50 dígitos de cada constante, lo que significa que debe funcionar con al menos 100 términos de la secuencia (por favor, intente no codificar: P).
- La salida para 2 o 3 no es un punto decimal .
- Su solución puede estar indexada a 0 o indexada a 1, pero especifique cuál.
- Este desafío no se trata de encontrar el enfoque más corto en todos los idiomas, sino de encontrar el enfoque más corto en cada idioma .
- Su código se puntuará en bytes , generalmente en la codificación UTF-8, a menos que se especifique lo contrario.
- Las funciones integradas que calculan esta secuencia están permitidas, pero se recomienda incluir una solución que no se base en una función integrada.
- Se alientan las explicaciones, incluso para los idiomas "prácticos" .
Casos de prueba
Estos están indexados a 0.
Input Output
1 2
2 1
11 8
14 6
21 4
24 9
31 5
En algunos formatos mejores:
1 2 11 14 21 24 31
1, 2, 11, 14, 21, 24, 31
2 3 12 15 22 25 32
2, 3, 12, 15, 22, 25, 32
dumb
simplemente significa poco interesante sin propiedades especiales.pei
, nopie
Respuestas:
Mathematica, 50 bytes
1 indexado
fuente
Riffle
, pero mi solución aparece un byte corto:RealDigits[If[OddQ@#,Pi,E],10,#][[1,Ceiling[#/2]]]
&Haskell,
154147146 bytes, SIN CODIFICACIÓN O USO DE CONSTANTES CONSTRUIDOSEsta solución calcula e y pi utilizando series infinitas y las almacena en enteros de punto fijo de precisión arbitraria (el tipo incorporado de Haskell
Integer
y suRational
extensión).Sin golf:
0 indexado. Preciso para la entrada 0-99, impreciso para la entrada 100-101, fuera de los límites de lo contrario.
Explicación:
Calcula pi usando esta serie infinita . Calcula e utilizando la serie factorial inversa clásica . Teóricamente, estas no son las fórmulas ideales para usar, ya que no son muy concisas en términos de bytecount, pero fueron las únicas que pude encontrar que convergieron lo suficientemente rápido como para hacer posible la verificación de la precisión (otras sumas requieren cientos de miles si no millones de términos). En la versión de golf, e se calcula con una precisión mucho mayor que la necesaria para minimizar el bytecount. Ambas constantes se calculan con un poco más de dígitos de lo necesario para evitar errores de redondeo (que son responsables de la incómoda cola de valores incorrectos).
Las constantes se calculan como relaciones enteras de precisión arbitraria (
Rational
), luego se multiplican por 10 ^ 50 para que todos los dígitos necesarios permanezcan intactos cuando la relación se convierte en un entero (precisión arbitraria) (Integer
). Esto también evita el problema de evitar el punto decimal en las representaciones de cadena de los números, de la que la función extrae caracteres alternativamente.fuente
Taxi , 749 bytes.
Pruébalo en línea!
Intentar calcular pi o e programáticamente en Taxi sería una pesadilla, aunque estoy seguro de que se puede hacer. Por lo tanto, es mucho más corto codificar los primeros 100 dígitos de la secuencia. Se siente bastante barato, pero definitivamente es el código de Taxi más corto que cumple con el desafío.
Codifica la secuencia como cadenas, toma
n
, luego iteran
hacia abajo y elimina el primer carácter de la cadena cada vez. Cuandon=0
, muestra el primer caracter. Esto es un índice.Sin golf / formateado:
fuente
Python 2 , 88 bytes
-4 bytes gracias a la idea de conversión base de @EriktheOutgolfer .
Pruébalo en línea!
Python 2 + sympy , 92 bytes
0 indexado. Gracias a Rod por recordarme que me cambiara
from sympy import*
, lo que anteriormente olvidé.Pruébalo en línea!
Python 2 , 114 bytes
Sinceramente, creo que la solución más corta es la codificación, ya que Python no tiene incorporados útiles.Pruébalo en línea!
Python 2 , 114 bytes
Solución equivalente por @totallyhuman .
Pruébalo en línea!
fuente
05AB1E , 10 bytes
Explicación:
0 indexado.
Pruébalo en línea!
fuente
žt
ese entonces no era una lista infinita, por eso Okx está usando los primeros 100 dígitos de e en su programa. Cambiarlo a la nueva versión de 05AB1E (donde pi y e son una lista infinita) aún no funcionaría en su versión actual, porque el zip crearía pares y elJ
oin uniría esos pares en lugar de todo. 9 bytes son todavía posibles mediante la sustituciónJ
conS
en la nueva versión sin embargo, dondeS
hace que sea una lista aplanada de chars / dígitosPython 3 ,
8380 bytes0 indexado.
Pruébalo en línea!
Hay algunos caracteres no imprimibles allí que no se pueden ver correctamente en un navegador.
Esto funciona construyendo la tupla a
(32, 17, 41, 18, 52, ...)
partir de los códigos ASCII de los caracteres en la cadena de bytes codificada. La tupla se convierte en la cadena'3217411852...'
, de la cual seleccionamos el dígito correcto.fuente
Políglota, 108 bytes
Trabaja en:
Creo que esto es lo más corto que puedes hacer en C # ya que son 252 bytes para encontrar el enésimo decimal de pi .
fuente
Java 8,
420417413404380358 (calculado) y115110 (hardcoded) bytesCalculado (
420417413404380358 ):Pruébalo aquí
Demuestre que genera el resultado correcto para los 100 elementos necesarios.
Codificado: (
115110 bytes ):Pruébalo en línea.
0 indexado
-9 y -5 bytes gracias a @Nevay .
-24 bytes gracias a @ceilingcat .
Lo has pedido ...;)
Java está integrado
Math.PI
yMath.E
son dobles, que tienen una precisión máxima de solo 16. Por lo tanto, tendremos que calcular ambos valores nosotros mismos usandojava.math.BigInteger
y / ojava.math.BigDecimal
.Como ya he calculado PI antes en otro desafío , he usado el mismo código usando
BigInteger
.BigDecimal
Sin embargo, el algoritmo para el número de Euler se usa .El resultado
p
ye
son por lo tanto:31415...
y2.718...
.Probablemente podría jugar golf solo usando
BigDecimal
, pero estaba dando algunas respuestas incorrectas para PI, así que ahora uso ambosBigDecimal
yBigInteger
.Explicación:
fuente
(d+=2)
a++d
yreturn p%10+1
soloreturn p%10
.You've asked for it.. ;)
Oye, me gusta tu primera mejor. Me modo más respuestas de las que esperaba hardcoded ...charAt(n+1>>1)
y 5 bytes en su versión codificada utilizando una referencia de método"..."::charAt
.Semilla , 6015 bytes
La semilla equivalente a mi respuesta Befunge. Como mencioné allí, el programa Befunge que esto genera no funciona en TIO porque TIO parece tener un ajuste de línea interno de 80 caracteres.
fuente
Excel, 113 bytes
1 indexado
PI()
solo tiene una precisión de hasta 15 dígitos. Similar paraEXP(1)
.60Solución de 42 bytes que funciona para Input<=30
(-18 bytes gracias a @Adam)fuente
if(...)
declaración:=MID(IF(ISODD(b1),PI(),EXP(1)/10)/10,b1/2+3,1)
.Can't moverse por la imprecisión depi()
yexp()
, aunque05AB1E , 13 bytes
Pruébalo en línea!
Similar a la respuesta de Magic, pero un poco diferente.
Explicación:
fuente
Python 2 + SymPy ,
7063 bytesPruébalo en línea!
fuente
Japt , 55 bytes
¡Pruébelo en línea!Contiene algunos no imprimibles.
Funciona reemplazando cada carácter en la cadena con su código de caracteres, luego devuelve el dígito en el índice correcto. La cadena fue generada por este programa:
¡Pruébelo en línea!
fuente
Julia, 63 bytes
1 indexado
Convierte pi o e en una cadena, elimina el lugar decimal y luego llama al dígito apropiado. Devuelve una representación de caracteres del dígito.
fuente
Semilla,
58525794Basado en la respuesta de TehPers Befunge.
fuente
Malbolge Unshackled (variante de rotación de 20 trits), 3,64E6 bytes
El tamaño de esta respuesta excede el tamaño máximo de programa postable (eh), por lo que el código es encuentra en mi repositorio de GitHub (nota: no copie el código usando CTRL + A y CTRL + C, simplemente haga clic derecho y haga clic en "Guardar elemento de destino como. .. ").
¿Cómo ejecutar esto?
Esto podría ser una parte difícil, porque el ingenuo intérprete de Haskell tardará siglos en ejecutarlo. TIO tiene un intérprete decente Malbogle Unshackled, pero lamentablemente no podré usarlo (limitaciones).
La mejor que pude encontrar es la variante de ancho de rotación fija de 20 trits, que funciona muy bien, calculando (más o menos) al instante .
Para hacer que el intérprete sea un poco más rápido, eliminé todas las comprobaciones del intérprete Malbolge Unshackled de Matthias Lutter.
fuente
05AB1E , 14 bytes
Pruébalo en línea!
Esta respuesta está indexada a 0.
fuente
'.K
aþ
y retirar el<
. (No estoy seguro de por qué incluso incluiste el<
, ya que<
,
ya que el zip lo hace implícitamente, pero veo que es casi exactamente lo mismo que la otra respuesta de 10 bytes ...Python 3 + SymPy , 109 bytes
0 indexado Pruébelo en línea!
Batir la codificación por 5 bytes !! Pero probablemente podría ser mejor. Pero superar el hardcoding me hace sentir bien :)
fuente
Pyth, 35 bytes
Banco de pruebas
Como Pyth no tiene constantes de precisión arbitraria pi y e incorporadas, las calculo directamente.
Calculando pi:
Este sistema utiliza la siguiente recurrencia continuaron fracción de pi cálculo:
2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...))))
. Lo obtuve de otra respuesta PPCG . Se deriva en las ecuaciones 23-25 aquí .Lo calculo de adentro hacia afuera, omitiendo todos los términos más allá del 1024, ya que los términos posteriores tienen poco efecto en el número, y mantengo 99 dígitos de precisión para asegurarme de que los primeros 50 sean correctos.
Calculando e:
Sumo los recíprocos de los primeros 1024 números, a 99 dígitos de precisión.
Luego, convierto ambos números en cadenas, los entrelazo y los indexo.
fuente
MATLAB, 93 Bytes
Una explicación simple es que esto primero convierte e y pi en cadenas, luego pasa por un bucle for que concatena los dígitos. Aquí, c es pastel, p es pi y e es e.
También he dividido esto en varias líneas para facilitar la lectura, pero el código real está en una sola línea con un espaciado mínimo.
fuente
n
produzca elnth
dígito de la secuencia de Pie. También puede reducir su bytecount reduciendo sus nombres de variables a un solo carácterinput('')
en lugar deinput('n')
C # + BigDecimal ,
377372 bytesGuardado 5 bytes gracias a @Kevin Cruijssen.
No hay un enlace TIO debido a la biblioteca externa, desafortunadamente C # no tiene una
BigDecimal
clase integrada, por lo que esta externa tendrá que funcionar. Probablemente todavía sea posible jugar al golf, pero no hay tiempo en este momento.Versión completa / formateada:
fuente
x[j++]/e
enc=(x[j++]/e)*n
-2 bytes; Además, creo que puede eliminar ambos+""
en las dos declaraciones de retorno y devolver un int en lugar de una cadena, y luego agregar-48
en la segunda declaración de retorno para convertir char en salida int (para -1 byte).Python 2 , 82 bytes
Pruébalo en línea!
Contiene algunos caracteres ASCII no imprimibles. flornquake ahorró dos bytes.
fuente
lambda n:('%02d'%ord('...'[n/2]))[n%2]
, aunque probablemente haya algo mejor.brainfuck , 402 bytes
Pruébalo en línea!
Ingresar como código de caracteres (por ejemplo, "A" = 65)
¡Pruébelo en línea con entrada de dígitos!
código:
fuente
Neim , 45 bytes
Neim no está hecho para números decimales
Pruébalo en línea!
fuente
Befunge , 105 bytes
No funciona en TIO porque parece ajustar líneas internamente a 80 caracteres por alguna razón. Puede hacer que funcione en TIO colocando cada dígito en una nueva línea y colocando el
&0g,@
después3
en la primera línea.fuente
JavaScript (ES6) + mathjs , 78 bytes
Cero indexado y funciona hasta 128 números (entrada máxima de 127).
Fragmento de prueba
fuente
MATLAB (con caja de herramientas simbólica),
8982 bytesAl hacer uso de Symbolic Toolbox, esta respuesta proporciona una salida sin codificar los valores de pi y e.
Como un bono divertido, este código como entrada puede tomar un solo índice o una matriz de índices y proporcionará simultáneamente el valor de salida para todos los valores de índice proporcionados (por ejemplo, proporcionar 1:10 generará los primeros 10 valores).
(nuevas líneas agregadas para facilitar la lectura, no se requieren para la ejecución, por lo que no se incluyen en el recuento de bytes)
Desafortunadamente, la versión Octave utilizada por TIO no admite entradas simbólicas a
vpa
función, por lo que no puede proporcionar en el enlace TIO.En MATLAB, la indexación en el vector de retorno desde una función no es posible de la misma manera que con Octave, lo que significa que este es un programa completo en lugar de solo una función anónima. El programa solicitará una entrada
n
durante la ejecución; este es un valor indexado para el cual se requiere el elemento. Al final del programa, el valor se imprime implícitamente.Para el programa utilizamos la
vpa
función que proporciona a 51 decimales el valor depi
yexp(1)
(e). Esto se hace simbólicamente para permitir una precisión teóricamente infinita. Para expandir más de 100 elementos, simplemente aumente el valor51
en el código para aumentar el rango.Envolver
vpa
enchar
(es decir,char(vpa(...))
) es necesario para convertir la salida de la función a una cadena en lugar de un valor simbólico. El resultado resultante es la cadena:Esto incluye tanto e como pi con 51 decimales, lo suficiente para permitir 100 dígitos de nuestra salida (tenemos que hacer un poco de dp adicional de lo requerido para evitar imprimir valores redondeados)
Para poder indexar este lío, necesitamos al menos deshacernos de los puntos decimales para que ambas cadenas de dígitos sean contiguas. Originalmente utilicé un reemplazo simple de expresiones regulares de cualquier cosa que no sea un dígito sin nada. Sin embargo, puedo guardar 7 bytes al deshacerme del punto decimal usando el código:
la cadena resultante es ahora:
Contiene todos los dígitos que necesitamos con fragmentos pi y e en índices consecutivos.
Luego podemos convertir el índice proporcionado de modo que los números impares accedan al fragmento pi y los números pares accedan al fragmento e utilizando el cálculo:
Acceder a ese (esos) índices (índices) en la cadena anterior proporcionará la salida correcta.
fuente
Axioma, 148 bytes
Matriz basada en 0. Resultados
fuente
Hojas de cálculo de Google, 47 bytes
Función de hoja de trabajo anónima que toma la entrada de la celda
A1
y emite ese dígito de Pie a la celda que llamaVersión codificada, 112 bytes
Esta versión cumple totalmente con las especificaciones del programa, pero generalmente no es divertida.
Función de hoja de trabajo anónima que devuelve el enésimo dígito en la lista de pie indexada en 1
fuente
BFASM , 142 bytes
Toma la entrada como carácter ascii, da salida en forma de dígito.
fuente