Dado N, genera el enésimo término de esta secuencia infinita:
-1 2 -2 1 -3 4 -4 3 -5 6 -6 5 -7 8 -8 7 -9 10 -10 9 -11 12 -12 11 ... etc.
N puede estar indexado 0 o indexado 1 como desee.
Por ejemplo, si 0-indexado entonces entradas 0, 1, 2, 3, 4debe producir salidas respectivas -1, 2, -2, 1, -3.
Si 1 indexados entonces entradas 1, 2, 3, 4, 5debe producir salidas respectivas -1, 2, -2, 1, -3.
Para ser claros, esta secuencia se genera tomando la secuencia de enteros positivos repetidos dos veces
1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 ...
y reorganizando cada par de números impares para rodear los números pares justo encima de él
1 2 2 1 3 4 4 3 5 6 6 5 7 8 8 7 9 10 10 9 11 12 12 11 ...
y finalmente negando cualquier otro término, comenzando con el primero
-1 2 -2 1 -3 4 -4 3 -5 6 -6 5 -7 8 -8 7 -9 10 -10 9 -11 12 -12 11 ...
El código más corto en bytes gana.

1,1,2,2,3,3,4,4,...pero aquí está1,2,2,1,3,4,4,3,....Respuestas:
Python 2 , 23 bytes
Las entradas impares dan aproximadamente
n/2, incluso las aproximadamente-n/2. Entonces, comencé-n/2+n%2*ny ajusté desde allí.Pruébalo en línea!
fuente
Mathematica, 29 bytes
Función pura que toma una entrada indexada 1. Aparte de los signos alternos
(-1)^#, el doble de la secuencia está cerca de la entrada, siendo las diferencias 1, 2, 1, -2 cíclicamente. Es bueno que#~GCD~4, el mayor divisor común de la entrada y4, sea 1, 2, 1, 4 cíclicamente; así que simplemente lo reemplazamos manualmente4->-2y lo llamamos un día. Me gusta este enfoque porque evita la mayoría de los comandos de Mathematica de muchos caracteres.fuente
Pip ,
2422 bytesToma entrada, indexada en 1, como argumento de línea de comando. Pruébelo en línea o verifique 1-20 .
Explicación
Observe que la secuencia se puede obtener combinando otras tres secuencias, una de índice cero y las otras de índice uno:
0 0 0 0 2 2 2 2 4 4 4 4=a//4*2(0 indexado);1 2 2 1 1 2 2 1 1 2 2 1=aBA2|1, dondeBAes AND a nivel de bit, y|es OR lógico (1 indexado);-1 1 -1 1 -1 1 -1 1 -1 1 -1 1=(-1)**a(1 indexado).Si comenzamos con
a1 indexado, podemos calcular primero las partes indexadas 1 (leyendo la expresión de izquierda a derecha) y luego disminuirapara la parte indexada 0. Usando la variable incorporadav=-1, obtenemosPara reducir dos bytes más, tenemos que usar algunos trucos de manipulación de precedencia. Podemos eliminar los paréntesis internos reemplazando
+con+:(equivalente a+=en muchos idiomas). Cualquier operador de cálculo y asignación tiene muy poca prioridad, por lo queaBA2|1+:--a//4*2es equivalente a(aBA2|1)+:(--a//4*2). Pip emitirá una advertencia sobre la asignación de algo que no es una variable, pero solo si tenemos habilitadas las advertencias.Lo único que tiene una precedencia menor que
:esY, el operador de extracción. * Asigna el valor de su operando ayvariable y lo pasa sin cambios; por lo que podemos eliminar los paréntesis exteriores, así como dando un tirón el valor en lugar de parenthesizing que:YaBA2|1+:--a//4*2.* rint
PyOutput tienen la misma precedencia queYank, pero no son útiles aquí.fuente
Jalea ,
87 bytesEsto utiliza el algoritmo de mi respuesta de Python , que fue mejorado significativamente por @GB .
Pruébalo en línea!
Cómo funciona
fuente
¡)Java 8, 19 bytes
Java 7,
4737 bytesLa primera vez que Java (8) realmente compite y es más corta que algunas otras respuestas. Sin embargo, todavía no puedo superar los idiomas de golf reales como Jelly y similares (duhuh ... qué sorpresa ...>.>; P)
Puerto indexado 0 de la respuesta Python 2 de @Xnor .
-10 bytes gracias a @GB
Pruébalo aquí
fuente
Jalea ,
151211 bytesPruébalo en línea!
Cómo funciona
fuente
RProgN 2 ,
312522 bytesExplicado
Pruébalo en línea!
fuente
Rubí,
26 2318 bytesBasado en 0
-3 bytes robando la idea -1 ^ n de Greg Martin , Dennis y tal vez alguien más, luego -5 bytes robando la idea n | 2 de xnor .
fuente
Apilado ,
3028 bytesPruébalo en línea! Devuelve una función, que según lo permitido por meta consenso. . Toma información desde la parte superior de la pila.
Usando el mismo enfoque que la respuesta RProgN 2 .
Alternativamente, 46 bytes. Pruébalo en línea! :
Éste genera el rango y luego selecciona y niega el miembro según corresponda.
fuente
Python 2 ,
443327 bytes¡Gracias a @GB por jugar golf en 6 bytes!
Pruébalo en línea!
fuente
05AB1E, 8 bytes
Pruébalo en línea
Explicación
fuente
¹F(parece caro para "si es extraño, negar".n, al poder de1/n.Jalea ,
98 bytesPruébalo en línea!
-1 gracias a Dennis . Duh flotan conversiones.
Utiliza el enfoque Python 2 de @ xnor.
EDITAR : > _>
fuente
|2×Ḃ+H~$Guarda un byte. tio.run/nexus/jelly#AR0A4v//fDLDl@G4gitIfiT/…CJam , 16 bytes
Entrada basada en 1.
Pruébalo en línea!
Explicación
Aquí hay un desglose del código con los valores en la pila para cada entrada de
1a4. Los primeros comandos sólo afectan a los dos bits menos significativos den-1lo que después4, esto simplemente repite cíclicamente, con los resultados incrementa en 2, debido a la reducción a la mitad.fuente
Perl 6 ,
55 27 2422 bytes(Inspirado por la
zipWithrespuesta de Haskell )Pruébalo
(Inspirado por varias respuestas)
Pruébalo
Intentalo
Intentalo
Expandido:
(Todos están basados en 0)
fuente
Haskell ,
3736 bytesPruébalo en línea! Esta es una función anónima que toma un número
ncomo argumento y devuelve elnelemento th de la secuencia indexado en 0 .fuente
Haskell, 56 bytes
0 indexado
fuente
Perl 5 47 + 1 (para bandera) = 48 Bytes
Envío anterior 82 bytes
Corre así:
fuente
print +((y eliminando el final). Y dos más usandosayy-E. Y también uno más haciendo en($_%4&1||-1)lugar del ternario.JavaScript (ES7), 28 bytes
1 indexado. Todavía no he visto ninguna otra respuesta, así que no sé si este es el mejor algoritmo, pero sospecho que no.
fuente
JavaScript,
2822 bytesGracias @ETHproductions por jugar golf en 6 bytes
Pruébalo en línea!
fuente
f=x=>x%2?~x>>1:x/2+x%4-1funcionaría?dc , 98 bytes
Gosh, esta es la respuesta más larga aquí, principalmente porque seguí el camino de generar el valor absoluto de cada elemento de la secuencia uno por uno en base a la siguiente fórmula recursiva:
luego generar
(-1)^n * a_n, en lugar de calcular directamente elnelemento 'th. De todos modos, esto está1indexado.Pruébalo en línea!
fuente
R, 38 bytes
Explicación
fuente
TI-Basic (TI-84 Plus CE), 31 bytes
TI-Basic es un lenguaje tokenizado y cada token utilizado aquí es un byte, excepto
remainder(, que es dos.Esto utiliza la versión 1 indexada.
Explicación:
Hay un patrón que se repite cada cuatro números. En la versión indexada 1, es: - (x + 1) / 2, (x + 1) / 2, - (x + 1) / 2, (x-1) / 2 para el valor de entrada x. Esto se puede representar como una función definida por partes.
f (x) = - (x + 1) / 2 si x ≡ 1 mod 4; (x + 1) / 2 si x ≡ 2 mod 4; - (x + 1) / 2 si x ≡ 3 mod 4; (x-1) / 2 si x ≡ 0 mod 4
Debido a que las partes "x ≡ 1 mod 4" y "x ≡ 3 mod 4" son las mismas, podemos combinarlas en "x ≡ 1 mod 2".
Ahora la función por partes es:
f (x) = - (x + 1) / 2 si x ≡ 1 mod 2; (x + 2) / 2 si x ≡ 2 mod 4; (x-2) / 2 si x ≡ 0 mod 4
Aquí es donde empiezo a dividirlo en comandos reales. Como el valor es positivo para los índices pares y negativo para los impares, podemos usar (-1) ^ x. Sin embargo, en TI-Basic
i^(2X(5 bytes) es más corto que(-1)^Ans(6 bytes). Tenga en cuenta que los paréntesis son obligatorios debido al orden de las operaciones.Ahora que tenemos la manera de negar las entradas impares, pasamos a las modificaciones (agregando la negación de nuevo más adelante). Hice el caso de una entrada impar por defecto, así que comenzamos con
.5(Ans+1).Para arreglar el caso de una entrada uniforme, simplemente agregue uno al número entre paréntesis, pero solo cuando x ≡ 0 mod 2. Esto podría representarse como
.5(Ans+1+remainder(Ans+1,2))o.5(Ans+1+not(remainder(Ans,2))), pero tienen el mismo número de bytes, por lo que no importa cuál.Para arreglar el caso de entrada de múltiplo de 4, necesitamos restar 3 del número entre paréntesis, pero también otro 1 porque todos los múltiplos de 4 son pares, lo que sumaría uno de nuestro paso anterior, por lo que ahora tenemos
.5(Ans+1+remainder(Ans+1,2)-4not(remainder(Ans,4))).Ahora, simplemente agregue la parte que determina la señal hasta el final para obtener el programa completo.
fuente
Befunge 93, 25 bytes
Indexado a cero
Pruébalo en línea!
El número viene dado por
((2(n / 4) + 1) + !!((n % 4) % 3)) * (2(n % 2) - 1)fuente
QBIC , 53 bytes
Explicación:
fuente
Sabio , 19 bytes
Pruébalo en línea!
Este es solo un puerto de la respuesta de @Dennis 'Jelly a Wise.
fuente
Q, 52 bytes
0 solución indexada.
fuente