Los enteros no negativos están aburridos de tener siempre los mismos dos * vecinos, por lo que deciden mezclar un poco las cosas. Sin embargo, también son flojos y quieren mantenerse lo más cerca posible de su posición original.
Vienen con el siguiente algoritmo:
- El primer elemento es 0.
- El elemento es el número más pequeño que aún no está presente en la secuencia y que no es vecino del elemento .
Esto genera la siguiente secuencia infinita:
0,2,4,1,3,5,7,9,6,8,10,12,14,11,13,15,17,19,16,18,20,22,24,21,23,25,27,29,26,28 ...
0
Es el primer elemento. 1
es el número más pequeño que aún no está en la secuencia, pero es vecino de 0
. El siguiente número más pequeño es 2
, por lo que es el segundo elemento de la secuencia. Ahora los números restantes son 1,3,4,5,6,...
, pero como ambos 1
y 3
son vecinos de 2
, 4
es el tercer miembro de la secuencia. Como 1
no es vecino 4
, finalmente puede tomar su lugar como cuarto elemento.
La tarea
Escriba una función o programa en la menor cantidad de bytes posible que genere la secuencia anterior.
Puedes
- dar salida a la secuencia infinitamente,
- tome una entrada devuelva el elemento de la secuencia, o
- tome una entrada devuelva los primeros n elementos de la secuencia.
Tanto la indexación cero como la única están bien en caso de que elija una de las dos últimas opciones.
No necesita seguir el algoritmo dado anteriormente, cualquier método que produzca la misma secuencia está bien.
Inspirado en Code golf la mejor permutación . Resulta que esto es A277618 .
* Zero tiene literalmente solo un vecino y realmente no le importa.
Respuestas:
JavaScript (ES6), 13 bytes
Devuelve el º término de la secuencia.n
Pruébalo en línea!
¿Cómo?
Esto calcula:
fuente
Python 2 , 20 bytes
Pruébalo en línea!
fuente
MathGolf , 5 bytes
Pruébalo en línea!
Alguna buena simetría aquí. Devuelve el
nth
elemento de la secuencia.Explicación:
fuente
Jalea , 5 bytes
Pruébalo en línea!
Go go gadget obscure incorporado!
fuente
Wolfram Language (Mathematica) , 14 bytes
Pruébalo en línea!
Imprime el enésimo número entero indexado a cero en la secuencia.
fuente
R ,
252321 bytes-2 bytes gracias a Jo King
Pruébalo en línea!
nth
Elemento de salidas en secuencia.fuente
dzaima / APL , 9 bytes
La respuesta del puerto de Arnauld.
Pruébalo en línea!
fuente
Pip , 14 bytes
O, la fórmula que todos usan, para 12 bytes :
fuente
Lisp común , 67 bytes
Pruébalo en línea!
fuente
(defun x(n)(+(mod(+ n 2)5)(- n 2)))
, o(lambda(n)(+(mod(+ n 2)5)(- n 2)))
es suficiente: devolver el enésimo término, en lugar de una secuencia de términos.Japt , 8 bytes
Intérprete Japt
Un puerto directo de la respuesta Javascript de Arnauld. La versión vinculada se ejecuta a través de los primeros n elementos, pero si
-m
se elimina la bandera, sigue siendo válida e imprime el enésimo elemento.En aras de la comparación, aquí está la versión ingenua que implementa el algoritmo proporcionado en la pregunta:
Daré una explicación para este:
fuente
05AB1E , 5 bytes
Puerto de la respuesta MathGolf de @ JoKing .
Pruébelo en línea o verifique los primeros 100 números .
Explicación:
fuente
Limpio , 31 bytes
La fórmula que todos usan.
Pruébalo en línea!
Limpio , 80 bytes
Mi enfoque inicial, devolviendo los primeros
n
artículos.Pruébalo en línea!
fuente
Pari / GP , 14 bytes
Pruébalo en línea!
Pari / GP , 14 bytes
Pruébalo en línea!
fuente
J , 30 bytes
Pruébalo en línea!
Devuelve una lista de los primeros
n
números.Obviamente, esta solución no es competitiva, pero quería probar un método basado en una matriz.
Explicación:
El argumento es
n
2 ,]
- agregar 2 a la entrada()@
- y usa esta lista para:i.
- cree una matrizn
x 2 con los números en el rango 0..2n-1:4 0$~]
-~
invierte los argumentos, entonces es] $ 4 0 - crea una matrizn
x 2 repitiendo 4 0-
reste la segunda matriz de la primera, de modo que la primera columna se "retrase" con 2 posiciones_5,./\
atravesar la matriz en grupos no superpuestos de 5 filas y unir las columnas[:,
desentrañar todo el conjunto2}.
- suelta los primeros 2 números{.
toma los primerosn
númerosJ , 9 bytes
Pruébalo en línea!
Devuelve el
n
elemento th.La respuesta del puerto de Arnauld
fuente
K (ngn / k) , 12 bytes
Pruébalo en línea!
fuente
-2+x+
->x-2-
Pepe , 65 bytes
Pruébalo en línea!
La respuesta del puerto de Jo King.
fuente
código de máquina x86, 16 bytes
Montaje:
Pruébalo en línea!
fuente
Rojo , 26 bytes
Pruébalo en línea!
La respuesta del puerto de Arnauld
fuente
Excel, 17 bytes
Nada inteligente Implementa la fórmula común.
fuente
C (gcc) POSIX, 20 bytes
Pruébalo en línea!
fuente
QBasic, 30 bytes
Da la entrada indexada 0 de la lista en pos
x
.Pruébalo en línea! (Tenga en cuenta que
?
se expandió aPRINT
porque el intérprete falla de lo contrario ...)fuente
C # (compilador interactivo de Visual C #) , 14 bytes
Pruébalo en línea!
La misma lógica que otras respuestas: 1 2
fuente
R , 25 bytes
Pruébalo en línea!
La respuesta del puerto de Robert S. (y solo agregando solo 4 bytes) gracias a que R es excelente en el manejo de vectores.
Emite los primeros n valores.
fuente
dc , 9 bytes
Pruébalo en línea!
El mismo método que la mayoría. Duplique la parte superior de la pila, agregue 2, mod 5, agregue al original (duplicado anteriormente), reste 2, imprima.
fuente
TI-BASIC, 11 bytes
La entrada está adentroa ( n ) .
Ans
.Salidas
Un puerto simple de las otras respuestas.
Nota: TI-BASIC es un lenguaje tokenizado. El recuento de caracteres no es igual al recuento de bytes.
fuente