Entrada:
Entero n
que es >=0
o >=1
( f(0)
es opcional)
Salida:
El n
'th número en la secuencia a continuación, O la secuencia hasta e incluyendo el n
' th número.
Secuencia:
(0),1,-1,-3,0,5,-1,-7,0,9,-1,-11,0,13,-1,-15,0,17,-1,-19,0,21,-1,-23,0,25,-1,-27,0,29,-1,-31,0,33,-1,-35,0,37,-1,-39,0,41,-1,-43,0,45,-1,-47,0,49,-1,-51,0,53,-1,-55,0,57,-1,-59,0,61,-1,-63,0,65,-1,-67,0,69,-1,-71,0,73,-1,-75,0,77,-1,-79,0,81,-1,-83,0,85,-1,-87,0,89,-1,-91,0,93,-1,-95,0,97,-1,-99
¿Cómo se construye esta secuencia?
f(n=0) = 0
(opcional)
f(n=1) = f(0) + n
o f(n=1) = 1
f(n=2) = f(1) - n
f(n=3) = f(2) * n
f(n=4) = f(3) / n
f(n=5) = f(4) + n
etc.
O en seudocódigo:
function f(integer n){
Integer result = 0
Integer i = 1
Loop as long as i is smaller than or equal to n
{
if i modulo-4 is 1:
result = result plus i
if i modulo-4 is 2 instead:
result = result minus i
if i modulo-4 is 3 instead:
result = result multiplied with i
if i modulo-4 is 0 instead:
result = result integer/floor-divided with i
i = i plus 1
}
return result
}
Pero como habrás notado, hay dos patrones en la secuencia:
0, ,-1, ,0, ,-1, ,0, ,-1, ,0, ,-1, ,0, ,-1, ,...
,1, ,-3, ,5, ,-7, ,9, ,-11, ,13, ,-15, ,17, ,-19,...
por lo tanto, cualquier otro enfoque que dé como resultado la misma secuencia también es completamente correcto.
Reglas de desafío:
- Las entradas indexadas 0 y 1 indexadas darán como resultado el mismo resultado (por lo que
f(0)
es opcional para las entradas indexadas 0 si desea incluirlo). - Se le permite generar el
n
'número de esta secuencia. O toda la secuencia e incluyendo eln
número 'th. (Porf(5)
lo tanto, puede resultar en cualquiera5
o0,1,-1,-3,0,5
.)- Si elige generar la secuencia hasta e incluyendo el
n
número 'th, el formato de salida es flexible. Puede ser una cadena delimitada por lista / matriz, coma / espacio / nueva línea o impresa en STDOUT, etc.
- Si elige generar la secuencia hasta e incluyendo el
- El divide (
/
) es la división de entero / piso, que se redondea hacia 0 (no hacia el infinito negativo como es el caso en algunos idiomas).
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolfing. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede utilizar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código.
- Además, agregue una explicación si es necesario.
Casos de prueba adicionales anteriores n=100
:
Input Output
1000 0
100000 0
123 -123
1234 -1
12345 12345
123456 0
Respuestas:
JavaScript (ES6), 19 bytes
Pruébalo en línea!
Prueba
Supongamos que tenemos las siguientes relaciones para algunos n múltiplos de 4. Estas relaciones se verifican trivialmente para los primeros términos de la secuencia.
Y deja N = n + 4 . Entonces, por definición:
Lo cual, por inducción matemática, prueba que las relaciones se mantienen para cualquier N múltiplo de 4 .
fuente
n%4
después para que funcione con números mayores de 32 bits.05AB1E , 8 bytes
Emite el
nth
númeroPruébalo en línea!
05AB1E , 14 bytes
Emite una lista de números hasta N usando los patrones en la secuencia
Pruébalo en línea!
Explicación
Ejemplo usando N = 7
fuente
Python 2 , 25 bytes
La respuesta del puerto de Arnauld:
Pruébalo en línea!
Soluciones ingenuas:
Python 3 ,
5049 bytesPruébalo en línea!
Python 2 ,
78777658575352 bytesPruébalo en línea!
Usé un montón de bytes
int
, porque el piso de python se divide, y no hacia0
, como en la pregunta.fuente
J , 12 bytes
La respuesta del puerto de Arnauld:
Pruébalo en línea!
J , 28 bytes
Solución ingenua:
Emite el enésimo número
Pruébalo en línea!
fuente
TIS
-n
2
1
, 123 bytesEmite el
n
número th para0 <= n <= 999
. (El límite superior se debe a limitaciones de idioma).Pruébalo en línea!
TIS
-n
2
1
, 124 bytesEmite el
n
número th para0 <= n <= 999
. (El límite superior se debe a limitaciones de idioma). Sen
pueden proporcionar múltiples , separados por espacios en blanco.Pruébalo en línea!
TIS
-n
3
1
, 192 bytesEmite los valores
0..n
para0 <= n <= 999
. (El límite superior se debe a limitaciones de idioma).Pruébalo en línea!
Todos usan E / S numérica (la
-n
bandera). Las dos primeras soluciones utilizan dos nodos de cálculo, uno colocado encima del otro. El tercero tiene una pila de tres nodos.Para las dos primeras soluciones, el nodo superior lee la entrada, envía el número original, luego resta 4 repetidamente hasta que nos volvemos negativos, luego agrega 5 al índice para nuestra tabla de salto. Esto es equivalente a
(n % 4) + 1
.La tercera solución dividió esta tarea en dos nodos; el superior solo repite el límite hasta el final de los tiempos, y el nodo medio cuenta en paralelo el índice (en comparación con ese límite) y el módulo como se indicó anteriormente.
El nodo inferior de las tres soluciones es el mismo; tiene una mesa de salto, y aquí es donde sucede la magia. Almacenamos el número original en
ACC
, entoncesJRO
(probablemente J UMP R elativo O ffset) presentada por1
,2
,3
, o4
, dependiendo de lo que dice el nodo anterior.Trabajando hacia atrás:
4
hará una )NEG
comióACC
, y b ) se muevenACC
hacia abajo para la salida.3
pondrá1
enACC
, a continuación, realizar los pasos4
una y4
b .2
saltará directamente al paso4
b .1
seSUB
separaráACC
(efectivamente a ceroACC
), luego hará un paso2
, que salta a4
b .fuente
C (gcc) , 62 bytes
Pruébalo en línea!
fuente
f(n){n=n%2>0?n*(2-n%4):n%4/-2;}
aunque lo agregaría como segunda respuesta, porque también me gusta tu enfoque recursivo. :)Jalea , 8 bytes
Pruébalo en línea!
-1 gracias a Lynn .
Lo que otros están haciendo (puerto de la solución de Arnauld), es compatible
0
.Jalea , 17 bytes
Pruébalo en línea!
0
no es apoyado.fuente
Java (JDK 10) , 25 bytes
Pruébalo en línea!
Más corto que el algoritmo contendiente en otros idiomas con 28 bytes.
Pruébalo en línea!
fuente
Retina , 46 bytes
Pruébalo en línea! Explicación:
Convierte a unario.
Convierta de nuevo a decimal, pero deje
n%4+1
subrayados.En el caso de que sea 4, entonces el resultado es
-n
.Caso 3:
-1
Caso 2:
n
Caso 1:
0
fuente
Haskell , 50 bytes
Pruébalo en línea!
La solución de Arnauld, portada a Haskell es de 23 bytes:
fuente
APL (Dyalog Classic) ,
2212 bytes10 bytes masivos guardados debido a los comentarios de Erik the Outgolfer. ¡Gracias!
Pruébalo en línea!
Emite el enésimo número
No conozco APL, solo intenté hacer que mi puerto J de la solución de Arnauld funcione en Dyalog APL.
fuente
(0,⍵,¯1,-⍵)
con(0⍵¯1,-⍵)
. 2) Puede eliminar el1+
asumiendo que la⎕IO
variable del sistema está asignada a0
(sí, eso está permitido). 3) Por lo general, no contamos laf←
parte al enviar funciones. 4) Puede usar la⊃
función en lugar de[]
indexar. Todos juntos forman esto:⎕IO←0
(no cuentes esto){(4|⍵)⊃0⍵¯1,-⍵}
4∘|⊃0,⊢,¯1,-
.4∘|⊃0,⊢,¯1,-
es exactamente como4&|{0,],_1,-
se vería mi solución J en APL. ¡Gracias de nuevo!Cubix ,
2019 bytesPruébalo en línea!
Puertos el mismo enfoque para cubix.
En un cubo:
El primer bit
^Iu:n>s1ns:u0s
construye la pila y luego3at
copia el elemento apropiado a TOS, luegoO
genera y@
finaliza el programa.fuente
Espacio en blanco,
8483 bytesSe agregaron letras
S
(espacio),T
(tabulación) yN
(nueva línea) solo como resaltado.[..._some_action]
agregado solo como explicación.Pruébalo en línea (solo con espacios en bruto, pestañas y nuevas líneas).
Puerto de la respuesta de JavaScript de @Arnauld .
Explicación (entrada de ejemplo
n=7
):Se detiene con error: Salida no definida.
fuente