Considere tres secuencias numéricas A
, B
y C
:
A
: Una secuencia basada en relaciones de recurrenciaf(n) = f(n-1)+f(n-2)
, comenzando conf(1) = 3, f(2) = 4
. Entonces, la secuencia comienza así:3 4 7 11 18 29 47 76 ...
B
: Los números compuestos , es decir, todos los números enteros que no son primos (o 1):4 6 8 9 10 12 14 15 16 ...
C
: Los dígitos de Pi:3 1 4 1 5 9 2 6 5 ...
Dado un entero positivo N < 50
, ya sea como argumento de función o STDIN, devuelve el valor decimal de la fracción A(N)/B(N)
con C(N)
dígitos después del punto decimal. Se aplican las reglas normales de redondeo (redondee hacia arriba si el dígito N + 1 'es 5 o más). Si el enésimo dígito de pi
es cero, se debe imprimir un número entero. Se acepta notación científica / forma estándar para números superiores a 1000.
Este es el código de golf, por lo que gana la respuesta más corta en bytes.
Algunos ejemplos:
N = 1: 0.750
N = 2: 0.7
N = 3: 0.8750
N = 4: 1.2
N = 6: 2.416666667
N = 10: 11.056
N = 20: 764.8750
Por supuesto, se aplican las reglas estándar de golf de código.
La función debe finalizar en menos de dos minutos en cualquier computadora portátil moderna.
C(n)
dígitos, ¿tenemos que incluir ceros al final?N
? Si es así, hasta N = 49. ¿O algo más?Respuestas:
Pyth,
605758 bytesArnés de prueba
Es bastante sencillo: calcule pi, la serie de Fibonacci y los compuestos, redondeado a dígitos C (n), almohadilla a dígitos C (n) más la ubicación de los dígitos del punto decimal, hecho.
Un):
hu,eGsGQjT7
B (n):
e.ftPZQ)
C (n):
e/u+/*GHhyHy^TQr99ZZT
60 -> 57: Limpió el caso especial n = 1 en el cálculo de pi.
57 -> 58: No estaba usando una precisión lo suficientemente alta para pi para todo el rango de entrada: aumentó 99 iteraciones a 1000 iteraciones.
Nota sobre el redondeo: Esto utiliza el sistema de redondeo "más cercano" de Python, en lugar del sistema OP especificado "hacia el infinito". Sin embargo, la diferencia solo es importante si los dígitos que siguen inmediatamente al punto de redondeo son
5000...
, por ejemplo, 1,25 redondeados a 1 dígito. Verifiqué el rango de entrada, y esto nunca sucede, por lo que siempre se devuelve el resultado correcto.fuente
PowerShell,
420 Bytes (ayyyyyyyy)378 BytesGracias a isaacg por guardar 41 bytes, por calcular cómo se redondea la pregunta. Significa que no tuve que incluir lo horrendo
[MidpointRounding]::AwayFromZero
y que no tuve que lanzarlo explícitamente como a[double]
.Este fue muy divertido!
Expandido:
La recursión en PowerShell es ... lenta, digamos, así que tenemos que construir
A(N)
la otra dirección y almacenarla en una matriz, luego indexarla.ANTIGUO
Además, vaca sagrada, ¿los requisitos de salida mataron esto? El valor predeterminado de PowerShell es redondear al redondeo bancario más cercano a / k / a, lo que requiere la utilización de lo extraordinariamente detallado
[MidpointRounding]::AwayFromZero
para cambiar los estilos de redondeo . Además de eso, necesitamos rellenar ceros finales, si los hay. Esos dos requisitos se combinaron para convertir el último par de líneas de 20 Bytes[math]::Round($r,$q)
a 102 Bytes (del$s=""
al+$s)
) ... wow.fuente
[MidpointRounding]::AwayFromZero
solo es casi demasiado bueno / malo para ser verdad ... =)Javascript (ES6), 302 bytes
Una palabra: sin terminar.
Los primeros 49 dígitos de pi se almacenan en una cadena, y las otras dos secuencias se generan automáticamente. Esto ha sido golf alrededor de la mitad; Estoy (casi) seguro de que podría exprimir otros 50 bytes.
Funciona para todos los casos de prueba, y debería funcionar para el resto. Se bloquea en algo más de 49 o menos de 0 (nunca debería encontrarse con estas situaciones de todos modos). Me gusta especialmente su resultado para 0:
fuente
Octava,
276236 bytesEn primer lugar, pensé que sería genial hacer uso de una precisión ilimitada en estas herramientas matemáticas (y actualizar algunos conocimientos al respecto), así que comencé a escribir algunos algoritmos y finalmente descubrí que el
pi
valor no es tan preciso que yo tendrá que usar la matriz nuevamente. Así que de nuevo, no hay gran éxito:Todavía bastante legible, ¿no?
Uso
función copiar-pegar en octava, llamar a la función
c
con argumento de valor requerido:Optimizaciones:
endif
,endfor
y similar conend
la que funciona de la misma manerai
en uno guardar un bytenum2str(str2num(p(A)))
tonterías :)fuente
end
, noendif
, tantos bytes guardados. Si también sucede que tiene la caja de herramientas para MATLAB simbólica, se puede utilizarvpa
para obtener suficientes puntos decimales de pi:vpa(sym(pi),49)
. No lo tengo en esta computadora portátil, así que no estoy seguro de sisym
es necesario allí, pero de todos modos debería ahorrar bastante bytes =) Y legible no es necesariamente algo bueno en el código golf =)while
desdeendwhile
y obras similares bien, así que estoy actualizando la respuesta con pocos personajes menos :)