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
, 4
debe producir salidas respectivas -1
, 2
, -2
, 1
, -3
.
Si 1 indexados entonces entradas 1
, 2
, 3
, 4
, 5
debe 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*n
y 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->-2
y 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
, dondeBA
es 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
a
1 indexado, podemos calcular primero las partes indexadas 1 (leyendo la expresión de izquierda a derecha) y luego disminuira
para 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*2
es 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 ay
variable 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
P
yO
utput tienen la misma precedencia queY
ank, 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
1
a4
. Los primeros comandos sólo afectan a los dos bits menos significativos den-1
lo 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
zipWith
respuesta 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
n
como argumento y devuelve eln
elemento 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 usandosay
y-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-1
funcionarí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 eln
elemento 'th. De todos modos, esto está1
indexado.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