Esta es una tarea algo diferente. Calcule 1024 dígitos hexadecimales de π, comenzando en el lugar hexadecimal número 1024.
Formalmente: su programa debería completarse en menos de 1 minuto y producir el siguiente resultado:
25d479d8f6e8def7e3fe501ab6794c3b976ce0bd04c006bac1a94fb6409f60c45e5c9ec2196a246368fb6faf3e6c53b51339b2eb3b52ec6f6dfc511f9b30952ccc814544af5ebd09bee3d004de334afd660f2807192e4bb3c0cba85745c8740fd20b5f39b9d3fbdb5579c0bd1a60320ad6a100c6402c7279679f25fefb1fa3cc8ea5e9f8db3222f83c7516dffd616b152f501ec8ad0552ab323db5fafd23876053317b483e00df829e5c57bbca6f8ca01a87562edf1769dbd542a8f6287effc3ac6732c68c4f5573695b27b0bbca58c8e1ffa35db8f011a010fa3d98fd2183b84afcb56c2dd1d35b9a53e479b6f84565d28e49bc4bfb9790e1ddf2daa4cb7e3362fb1341cee4c6e8ef20cada36774c01d07e9efe2bf11fb495dbda4dae909198eaad8e716b93d5a0d08ed1d0afc725e08e3c5b2f8e7594b78ff6e2fbf2122b648888b812900df01c4fad5ea0688fc31cd1cff191b3a8c1ad2f2f2218be0e1777ea752dfe8b021fa1e5a0cc0fb56f74e818acf3d6ce89e299b4a84fe0fd13e0b77cc43b81d2ada8d9165fa2668095770593cc7314211a1477e6ad206577b5fa86c75442f5fb9d35cfebcdaf0c7b3e89a0d6411bd3ae1e7e4900250e2d2071b35e226800bb57b8e0af2464369bf009b91e5563911d59dfa6aa78c14389d95a537f207d5ba202e5b9c5832603766295cfa911c8197a72e72a341134834472
El programa con la menor duración gana. Tienes que calcular todos los dígitos en tiempo de ejecución. No tiene que implementar el algoritmo que calcula π; Si su idioma ya proporciona esa funcionalidad, puede usarla.
fuente
Respuestas:
Sage, 29 char
Esto no es técnicamente trampa, ya que los dígitos se calculan en tiempo de ejecución. Dicho eso, sigue siendo barato como el infierno.
fuente
Utilidades de Shell: 48
curl -sL ow.ly/5u3hc|grep -Eom 1 '[a-f0-9]{1024}'
fuente
curl -sL ow.ly/shKGY|grep -Po \\w{99,}
(37). Trabaja en Dash. Bash necesitaría un byte adicional.J,
156, 140, 137127Usando la fórmula BBP.
No no funcionar en menos de un minuto (pero tenemos una respuesta J: p)
Ejemplo para los primeros 104 dígitos de π (esto corre rápido):
fuente
#:
no generará dígitos hexadecimales.(... 16 #:) Pi
? Creo que no tenemos suficientes dígitos, así que tenemos que generarlos de todos modos.hfd
para convertir números a hexadecimales.JavaScript, 536
(Saltos de línea e indentación solo para legibilidad)
Tarda unos 25 segundos, en Google Chrome 14 en mi computadora portátil con Intel i5 core. ¿Alguien más puede jugar golf este código? No puedo jugar bien al golf .. :(
Debajo está no golfizado. Solo eliminé todos los comentarios y cambié el loop por golf.
No mencione sobre
for(;s>=b;s-=b);s*=16;
. Lo cambié as=(s%b)*16
. :PAGEDITAR: Se eliminó la función totalmente no utilizada. (¿Por qué me quedé con eso?: /)
PD. Primeros 100 dígitos de PI
243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c89452821e638d01377be5466cf34e90c6cc0ab
fuente
d='0123456789abcdef',l=3e3,p=Array(l+1).join(2),o='',c=0,e='length';d+=d;function _(a,b,s){for(i=(a[e]>b[e]?a[e]:b[e])-1,r='',c=0;i+1;r=d[Z=F(b,i,1)+c,k=F(a,i,1)+(s?Z:16-Z),c=s?k>15:k<16,k]+r,i--);return r}function F(a,b,f){if(f)f=a[e]>b?d.indexOf(a[b]):0;else{for(i=0,f='',s=16;i++<l;f+=d[~~(s/b)],s=(s%b)*16);while(a--)f=_(f,f,1)}return f}for(j=0;++j<l;p=_(p,(o+='0')+_(_(_(F(2,z=8*j+1),F(1,z+3)),F(0,z+4)),F(0,z+5)),1));console.log(p.slice(1024,2048))
_
a favor del,
operador. La más complicada es la fusión de$
yg
en una función, con un argumento opcional para seleccionar entre ellas.function
yreturn
ambos son bastante caros, por lo que unif(f)...else
par de ellos,1
es una compensación razonable.PHP
116114 bytesEsta solución calcula todos los pi hasta 2048 dígitos hexadecimales, cuatro dígitos hexadecimales a la vez, y genera la última mitad de ellos. El tiempo de ejecución es inferior a 5 segundos. La fórmula utilizada para el cálculo es la siguiente:
La precisión se obtiene almacenando los restos en una matriz y continuando cada una de las 2 ^ 14 divisiones de forma incremental.
Python 64 bytes
El mismo método que el anterior. Se ejecuta en aproximadamente 0.2s.
O como una línea en 73 bytes :
fuente
PARI / GP-2.4, 141
Usando la fórmula de Bailey – Borwein – Plouffe (por supuesto).
Se ejecuta en menos de un minuto.
fuente
Código C:
tiempo de ejecución = 8.06 segundos en un Intel Quad Core
fuente
printf("%X",(int)gA)
lugar de esa larga lista.PARI / GP - 40 bytes
Esta versión 'engaña' al usar
\x
para mostrar los dígitos hexadecimales del resultado.Esta versión tarda 87 bytes para convertir a hexadecimal de la manera habitual.
Ambas versiones se ejecutan en una pequeña fracción de segundo.
fuente
Perl - 59
Menos de 0.1s.
fuente
Shell 68
herramientas: bc -l, tr, corte
Shell 64, herramientas: bc -l, tr, tail, difiere en el redondeo del último lugar
Puede considerarse trampa, ya que el conocimiento de cómo calcular PI está en 4 * a (1), y que 1 tiene que usar scale = 2466 se investigó de forma iterativa.
Gracias a breadbox por la idea de usar cortar.
fuente
dd
comando contail -c1024
para guardar algunos caracteres.dd
concut -c1027-2051
. (El shell tiene muchas herramientas para manipular secuencias de texto.)