Os números inteiros não negativos estão cansados de sempre ter os mesmos dois * vizinhos, então eles decidem misturar um pouco as coisas. No entanto, eles também são preguiçosos e querem ficar o mais próximo possível de sua posição original.
Eles vêm com o seguinte algoritmo:
- O primeiro elemento é 0.
- O elemento é o menor número que ainda não está presente na sequência e não é um vizinho do elemento .
Isso gera a seguinte sequência 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
é o primeiro elemento 1
é o menor número ainda não na sequência, mas é um vizinho de 0
. O próximo menor número é 2
, portanto, é o segundo elemento da sequência. Agora, os números restantes são 1,3,4,5,6,...
, mas como ambos 1
e 3
são vizinhos de 2
, 4
é o terceiro membro da sequência. Como 1
não é um vizinho 4
, ele pode finalmente tomar seu lugar como quarto elemento.
A tarefa
Escreva uma função ou programa no menor número de bytes possível, o que gera a sequência acima.
Você pode
- produzir a sequência infinitamente,
- pegue uma entrada e retorne o elemento da sequência, ou
- pegue uma entrada e retorne os primeiros elementos da sequência.
A indexação zero ou uma é boa caso você escolha uma das duas últimas opções.
Você não precisa seguir o algoritmo fornecido acima; qualquer método que produz a mesma sequência é adequado.
Inspirado pelo Code Golf, a melhor permutação . Acontece que este é A277618 .
* Zero tem literalmente apenas um vizinho e realmente não se importa.
Respostas:
JavaScript (ES6), 13 bytes
Retorna a th termo da sequência.n
Experimente online!
Quão?
Isso calcula:
fonte
Python 2 , 20 bytes
Experimente online!
fonte
MathGolf , 5 bytes
Experimente online!
Alguma simetria agradável aqui. Retorna o
nth
elemento da sequência.Explicação:
fonte
Geléia , 5 bytes
Experimente online!
Ir vai gadget obscuro embutido!
fonte
Wolfram Language (Mathematica) , 14 bytes
Experimente online!
Imprime o n-ésimo número zero na seqüência.
fonte
R ,
252321 bytes-2 bytes graças a Jo King
Experimente online!
nth
Elemento de saída em sequência.fonte
dzaima / APL , 9 bytes
Resposta do porto de Arnauld.
Experimente online!
fonte
Pip , 14 bytes
Ou, a fórmula que todos estão usando, para 12 bytes :
fonte
Lisp comum , 67 bytes
Experimente online!
fonte
(defun x(n)(+(mod(+ n 2)5)(- n 2)))
, ou(lambda(n)(+(mod(+ n 2)5)(- n 2)))
basta: retornar o nono termo, em vez de uma sequência de termos.Japonês , 8 bytes
Intérprete Japt
Uma porta direta da resposta Javascript de Arnauld. A versão vinculada percorre os primeiros n elementos, mas se o
-m
sinalizador for removido, ele ainda é válido e imprime o enésimo elemento.Para fins de comparação, aqui está a versão ingênua que implementa o algoritmo fornecido na pergunta:
Vou dar uma explicação para este:
fonte
05AB1E , 5 bytes
Porto da resposta MathGolf do @ JoKing .
Experimente online ou verifique os 100 primeiros números .
Explicação:
fonte
Limpo , 31 bytes
A fórmula que todo mundo está usando.
Experimente online!
Limpo , 80 bytes
Minha abordagem inicial, retornando os primeiros
n
itens.Experimente online!
fonte
Pari / GP , 14 bytes
Experimente online!
Pari / GP , 14 bytes
Experimente online!
fonte
J , 30 bytes
Experimente online!
Retorna uma lista dos primeiros
n
númerosEssa solução é obviamente não competitiva, mas eu queria tentar um método baseado em array.
Explicação:
O argumento é
n
2 ,]
- acrescente 2 à entrada()@
- e use esta lista para:i.
- crie uma matrizn
x 2 com os números no intervalo 0..2n-1:4 0$~]
-~
inverte os argumentos, então é] $ 4 0 - cria matrizn
x 2 repetindo 4 0-
subtrair a segunda matriz da primeira, para que a primeira coluna seja "atrasada" com 2 posições_5,./\
atravessar a matriz em grupos sem sobreposição de 5 linhas e costurar as colunas[:,
percorrer toda a matriz2}.
- solte os 2 primeiros números{.
pegue os primeirosn
númerosJ , 9 bytes
Experimente online!
Retorna o
n
th elemento.Resposta do porto de Arnauld
fonte
K (ngn / k) , 12 bytes
Experimente online!
fonte
-2+x+
->x-2-
Pepe , 65 bytes
Experimente online!
Resposta do porto de Jo King.
fonte
código de máquina x86, 16 bytes
Montagem:
Experimente online!
fonte
Vermelho , 26 bytes
Experimente online!
Resposta do porto de Arnauld
fonte
Excel, 17 bytes
Nada inteligente. Implementa a fórmula comum.
fonte
POSIX C (gcc) , 20 bytes
Experimente online!
fonte
QBasic, 30 bytes
Dá a entrada indexada em 0 da lista na pos
x
.Experimente online! (Observe que
?
foi expandido paraPRINT
porque o intérprete falha de outra maneira ...)fonte
C # (compilador interativo do Visual C #) , 14 bytes
Experimente online!
Mesma lógica que as outras respostas: 1 2
fonte
R , 25 bytes
Experimente online!
Resposta de Port of Robert S. (e apenas adicionando apenas 4 bytes) graças ao R ser excelente no manuseio de vetores.
Produz os primeiros n valores.
fonte
dc , 9 bytes
Experimente online!
Mesmo método que a maioria. Duplique o topo da pilha, adicione 2, mod 5, adicione ao original (duplicado anteriormente), subtraia 2, imprima.
fonte
TI-BASIC, 11 bytes
A entrada é noa ( n ) .
Ans
.Saídas
Uma porta simples das outras respostas.
Nota: TI-BASIC é um idioma tokenizado. Contagem de caracteres não é igual à contagem de bytes.
fonte