Einführung
Ein Xenodrom in der Basis n ist eine ganze Zahl, bei der alle Ziffern in der Basis n unterschiedlich sind. Hier sind einige OEIS-Sequenzen von Xenodromen.
Zum Beispiel in der Basis 16, FACE
, 42
und FEDCBA9876543210
sind einige xenodromes (Welche sind 64206
, 66
und 18364758544493064720
in der Basis 10), aber 11
und DEFACED
sind es nicht.
Herausforderung
Bei gegebener Eingabebasis n werden alle Xenodrome für diese Basis in Basis 10 ausgegeben .
Die Ausgabe sollte in der Reihenfolge der kleinsten bis größten sein. Es sollte klar sein, wo ein Begriff in der Sequenz endet und ein neuer beginnt (z. B. [0, 1, 2]
ist klar, wo 012
nicht).
n wird eine ganze Zahl größer als 0 sein.
Klarstellungen
Diese Challenge führt IO speziell in Basis 10 aus, um zu vermeiden, dass Ganzzahlen und ihre Basis als Zeichenfolgen behandelt werden. Die Herausforderung besteht darin, mit jeder Basis abstrakt umzugehen. Als solches füge ich diese zusätzliche Regel hinzu:
Ganzzahlen können nicht als Zeichenfolgen in einer anderen Basis als Basis 10 gespeichert werden.
Ihr Programm sollte theoretisch in der Lage sein, einigermaßen hohes n zu verarbeiten, wenn bei der Implementierung einer Sprache keine Zeit-, Speicher-, Genauigkeits- oder sonstigen technischen Einschränkungen bestehen.
Das ist Code-Golf , also gewinnt das kürzeste Programm in Bytes.
Beispiel für Ein- und Ausgabe
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
. Ist es akzeptabel, auf diese Weise zu brechen?Antworten:
Pyth , 8 Bytes
Filtert die Zahlen in [0, n ^ n - 1] so, dass die Basis n keine doppelten Elemente enthält . Die Basiskonvertierung in Pyth funktioniert mit jeder Basis, aber da es sich um eine sehr schnell wachsende Liste von Zahlen handelt, kann sie die Werte möglicherweise nicht im Speicher speichern.
Probieren Sie es online!
Erläuterung:
quelle
Python 2, 87 Bytes
Druckt zusätzliche Leerzeilen für Nicht-Xenodrome:
quelle
Gelee ,
98 BytesVielen Dank an @JonathanAllan für das Abschlagen von 1 Byte!
Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
Gelee , 12 Bytes
TryItOnline!
Funktioniert für alle
n
, sofern genügend Speicherplatz vorhanden ist. Jellys Basiskonvertierung unterliegt keinen Einschränkungen.Wie?
quelle
JavaScript (ES7), 86 Byte
quelle
1
[0]
37
wenn Präzision kein Problem wäre, was es meiner Meinung nach ungültig macht ...n
von1
bis,13
bevor die Gleitkommapräzision sie beendet.Perl 6 , 47 Bytes
Liefert eine Seq . ( Seq ist ein grundlegender Iterations- Wrapper für Iteratoren. )
Bei einer Eingabe von
16
dauert es 20 Sekunden, um das 53905. Element der Seq (87887
) zu berechnen .Erweitert:
quelle
Batch,
204200 BytesFunktioniert nicht für n> 9, da Batch nur 32-Bit-Arithmetik hat. Günstig bewertet Batch
f &= b ^= f = 1 << j % n
alsf = 1 << j % n, b = b ^ f, f = f & b
stattf = f & (b = b ^ (f = 1 << j % n))
.quelle
Mathematica,
5948 BytesEnthält das U + F4A1-Zeichen "Private Use"
Erläuterung
Generieren
{1, 2, ..., n^n}
. Subtrahiere 1. (Ausbeuten{0, 1, ..., n^n - 1}
)Eine Boolesche Funktion:
True
wenn jede Ziffer höchstens einmal in der Basis vorkommtn
.Wählen Sie aus der Liste
{0, 1, ..., n^n - 1}
diejenigen aus, die angeben,True
wann die obige Boolesche Funktion angewendet wird.59-Byte-Version
quelle
Mathematica,
4855 Bytes(Das dreifache Leerzeichen zwischen
x
s muss durch das 3-Byte-Zeichen \ uF4A1 ersetzt werden, damit der Code funktioniert.)Unbenannte Funktion eines einzelnen Arguments. Anstatt Ganzzahlen auf Xenodromizität zu testen, werden einfach alle möglichen Permutationen von Teilmengen der zulässigen Ziffern generiert (wodurch Wiederholungen automatisch vermieden werden) und die entsprechenden Ganzzahlen in Basis 10 konvertiert. Jedes Xenodrom wird zweimal generiert, sowohl mit als auch ohne führende 0.
Union
Entfernt die Duplikate und sortiert die zu startende Liste.quelle
2
. Die Funktion gibt{0, 1}
. Ich glaube du brauchstPermutations[Range@#-1, #]
stattSubsets[Range@#-1]
.