Herausforderung:
Hier haben wir die ersten 100 Elemente einer Sequenz:
6,5,4,3,2,1,66,65,64,63,62,61,56,55,54,53,52,51,46,45,44,43,42,41,36,35,34,33,32,31,26,25,24,23,22,21,16,15,14,13,12,11,666,665,664,663,662,661,656,655,654,653,652,651,646,645,644,643,642,641,636,635,634,633,632,631,626,625,624,623,622,621,616,615,614,613,612,611,566,565,564,563,562,561,556,555,554,553,552,551,546,545,544,543,542,541,536,535,534,533,...
Wie ist diese Sequenz aufgebaut? Wir haben zuerst die Zahl im Bereich [6, 1]
(alle möglichen Werte eines einzelnen Würfels vom höchsten zum niedrigsten). Wir haben dann die Zahlen [66..61, 56..51, 46..41, 36..31, 26..21, 16..11]
(alle möglichen zusammengesetzten Werte von zwei Würfeln vom höchsten zum niedrigsten). Usw.
Dies ist auf die Sequenz OEIS bezogenen A057436: Enthält Ziffern 1 bis 6 nur , aber mit allen Zahlen mit gleicher Menge von Ziffern sortierten nach hinten in der Sequenz.
Die Herausforderung besteht darin, eine dieser drei Optionen für Ihre Funktion / Ihr Programm in der oben angegebenen Reihenfolge auszuwählen:
- Nehmen Sie eine Eingabe und geben Sie den -ten Wert dieser Sequenz aus, wobei diese entweder 0-indiziert oder 1-indiziert sein kann.
- Nehmen Sie eine Eingabe und geben Sie die ersten oder Werte dieser Sequenz aus.
- Die Werte aus der Sequenz unbegrenzt ausgeben.
Natürlich kann jedes vernünftige Ausgabeformat verwendet werden. Könnte als Zeichenfolgen / Ganzzahlen / Dezimalzahlen / etc. Sein; könnte als (unendliche) Liste / Array / Stream / etc. sein; könnte mit Leerzeichen / Komma / Zeilenvorschub / anderem Trennzeichen nach STDOUT ausgegeben werden; usw. usw. Bitte geben Sie an, welche E / A und welche Option Sie in Ihrer Antwort verwenden!
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln mit Standard-E / A-Regeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp, verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu (z. B. TIO ).
- Außerdem wird dringend empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.
Hier einige größere Testfälle, wenn Sie Option 1 wählen:
n 0-indexed output 1-indexed output
500 5624 5625
750 4526 4531
1000 3432 3433
9329 11111 11112
9330 666666 11111
9331 666665 666666
10000 663632 663633
100000 6131232 6131233
Antworten:
Gelee , 5 Bytes
Probieren Sie es online!
1-indizierter n-ter Wert.
quelle
Perl 6 ,
2423 Bytes-1 byte dank nwellnhof
Probieren Sie es online!
Gibt die durch Leerzeichen / Zeilenumbrüche voneinander getrennte Sequenz aus. Oder für ein paar Bytes mehr können wir stattdessen eine faule unendliche Liste haben, in die wir indizieren können.
Perl 6 , 27 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Python 2 ,
393834 BytesProbieren Sie es online!
Gibt eine 1-indizierte Zahl aus
quelle
R , 43 Bytes
Probieren Sie es online!
Druckt die Sequenz auf unbestimmte Zeit
quelle
6 5 4 3 2 166 65 64...
Bash, 31 Bytes
TIO
Update von Kommentaren, der n-te Wert 1-indiziert, + GNU-Tools + Perl, 64 Bytes, 7 Bytes dank @manatwork gespeichert
64 Bytes
quelle
bc<<<obase=6\;$1
. Aber wenn Sie zu wechselndc
, gibt es nichts zu entkommen:dc<<<6o$1p
.dc<<<6o$1p|perl -pe '1while s/(.)0/($1-1).6/e;s/0//'|tr 1-6 654321
MATL , 11 Bytes
Gibt die Werte auf unbestimmte Zeit aus.
Probieren Sie es online!
Erläuterung
quelle
Haskell,
3834 BytesEine unendliche Liste von Zahlen:
Probieren Sie es online!
Zwei frühere Lösungen, die unendliche Listen von Zeichenfolgen mit jeweils 38 Byte enthalten:
Probieren Sie es online!
Probieren Sie es online!
quelle
replicate
.JavaScript (ES6), 26 Byte
Probieren Sie es online!
quelle
Haskell , 28 Bytes
Probieren Sie es online!
Erzeugt eine unendliche Liste von Zahlen
l
. Verwenden<$>
und<*>
Ausschneiden eines Bytes:29 Bytes
Probieren Sie es online!
Die Vorgehensweise ähnelt der festen Eingabezeichenfolge "654321" für die Antwort " Alle Zeichenfolgen ausgeben" von Haskell und überspringt die leere Zeichenfolgenausgabe, indem sie an der Stelle geändert wird, an der sie vorangestellt ist.
30 Bytes
Probieren Sie es online!
quelle
0
(oder""
) anzufangen , aber ich habe keinen billigen Weg gefunden, es nicht im Ergebnis zu haben ...05AB1E , 10 Bytes
Gibt die Sequenz auf unbestimmte Zeit aus.
Probieren Sie es online!
Erläuterung
quelle
¸
am Anfang eine Liste erstellt wird, die eine leere Zeichenkette enthält. Und 2 Bytes kürzer als die Lösung, mit der ich die Testfälle generiert habe, also natürlich +1 von mir. :)Perl 5,
4037 Bytes-3Bytes dank @Xcali
37 Bytes
40 Bytes
quelle
Java (JDK) , 48 Byte
Probieren Sie es online!
Dies gibt das 1-indizierte n- te Element zurück.
Die Rekursion scheint das iterative Lambda zu schlagen.
Iterative Version, 49 Bytes
Probieren Sie es online!
quelle
Brachylog ,
1311 BytesDanke an Fatalize für 2 Bytes
Ausgänge auf unbestimmte Zeit. Probieren Sie es online!
Hier ist eine 14-Byte-Version, die die erste ausgibtn
Erläuterung
quelle
6~d{⟧₁∋}ᵐẉ⊥
. Sie beenden Ihr Programm im Grunde genommen mit "false", wodurch es gezwungen wird, alle Lösungen zu drucken.C # (.NET Core) , 38 Byte
Probieren Sie es online!
Gibt den n-ten Wert aus (1-basiert).
quelle
Japt, 14 Bytes
Es muss eine kürzere Lösung mit Funktionsmethoden und / oder kartesischem Produkt geben, aber (fürs Erste?) Das Beste, was ich verwalten kann, ist eine Portierung von Arnauld's JS-Lösung.
Probieren Sie es aus oder testen Sie Begriffe
0-1000
quelle
Wolfram Language (Mathematica) ,
8878 BytesProbieren Sie es online!
4 + 6 Bytes dank @IanMiller gespart
Liste ist 1 indiziert, gibt die n-te Nummer aus.
quelle
Mathematica, 56 Bytes
Erfordert übermäßig viel Speicher, um tatsächlich ausgeführt zu werden, da alle Zahlen in der Sequenz erstellt werden, deren Länge kleiner oder gleich der Eingabe ist (dh, es werden erstellt65( 6n- 1 )
quelle
Pip
-l
, 16 BytesGibt die Sequenz auf unbestimmte Zeit aus. Probieren Sie es online!
Erläuterung
Das
-l
Flag bedeutet, dass Listen mit jedem Element in einer eigenen Zeile gedruckt werden. Wenn ein Element selbst eine Liste ist, werden seine Elemente ohne Trennzeichen verkettet. ZB würde die Liste[1 [2 3] [4 [5 6]]]
als gedruckt werdenMit dem geklärt:
Nach der ersten Schleifeniteration
x
sieht es so aus[[6;6];[6;5];[6;4];...;[1;1]]
. nach der zweiten Iteration[[[6;6];6];[[6;6];5];[[6;6];4];...;[[1;1];1]]
; und so weiter. Wir brauchen uns keine Sorgen um die Reduzierung der Unterlisten zu machen, da dies-l
effektiv für uns erledigt wird.quelle
Kohle , 18 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. 1-indiziert. Erläuterung:
Eingang
n
Wiederholen, bis
n
Null ist.-n
Modulo reduzieren6
, dann das Ergebnis erhöhen und von rechts nach links ausgeben.Dekrement
n
und Ganzzahl teilen es durch6
.quelle
Retina 0,8,2 , 36 Bytes
Probieren Sie es online! Link enthält Testfälle. 1-indiziert. Erläuterung:
In Unary konvertieren. (Retina 1 würde hier 2 Bytes sparen.)
Wandle es durch wiederholtes DivMod in die bijektive Basis 6 um. Beachten Sie, dass die Verwendung von
+
bedeutet, dass die extrahierte Ziffer bei einer regulären Basis-6-Konvertierung immer eine Zahl von 1 bis 6 anstelle von 0 bis 5 ist. ((_{6})*
Ist schneller, kostet aber das Extrahieren des Quotienten durch Bytes.)Transponieren Sie die Ziffern so, dass die 6er zuerst und die 1er zuletzt stehen. (Es gibt keine 7er oder 0er, aber dies ermöglicht mir die Verwendung der
d
Verknüpfung.quelle
Cubix , 22 Bytes
Dadurch wird die Sequenz auf unbestimmte Zeit ausgegeben. Die allgemeine Idee ist, dass es eine Basisnummer hat, zu der 6-1 addiert wird. Für jede Addition wird das Ergebnis mit 10 multipliziert und an den unteren Rand des Stapels verschoben, um später in der Sequenz verwendet zu werden. Die Basis wird dann geknallt und die nächste Basis gestartet.
Probieren Sie es online!
Beobachten Sie es laufen
quelle
C # (.NET Core) , unendliches Drucken,
181 18088 Bytes.Leider friert es repl.it ein, anstatt in der Endlosversion wie geschrieben richtig auszugeben (ich glaube, es ist ein Fehler in repl.it, da es nicht so ausgegeben wird, wie es die Programmschleifen sollten) Computer. Wenn Sie einen Lesevorgang am Anfang der Schleife einfügen, funktioniert dies auch in repl.it.
Ausgaben an die Konsole, offensichtlich.
Auf jedem endlichen System wird der Code höchstwahrscheinlich irgendwann mit einem Speicherfehler abstürzen.Der Code wurde überarbeitet, um @danas Lambda zu verwenden.
Probieren Sie es online!
quelle
Viertens (viertens) , 63 Bytes
Probieren Sie es online!
0-indizierte Ausgänge n-ter Wert
Erläuterung
Wenn N kleiner als 6 ist, geben Sie den Absolutwert von N - 6 aus. Anderenfalls erhalten Sie den Quotienten und den Rest der Division von N durch 6. Rufen Sie die Funktion rekursiv für den Quotienten auf und rufen Sie sie dann für den Rest auf.
Code-Erklärung
quelle
APL (NARS), 27 Zeichen, 54 Byte
Übersetzen Sie die Lösung von Dana /codegolf//a/179980 in APL ... Test:
quelle
C #, Drucken von Anfang bis n, ??? Bytes
Dank an @dana für den Lambda-Ausdruck.
Vorgang: Führen Sie den Befehl mit dem Argument 0 in der Befehlszeile aus, das der Ganzzahl entspricht, bis zu der Sie zählen möchten. (Es sollte beachtet werden, dass dies
a[0]
ein Verweis auf das ansonsten nicht erwähnte Befehlszeilenarray args ist, und ich weiß nicht, wie ich es zählen soll.)quelle