Défi
Étant donné un entier n ≥ 4 , émettez une permutation des entiers [0, n-1] avec la propriété qu'aucun deux entiers consécutifs (entiers avec différence absolue 1) ne sont l'un à côté de l'autre.
Exemples
- 4 → [1, 3, 0, 2]
- 5 → [0, 2, 4, 1, 3]
- 6 → [0, 2, 4, 1, 3, 5]
- 7 → [0, 2, 4, 1, 5, 3, 6]
Vous pouvez utiliser 1-indexation à la place (en utilisant des entiers [1, n] au lieu de [0, n-1] ).
Votre code doit s'exécuter en temps polynomial en n , vous ne pouvez donc pas essayer toutes les permutations et tester chacune d'elles.
[[1,3],[0,2]]
un format de sortie acceptable?Réponses:
Gelée ,
32 octetsTrie les entiers dans [1, ..., n] par leur LSB.
Essayez-le en ligne!
la source
Þ
tri stable, car il est implémenté à l'aide de lasorted
fonction Python , qui est garantie d'être stable .Python 2 , 32 octets
Essayez-le en ligne!
la source
Python 3 ,
40, 38 octetsEssayez-le en ligne!
Cela fonctionne dans le
O(n)
temps.Merci à Dennis d'avoir économisé 2 octets!
la source
Python 2 , 34 octets
Essayez-le en ligne!
Python 2 , 40 octets
Essayez-le en ligne!
la source
Haskell, 22 octets
f est une fonction de n qui renvoie une liste correctement ordonnée. J'utilise l'option 1-indexation.
la source
Octave , 17 octets
Essayez-le en ligne!
Cela utilise la même approche que beaucoup d'autres. Concatène deux vecteurs, un avec tout le nombre pair dans la plage inclusive 2 ... x , et tous les nombres impairs dans la plage inclusive 1 ... x . La syntaxe devrait être assez évidente, donc je ne l'expliquerai pas.
la source
3
et2
côte à côtef(4)
?JavaScript (ES6), 40 octets
Edit: 1 octet enregistré grâce à @Arnauld.
la source
Gaia , 2 octets
Essayez-le en ligne!
Ceci (simplement) orts orte les entiers dans la plage [1, entrée] par leur pa r ité.
la source
R ,
393635 octetsEssayez-le en ligne!
la source
05AB1E , 3 octets
Port de la réponse Python de DJMcMayhem et de la réponse Jelly de Dennis
Essayez-le en ligne!
Comment?
la source
Japt, 4 octets
Vous pouvez également remplacer
u
parv
pour obtenir une commande différente.Essayez-le
Ou, si nous pouvons sortir un tableau de 2 tableaux:
Essayez-le
la source
4
malheureusement; vous pouvez corriger le premier en changeantu
env
ouo
enõ
.Mathematica, 50 -> 47 -> 42 octets
Essayez-le en ligne!
Merci à user202729 pour avoir souligné le double potentiel d'optimisation Join [] créé par Flatten [] et l'utilisation de fonctions pures.
Je voudrais ajouter deux remarques.
1) Il est assez simple de construire une permutation spécifique sans succession descendante ou ascendante pour n> = 4 comme demandé n l'OP.
Il se compose de deux listes consécutives.
Pour n même, ce sont:
list1 = (2,4, ..., n / 2)
list2 = (1,3, ..., n / 2-1)
Pour n impair, nous avons:
list1 = (2,4, ..., Floor [n / 2])
list2 = (1,3, ..., Floor [n / 2])
Pour cet "algorithme", une seule décision doit être prise (n pair ou impair), le reste consiste simplement à écrire n nombres.
Une solution Mathematica possible est fournie en haut.
2) Une question connexe est de savoir combien de telles permations existent en fonction de n.
Mathematica, 124 octets
Essayez-le en ligne!
Exemple:
Compter le nombre de ces permutations est un problème standard.
Pour n = 4, il y en a 2: {{2,4,1,3}, {3,1,4,2}}
Pour n = 5, il y en a 14: {{1,3,5,2,4}, {1,4,2,5,3}, {2,4,1,3,5}, {2,4, 1,5,3}, {2,5,3,1,4}, {3,1,4,2,5}, {3,1,5,2,4}, {3,5,1, 4,2}, {3,5,2,4,1}, {4,1,3,5,2}, {4,2,5,1,3}, {4,2,5,3, 1}, {5,2,4,1,3}, {5,3,1,4,2}}
Le nombre a (n) de ces permutations augmente rapidement: 2, 14, 90, 646, 5242, 47622, 479306, 5296790, 63779034, ...
Pour les grands n, le rapport a (n) / n! semble approcher la limite 1 / e ^ 2 = 0,135335 ... Je n'ai pas de preuve stricte mais ce n'est qu'une conjecture à partir de preuves numériques. Vous pouvez tester cela en essayant d'exécuter le programme en ligne.
Le programme ci-dessus (basé sur la référence donnée ci-dessous) calcule ces nombres.
Vous pouvez trouver plus d'informations dans la séquence correspondante sur OEIS: A002464 . Problème de Hertzsprung: façons d'organiser n rois non attaquants sur un tableau n X n, avec 1 dans chaque ligne et colonne. Aussi nombre de permutations de longueur n sans successions croissantes ou décroissantes.
la source
[some text](the_link)
. En ce qui concerne le lien "Essayez-le en ligne" en particulier, le site Web https://tio.run/ qui est hébergé par notre propre @Dennis contient des liens vers toutes sortes de langages de programmation. Wolfram Language (Mathematica) est l'un d'entre eux. En haut, vous pouvez ensuite cliquer sur le bouton de lecture pour exécuter le code ou sur le bouton d'hyperlien pour copier "Essayez-le en ligne". liens (de balisage). Et vous pouvez diviser votre code en "Code" réel (votre soumission), avec un en-tête / pied de page facultatif pour (jolie-) impression d'un ou de plusieurs tests.JavaScript (Node.js) , 42 octets
Essayez-le en ligne!
JavaScript (Node.js) , 47 octets
Essayez-le en ligne!
la source
Rubis , 27 octets
Essayez-le en ligne!
Utilisation de l'indexation 1
la source
Espace , 161 octets
Voici la soumission officielle et non commentée: Essayez-la en ligne!
Essayez-le en ligne!
J'ai sacrifié quelques octets pour que le programme s'exécute sans aucune erreur, je pense que je pourrais perdre environ 7 à 8 octets, et il sortirait toujours correctement, mais cela produirait également des messages d'erreur, et personne ne veut ça.
Explication des octets complets:
la source
push_0, read_STDIN_as_int, push_0, retrieve
peut êtrepush_0, duplicate_0, read_STDIN_as_int, retrieve
d'économiser un octet. Et la première étiquette peut être vide avecNSSN
au lieu deNSSSN
(et la deuxième étiquette peut êtreNSSSN
; troisièmeNSSTN
et quatrièmeNSSSSN
). Cela devrait également économiser 8 octets. En outre, vous pouvez supprimer le premierJump_to_third_label
car vous avez déjà leSet_third_label
droit en dessous. Au total: 140 octets ; (ou avec commentaires: essayez-le en ligne .) -3 octets si vous supprimezNNN
exit.F # (Mono) , 27 octets
Essayez-le en ligne!
la source
Gol> <> , 14 octets
Essayez-le en ligne!
Exemple de programme complet et son fonctionnement
la source
J , 10 octets
Essayez-le en ligne!
Explication:
la source
Java 8, 56 octets
Réponse JavaScript du port de @Neil (ES6) .
Essayez-le en ligne.
Ancienne réponse de 66 octets:
Essayez-le en ligne.
Explication:
la source
Rubis, 27 octets
Comme dans cette réponse , les
n
premiers entiers sont triés par leur bit le moins significatif.Essayez-le en ligne!
la source