introduction
Un xénodrome en base n est un entier où tous ses chiffres en base n sont différents. Voici quelques séquences OEIS de xénodromes.
Par exemple, dans la base 16, FACE
, 42
et FEDCBA9876543210
quelques xenodromes (qui sont 64206
, 66
et 18364758544493064720
en base 10), mais 11
et DEFACED
ne sont pas.
Défi
Étant donné une base d'entrée, n , sortez tous les xénodromes pour cette base dans la base 10 .
La sortie doit être dans l'ordre du plus petit au plus grand. Il doit être clair où un terme dans la séquence se termine et un nouveau commence (par exemple, il [0, 1, 2]
est clair où il 012
ne l'est pas.)
n sera un entier supérieur à 0.
Clarifications
Ce défi fait IO spécifiquement dans la base 10 pour éviter de manipuler des entiers et leur base comme des chaînes. Le défi consiste à gérer de manière abstraite n'importe quelle base. En tant que tel, j'ajoute cette règle supplémentaire:
Les entiers ne peuvent pas être stockés sous forme de chaînes dans une base autre que la base 10.
Votre programme devrait être en mesure de gérer théoriquement un n élevé s'il n'y avait pas de temps, de mémoire, de précision ou d'autres restrictions techniques dans la mise en œuvre d'un langage.
C'est le code-golf , donc le programme le plus court, en octets, gagne.
Exemple d'entrée et de sortie
1 # Input
0 # Output
2
0, 1, 2
3
0, 1, 2, 3, 5, 6, 7, 11, 15, 19, 21
4
0, 1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 18, 19, 24, 27, 28, 30, 33, 35, 36, 39, 44, 45, 49, 50, 52, 54, 56, 57, 75, 78, 99, 108, 114, 120, 135, 141, 147, 156, 177, 180, 198, 201, 210, 216, 225, 228
ssize_t
. Est-ce que la rupture de cette manière est acceptable?Réponses:
Pyth , 8 octets
Filtre les nombres dans [0, n ^ n - 1] s'il n'y a pas d'éléments en double dans la base n . La conversion de base en Pyth fonctionnera avec n'importe quelle base, mais comme il s'agit d'une liste de nombres qui augmente très rapidement, il sera finalement impossible de stocker les valeurs en mémoire.
Essayez-le en ligne!
Explication:
la source
Python 2, 87 octets
Imprime des lignes vierges supplémentaires pour les non-xénodromes:
la source
Gelée ,
98 octetsMerci à @JonathanAllan d'avoir joué au golf sur 1 octet!
Essayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça fonctionne
la source
Gelée , 12 octets
TryItOnline!
Fonctionnera pour tout
n
, avec suffisamment de mémoire, la conversion de base de Jelly n'est pas restrictive.Comment?
la source
JavaScript (ES7), 86 octets
la source
1
(devrait produire[0]
, mais RangeErrors.)37
si la précision n'était pas un problème, ce qui, je pense, le rend invalide ...n
de1
à13
avant que la précision à virgule flottante ne la tue.Perl 6 , 47 octets
Renvoie un Seq . ( Seq est un wrapper Iterable de base pour les itérateurs )
Avec une entrée de
16
cela prend 20 secondes pour calculer le 53905ème élément de la Seq (87887
).Étendu:
la source
Lot,
204200 octetsNe fonctionnera pas pour n> 9 car Batch n'a qu'une arithmétique 32 bits. Idéalement, lot évalue
f &= b ^= f = 1 << j % n
commef = 1 << j % n, b = b ^ f, f = f & b
plutôt quef = f & (b = b ^ (f = 1 << j % n))
.la source
Mathematica,
5948 octetsContient le caractère U + F4A1 "Usage privé"
Explication
Générez
{1, 2, ..., n^n}
. Soustrayez 1. (rendements{0, 1, ..., n^n - 1}
)Une fonction booléenne:
True
si chaque chiffre apparaît au plus une fois dans la basen
.Dans la liste
{0, 1, ..., n^n - 1}
, sélectionnez ceux qui donnentTrue
lorsque la fonction booléenne ci-dessus est appliquée.Version 59 octets
la source
Mathematica,
4855 octets(Le triple espace entre les
x
s doit être remplacé par le caractère à 3 octets \ uF4A1 pour que le code fonctionne.)Fonction sans nom d'un seul argument. Plutôt que de tester des entiers pour la xénodromicité, il génère simplement toutes les permutations possibles des sous-ensembles des chiffres autorisés (ce qui évite automatiquement la répétition) et convertit les entiers correspondants en base 10. Chaque xénodrome est généré deux fois, avec et sans un 0 en tête;
Union
supprime les doublons et trie la liste pour démarrer.la source
2
. La fonction donne{0, 1}
. Je crois que vous avez besoinPermutations[Range@#-1, #]
deSubsets[Range@#-1]
.