Les entiers non négatifs s'ennuient d'avoir toujours les mêmes deux * voisins, ils décident donc de mélanger un peu les choses. Cependant, ils sont également paresseux et veulent rester aussi près que possible de leur position d'origine.
Ils proposent l'algorithme suivant:
- Le premier élément est 0.
- L' élément est le plus petit nombre qui n'est pas encore présent dans la séquence et qui n'est pas un voisin de l' élément .
Cela génère la séquence infinie suivante:
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
est le premier élément. 1
est le plus petit nombre qui n'est pas encore dans la séquence, mais c'est un voisin de 0
. Le plus petit nombre suivant est 2
donc le deuxième élément de la séquence. Maintenant, les nombres restants sont 1,3,4,5,6,...
, mais comme les deux 1
et 3
sont voisins de 2
, 4
est le troisième membre de la séquence. Comme il 1
n'est pas voisin de 4
, il peut enfin prendre sa place de quatrième élément.
La tâche
Écrivez une fonction ou un programme en aussi peu d'octets que possible, ce qui génère la séquence ci-dessus.
Tu peux
- produire la séquence à l'infini,
- prendre une entrée et renvoyer l' élément de la séquence, ou
- prendre une entrée et renvoyer les premiers éléments de la séquence.
L'indexation à zéro ou à une seule est correcte si vous choisissez l'une des deux dernières options.
Vous n'avez pas besoin de suivre l'algorithme donné ci-dessus, toute méthode qui produit la même séquence est très bien.
Inspiré par Code golf la meilleure permutation . Il s'avère que c'est A277618 .
* Zero n'a littéralement qu'un seul voisin et ne s'en soucie pas vraiment.
Réponses:
JavaScript (ES6), 13 octets
Renvoie le ème terme de la séquence.n
Essayez-le en ligne!
Comment?
Cela calcule:
la source
Python 2 , 20 octets
Essayez-le en ligne!
la source
MathGolf , 5 octets
Essayez-le en ligne!
Une belle symétrie ici. Renvoie l'
nth
élément de la séquence.Explication:
la source
Gelée , 5 octets
Essayez-le en ligne!
Allez allez gadget obscur intégré!
la source
Wolfram Language (Mathematica) , 14 octets
Essayez-le en ligne!
Imprime le nième entier indexé zéro dans la séquence.
la source
R ,
252321 octets-2 octets grâce à Jo King
Essayez-le en ligne!
Produit l'
nth
élément en séquence.la source
dzaima / APL , 9 octets
Réponse du port d'Arnauld.
Essayez-le en ligne!
la source
Pip , 14 octets
Ou, la formule que tout le monde utilise, pour 12 octets :
la source
Lisp commun , 67 octets
Essayez-le en ligne!
la source
(defun x(n)(+(mod(+ n 2)5)(- n 2)))
ou(lambda(n)(+(mod(+ n 2)5)(- n 2)))
suffit: renvoyer le n-ième terme plutôt qu'une séquence de termes.Japt , 8 octets
Interprète Japt
Un port direct de la réponse Javascript d'Arnauld. La version liée parcourt les n premiers éléments, mais si l'
-m
indicateur est supprimé, il est toujours valide et imprime le nième élément à la place.À titre de comparaison, voici la version naïve qui implémente l'algorithme fourni dans la question:
Je vais donner une explication pour celui-ci:
la source
05AB1E , 5 octets
Port de la réponse MathGolf de @ JoKing .
Essayez-le en ligne ou vérifiez les 100 premiers numéros .
Explication:
la source
Nettoyer , 31 octets
La formule que tout le monde utilise.
Essayez-le en ligne!
Nettoyer , 80 octets
Mon approche initiale, retourner les premiers
n
articles.Essayez-le en ligne!
la source
Pari / GP , 14 octets
Essayez-le en ligne!
Pari / GP , 14 octets
Essayez-le en ligne!
la source
J , 30 octets
Essayez-le en ligne!
Renvoie une liste des premiers
n
nombresCette solution n'est évidemment pas compétitive, mais je voulais essayer une méthode basée sur un tableau.
Explication:
L'argument est
n
2 ,]
- ajouter 2 à l'entrée()@
- et utilisez cette liste pour:i.
- créer une matricen
x 2 avec les nombres dans la plage 0..2n-1:4 0$~]
-~
inverse les arguments, c'est donc] $ 4 0 - crée la matricen
x 2 en répétant 4 0-
soustraire la deuxième matrice de la première, de sorte que la première colonne soit "retardée" avec 2 positions_5,./\
parcourez la matrice en groupes de 5 rangées qui ne se chevauchent pas et cousez les colonnes[:,
défiler toute la gamme2}.
- déposez les 2 premiers chiffres{.
prenez les premiersn
chiffresJ , 9 octets
Essayez-le en ligne!
Renvoie le
n
th élément.Réponse du port d'Arnauld
la source
K (ngn / k) , 12 octets
Essayez-le en ligne!
la source
-2+x+
->x-2-
Pepe , 65 octets
Essayez-le en ligne!
Port de réponse de Jo King.
la source
code machine x86, 16 octets
Assemblée:
Essayez-le en ligne!
la source
Rouge , 26 octets
Essayez-le en ligne!
Réponse du port d'Arnauld
la source
Excel, 17 octets
Rien d'intelligent. Met en œuvre la formule commune.
la source
C (gcc) POSIX, 20 octets
Essayez-le en ligne!
la source
QBasic, 30 octets
Donne l'entrée indexée 0 de la liste à la pos
x
.Essayez-le en ligne! (Notez que cela a
?
été développéPRINT
car l'interprète échoue sinon ...)la source
C # (Visual C # Interactive Compiler) , 14 octets
Essayez-le en ligne!
Même logique que les autres réponses: 1 2
la source
R , 25 octets
Essayez-le en ligne!
Port de la réponse de Robert S. (et seulement en ajoutant seulement 4 octets) grâce à R étant excellent pour gérer les vecteurs.
Sort les n premières valeurs.
la source
dc , 9 octets
Essayez-le en ligne!
Même méthode que la plupart. Dupliquer le haut de la pile, ajouter 2, mod 5, ajouter à l'original (dupliqué plus tôt), soustraire 2, imprimer.
la source
TI-BASIC, 11 octets
Ans
Un simple portage des autres réponses.
Remarque: TI-BASIC est un langage à jetons. Le nombre de caractères n'est pas égal au nombre d'octets.
la source