Hinweis: Dies ist ein Versuch, die Permutationsfrage (n) von guest271314 zu recyceln.
Es gibt ein interessantes Muster, das sich bildet, wenn Sie die Unterschiede zwischen lexografisch sortierten Permutationen von Basis-10-Zahlen mit aufsteigenden eindeutigen Ziffern finden. Hat zum Beispiel 123
Permutationen:
123 132 213 231 312 321
Wenn Sie die Unterschiede zwischen diesen finden, erhalten Sie die Reihenfolge
9 81 18 81 9
Die alle durch neun teilbar sind (aufgrund der Ziffernsumme der Basis-10-Zahlen) und palindromisch sind.
Insbesondere wenn wir die nächste Nummer verwenden 1234
, erhalten wir die Sequenz
9 81 18 81 9 702 9 171 27 72 18 693 18 72 27 171 9 702 9 81 18 81 9
Dies erweitert die vorherige Sequenz und bleibt gleichzeitig um palindrom . Dieses Muster gilt immer, auch wenn Sie mehr als Zahlen verwenden, obwohl die Länge der Sequenz für Zahlen beträgt . Beachten Sie, dass wir zur Verwendung der obigen Zahlen nicht zu einer anderen Basis wechseln, sondern nur die Zahl mit multiplizieren , z. B. .n ! - 1 n 10 x [ 1 , 12 , 11 ] 10 = 1 ≤ 10 2 + 12 ≤ 10 1 + 11 ≤ 10 0 = 23110
0 to 9
Ihr Ziel ist es, diese Sequenz zu implementieren, indem Sie jedes Element als Vielfaches von neun zurückgeben. Zum Beispiel sind die ersten 23 Elemente dieser Sequenz:
1 9 2 9 1 78 1 19 3 8 2 77 2 8 3 19 1 78 1 9 2 9 1
Einige andere Testfälle (0 indiziert):
23 => 657
119 => 5336
719 => 41015
5039 => 286694
40319 => 1632373
362879 => 3978052
100 => 1
1000 => 4
10000 => 3
100000 => 3
Regeln:
- Die Einreichung kann eine der folgenden sein:
- Ein Programm / eine Funktion, die eine Nummer annimmt und die Nummer an diesem Index zurückgibt, entweder 0 oder 1 indiziert.
- Ein Programm / eine Funktion, die eine Zahl annimmt und bis zum ten Index zurückkehrt, entweder 0 oder 1 indiziert.
- Ein Programm / eine Funktion, die die Sequenz unendlich ausgibt / zurückgibt.
- Das Programm sollte theoretisch in der Lage sein, theoretisch bis zum Element und darüber hinaus zu arbeiten, obwohl ich verstehe, ob Zeit- / Speicherbeschränkungen dies fehlschlagen lassen. Dies bedeutet insbesondere, dass Sie die Ziffern nicht verketten und als Basis 10 auswerten können, da so etwas wie falsch wäre.
- Dies ist Code-Golf , also gewinnt die kürzeste Implementierung für jede Sprache!
Anmerkungen:
- Dies ist OEIS A217626
- Ich biete eine Prämie von 500 für eine Lösung an, die die Elemente direkt berechnet, ohne die tatsächlichen Permutationen zu berechnen.
- Die Sequenz funktioniert für alle zusammenhängenden Ziffern. Zum Beispiel sind die Unterschiede zwischen den Permutationen von dieselben wie für .
quelle
3628799 => -83676269
Antworten:
Gelee , 9 Bytes
Probieren Sie es online aus! (drucke das n-te Element aus)
Probieren Sie es online aus! (20 erste Elemente)
Erläuterung:
(Jelly hat das eingebaute Element,
œ?
das die dritten
Permutation einer Liste in ungefähr linearer Zeit berechnet. Sehr nützlich.)quelle
Holzkohle , 71 Bytes
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung:
Holen Sie sich eine Liste mit der Eingabe und einer mehr als der Eingabe.
Wiederholen, bis beide Werte Null sind.
Führen Sie für beide Werte eine faktorielle Basisumrechnung durch. Dies ist das erste Mal, dass ich tatsächlich
≧
auf einer Liste verwendet habe!Löschen Sie das Ergebnis.
Schleife über jede faktorielle Basisnummer.
Machen Sie eine Liste der Ziffern von 0 bis Länge - 1.
Initialisieren Sie das Ergebnis in eine leere Liste.
Schleife über die Ziffern der faktoriellen Basisnummer.
Fügen Sie dem Ergebnis die nächste Permutationsziffer hinzu.
Entfernen Sie diese Ziffer aus der Liste.
Konvertieren Sie die Permutation als Basis-10-Zahl und subtrahieren Sie das bisherige Ergebnis davon.
Teilen Sie das Endergebnis durch 9 und werfen Sie es in eine Zeichenfolge.
quelle
Perl 6 , 82 Bytes
-2 Bytes dank Jo King
Probieren Sie es online aus!
0-indiziert. Zählt nicht alle Permutationen auf. Sollte theoretisch für alle n funktionieren, wird aber für n> 65536 mit "Zu viele Argumente im Reduzierungsarray" gerettet.
Die folgende 80-Byte- Version funktioniert für n bis zu 98! -2 und ist viel schneller:
Probieren Sie es online aus!
Die folgende 53-Byte- Version sollte theoretisch für alle n funktionieren, jedoch für n> = 20 mit "Weigerung, mehr als 20 Elemente zu permutieren".
Probieren Sie es online aus!
quelle
JavaScript (Node.js) , 134 Bytes
Probieren Sie es online aus!
1-indiziert.
@ guest271314 Die Meinung ist richtig. Die direkte Permutationsberechnung ist kürzer ...
Erläuterung
Ursprüngliche Lösung (159 Bytes)
Probieren Sie es online aus!
Link ist zu einer längeren Version für Leistung gemacht.
Array(n+1)
wirdArray(Math.min(n+1,15))
, um Demo zum Laufen zu bringen. Funktioniert theoretisch bis unendlich (bis zur Stapelgrenze in der Praxis).Erläuterung
Ich meine, es gibt zu viel zu erklären.
quelle
n
diese Lösung stackoverflow.com/a/34238979 die Möglichkeit, zwei benachbarte Permutationen oder Zahlendarstellungen von Permutationen direkt nach Index abzurufen, die beim Golfen den erforderlichen Code reduzieren sollten um die Ausgabe(f(n) - f(n-1))/9
für diesen ausgewählten Antworttyp gemäß der Regel "Ein Programm / eine Funktion, die eine Nummer nimmt und die Nummer an diesem Index zurückgibt, entweder 0 oder 1 indiziert" zu erzeugen . .Pyth,
1514 BytesGibt den n-ten Term zurück. Probieren Sie es hier aus .
quelle
J ,
44, 41 BytesProbieren Sie es online aus!
Hinweis: funktioniert auch für 10! Testfall, verliert dort aber etwas an Präzision ...
ursprüngliche Erklärung
quelle
JavaScript (ES6), 112 Byte
Sehr ähnlich dem Algorithmus von Shieru Asakoto .
Probieren Sie es online aus!
quelle