Les numéros de fusil de chasse sont une séquence avec une définition assez simple mais une structure intéressante. Commencez avec les nombres naturels:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...
Maintenant, prenez tous les nombres aux indices divisibles par 2 , regroupez-les en paires et échangez les nombres de chaque paire:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ...
^ ^ ^ ^ ^ ^ ^
<---> <---> <-----> <----
1, 4, 3, 2, 5, 8, 7, 6, 9, 12, 11, 10, 13, 16, ...
Faites maintenant la même chose avec les indices divisibles par 3 :
1, 4, 3, 2, 5, 8, 7, 6, 9, 12, 11, 10, 13, 16, ...
^ ^ ^ ^
<------> <--------->
1, 4, 8, 2, 5, 3, 7, 6, 10, 12, 11, 9, 13, 16, ...
Et puis pour 4 , 5 , 6 et ainsi de suite:
1, 4, 8, 2, 5, 3, 7, 6, 10, 12, 11, 9, 13, 16, ...
1, 4, 8, 6, 5, 3, 7, 2, 10, 12, 11, 14, 13, 16, ...
1, 4, 8, 6, 12, 3, 7, 2, 10, 5, 11, 14, 13, 16, ...
1, 4, 8, 6, 12, 14, 7, 2, 10, 5, 11, 3, 13, 16, ...
...
Après k ces étapes, les k + 1 premiers nombres seront fixés. Ainsi, nous pouvons définir la séquence infinie de nombres Shotgun comme la limite permettant à k d’ aller à l’infini. Les 66 premiers numéros sont:
1, 4, 8, 6, 12, 14, 16, 9, 18, 20, 24, 26, 28, 22, 39, 15, 36, 35, 40, 38, 57, 34, 48, 49, 51, 44,
46, 33, 60, 77, 64, 32, 75, 56, 81, 68, 76, 58, 100, 55, 84, 111, 88, 62, 125, 70, 96, 91, 98, 95,
134, 72, 108, 82, 141, 80, 140, 92, 120, 156, 124, 94, 121, 52, 152, 145, ...
Fait amusant: bien qu'elle n'ait été obtenue qu'en permutant les nombres naturels, cette séquence ne contient aucun nombre premier.
Le défi
À partir d’un nombre entier n > 0
, trouvez le n
numéro du fusil de chasse. Vous pouvez écrire un programme ou une fonction en prenant une entrée via STDIN (ou l’alternative la plus proche), un argument de ligne de commande ou une argumentation de fonction, puis renvoyer la sortie ou l’imprimer sur STDOUT (ou l’alternative la plus proche).
C'est le code de golf, donc la soumission la plus courte (en octets) gagne.
Classements
Cela donne plus de réponses que je ne le pensais, ainsi que plusieurs personnes en compétition dans la même langue. Voici donc un extrait de pile permettant de générer à la fois un classement régulier et un aperçu des gagnants par langue.
Pour vous assurer que votre réponse apparaît, commencez votre réponse par un titre, en utilisant le modèle Markdown suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes
10
, 21
, 25
et 30
ne semble pas non plus , par exemple.
k
troisième itération, le k
dixième élément du tableau est transposé à la 2k
dixième position et ne sera pas touché à nouveau avant la dernière 2k
itération, moment où il sera transposé à la 4k
vingtième position à l'infini. Un nombre premier n'est pas transposé jusqu'à ce que son tour arrive, pour ainsi dire, alors tous les nombres premiers sont mélangés. Mais nous pouvons facilement dresser une liste des victimes innocentes en imprimant simplement le premier élément à transposer à la deuxième itération et à chaque itération étrange. La liste est la suivante: 2, 3, 5, 7, 10, 11, 13, 21, 17, 19, 30, 23, 27, 25, 29, 31, 45, 42, 37, 54, 41, 43, 65, ...