Schreiben Sie eine Funktion f (n, k), die den k-dimensionalen Countdown von n anzeigt.
Ein 1-dimensionaler Countdown von 5 sieht aus wie
54321
Ein 2-dimensionaler Countdown von 5 sieht so aus
54321
4321
321
21
1
Schließlich sieht ein dreidimensionaler Countdown von 5 aus
54321
4321
321
21
1
4321
321
21
1
321
21
1
21
1
1
Formale Definition
Der eindimensionale Countdown von jedem n ist eine einzelne Zeile, in der die Ziffern n, n-1, ..., 1 verkettet sind (gefolgt von einer neuen Zeile).
Für jedes k ist der k-dimensionale Countdown von 1 die einzelne Zeile
1
Für n> 1 und k> 1 ist ein k-dimensionaler Countdown von n ein (k-1) -dimensionaler Countdown von n, gefolgt von einem k-dimensionalen Countdown von n-1.
Eingang
Zwei positive ganze Zahlen k und n <= 9 in einem beliebigen Format.
Ausgabe
Der k-dimensionale Countdown von n mit einer neuen Zeile nach jedem eindimensionalen Countdown. Zusätzliche Zeilenumbrüche sind in der Ausgabe zulässig.
Wertung
Standard Golf Scoring.
Bonus Beispiel
Hier ist ein Beispiel mit k> n, einem 4-dimensionalen Countdown von 3 (mit zusätzlichen Kommentaren, die in tatsächlichen Lösungen nicht enthalten sein sollen):
-- 3-dimensional countdown from 3
321
21
1
21
1
1
-- 4-dimensional countdown from 2:
---- 3-dimensional countdown from 2:
21
1
1
---- 4-dimensional countdown from 1:
1
Klarstellungen:
Ziffern in einer Zeile müssen nicht benachbart sein, aber sie müssen gleichmäßig verteilt sein.
Sie können ein vollständiges Programm schreiben, anstatt nur eine Funktion.
Antworten:
Python, 60 Bytes
Teste es auf Ideone .
Wie es funktioniert
Der k- dimensionale Countdown von n kann mit einem einzigen Basisfall definiert werden:
Gibt unter Verwendung der rekursiven Definition aus der Frage
f(n,k)
zurück,f(n,k-1)+f(n-1,k)
wenn n> 1 und k> 1 sind ; Andernfalls werden die letzten n + 1 Zeichen von zurückgegeben'987654321\n'
.quelle
Gelee , 8 Bytes
Dies ist ein vollständiges Programm, das n und k als Befehlszeilenargumente erwartet .
Probieren Sie es online!
Wie es funktioniert
quelle
Y
anstelle vonp⁷
?5, 1
wird angezeigt[54321]
.Javascript,
403837 BytesDank @ edc65 1 Byte gespart:
Vorherige Antworten
38 Bytes dank @Neil:
40 Bytes:
quelle
||
anstelle von verwenden?n:
. Speichern Sie ein weiteres Byte, indem Sie eine wörtliche Newline in`
s anstelle von verwenden'\n'
.f=(n,k)=>n?(k?f(n,k-1):n)+f(n-1,k):k?``:`\n`
*
stattdessen&&
.Python,
7675 Bytes-1 Byte dank @ Sp3000
Caries aus dem Verfahren , wie im OP beschrieben schließt sich die abnehmenden
n
Ergebnisse fürk-1
auf newlines mit einer Base der Rekursion der'n...1'
Zeichenfolge , wennk
ist1
(k
nicht mehr als1
da wir positiven garantiertk
Eingang).Testfälle auf ideone
quelle
Python,
868180 Bytesd
ist die Anzahl der Dimensionen,n
ist die Countdown-Nummer.Werde bald eine Erklärung posten.
EDIT # 1: Es wurde in Lambda geändert.
EDIT # 2: 1 Byte dank @DestructibleWatermelon gespeichert.
quelle
Haskell, 57 Bytes
Anwendungsbeispiel:
5 # 3
->"\n54321\n4321\n321\n21\n1\n4321\n321\n21\n1\n321\n21\n1\n21\n1\n1"
.Eine direkte Umsetzung der Definition.
quelle
Schläger 215 Bytes
Testen:
quelle
54321
erscheint es im 3D-Modus zweimal?λ
) immer weniger Bytes als die Verwendung vondefine
. Außerdem wurde als Eingabe fürn
eine Zahl angegeben, für die Sie die erstellen(range 1 n)
. Siehe auch über das Ersetzen voncond
durchif
, da Sie Bytes auf dem Computer speichernelse
.J,
383732 BytesDies ist eine Funktion, die k auf dem LHS und übernimmt n auf der rechten Seite .
5 Bytes mit Ideen von @ Adám gespeichert.
Verwendung
Erläuterung
quelle
Dyalog APL , 18 Bytes
Fordert zur Eingabe von n und dann von k auf .
~∘'0'⍤1
entferne (~
) die (∘
) Nullen ('0'
) aus den Zeilen (⍤1
) (nach Bedarf mit Leerzeichen auffüllen) von⍕
die Charakterdarstellung von(⌽⍳)⍤0⍣⎕
Die umgekehrten (⌽
) zählen bis (⍳
) jedes skalaren (⍤0
), wiederholten (⍣
) Eingabe (⎕
) Male⊢
auf⎕
numerische EingabeTryAPL online!
quelle
C 93 Bytes
Iterative Implementierung.
C
6765615652 BytesRekursive Implementierung
quelle
m
innerhalb desputs()
Anrufs mit"987654321"
.Batch, 117 Bytes
Port of Dennis ♦ 's Python-Antwort.
quelle
Ruby, 56 Bytes
Verwendung
Wenn Sie Lösungen anzeigen, sollten Sie "Kernel # puts" verwenden.
Beispiel:
quelle