Schreibe ein Programm oder eine Funktion , die, da eine ganze Zahl n
, eine Anordnung mit dem Konstrukt n
Dimensionen n
Länge, wobei jedes Element ein Identifizierer des eigenen Koordinaten. Das heißt, beginnend mit einem Array, füllen Sie es mit n
Arrays, wobei jedes Array n
mehr Arrays enthält, bis zu einer Tiefe von n-1
. Die Elemente der tiefsten Felder sind die Koordinaten, die beschreiben, wo sie sich im vollständigen Feld befinden.
Einige Beispiele für den Fall, dass meine Erklärung verwirrend war.
n = 1
["1"]
n = 2
[
["11", "12"],
["21", "22"]
]
n = 3
[
[
["111","112","113"],
["121","122","123"],
["131","132","133"]
],
[
["211","212","213"],
["221","222","223"],
["231","232","233"]
],
[
["311","312","313"],
["321","322","323"],
["331","332","333"]
]
]
Hier bedeutet "321", dass es sich um das 1. Element des 2. Elements des 3. Arrays handelt.
Regeln:
- Koordinaten und Dimension (
n
) können entweder mit 0 oder 1 indiziert werden - Sie können davon ausgehen
n
, dass beide Indizierungsoptionen einstellige Werte unter 10 aufweisen, um mehrdeutige Ausgaben zu vermeiden - IO ist flexibel.
- Insbesondere können Koordinaten Arrays, Strings usw. sein, solange sie klar sind. "321" => [3,2,1]
- Die Ausgabe kann Ganzzahlen in der Basis 10 mit oder ohne führende Nullen sein.
- Die Koordinaten können auf Wunsch in umgekehrter Reihenfolge angegeben werden, solange sie konsistent sind. 321 => 123
- Die Ausgabe muss nicht unbedingt eine Array-Struktur in Ihrer Sprache sein. Solange es eindeutige Markierungen für den Anfang eines Arrays, das Ende eines Arrays und zum Trennen von Elementen gibt.
- Die Ausgabe für
n=1
kann nur 1 sein - Wenn Ihre Ausgabe untypisch ist, stellen Sie sicher, dass Sie das Format erklären.
- Das ist Code-Golf, also gewinnt die kürzeste Lösung in jeder Sprache!
data L a = L [L a] | E a
.Int -> [String]
oderInt -> [[String]]
so haben, je nachdem, wie der Eingang lautetAntworten:
Dyalog APL ,
53 Bytes-2 Bytes dank FrownyFrog
Probieren Sie es online!
⍳
gibt alle Indizes in der Form eines Arrays an. zB 2 3 .⍴
Formt das rechte Argument so um, dass es der Größe des linken Arguments entspricht.⍨
macht beides zum richtigen argument.quelle
Python 3 , 56 Bytes
Probieren Sie es online!
Mr. Xcoder sparte 2 Bytes beim Umstieg auf Python 3 für das Entpacken mit einem Stern.
quelle
f=lambda n,*l:len(l)//n*l or[f(n,*l,k)for k in range(n)]
funktioniert das für 56 Bytes.Wolfram Language (Mathematica) ,
3222 Bytes-10 Bytes dank @alephalpha
Probieren Sie es online!
quelle
J , 18 Bytes
Probieren Sie es online!
Iterative Lösung, kein eingebautes kartesisches Produkt. So sieht Peak J aus.
quelle
Gelee ,
87 BytesProbieren Sie es online!
Erläuterung
Verwenden Sie Argument 2 als Beispiel.
Wenn
¡
nicht das richtige Argument für Iterationen für Dyaden geändert würde, wären dies 4 Bytes:ṗs³¡
quelle
1
gültig ist?J, 13 Bytes
Probieren Sie es online!
Interessanterweise ist dies so viel länger als die APL-Antwort (obwohl ich möglicherweise keine bessere Übersetzung sehen kann)
Erläuterung
quelle
#.inv
ist sehr klug, +1.MATLAB,
928955 BytesIch habe eine andere Antwort, nachdem ich die Regeln der Herausforderung erneut gelesen habe, aber ich lasse den vorherigen Versuch unten, da er anders ist und immer noch Spaß macht.
Erläuterung
Dies gibt ein n-dimensionales Array von Strings aus, die mit 0 indiziert sind.
Vorherige Antwort (89 Bytes)
Mein erstes Golf! Dies kann wahrscheinlich mehr reduziert werden, aber ich dachte, ich würde posten, was ich habe.
Erläuterung
Gibt am Ende x aus, um eine Lösung zu erhalten
Ähnlich wie bei anderen MATLAB-Posts ist die Ausgabe ein n-dimensionales Array, außer dass zur Anzeige der Koordinaten Zahlen verwendet werden. Es funktioniert für jeden Wert, obwohl die Schleifen in MATLAB schlecht sind und sich um n = 8 deutlich verlangsamen.
Edit: -2 Bytes dank Luis Mendo. Das letzte Semikolon wurde ebenfalls entfernt, um die Ausgabe zu drucken.
quelle
length
durchnnz
sparen ein paar Bytes. Gemäß den PPCG-Regeln muss der Code auch eine tatsächliche Ausgabe erzeugen, indem er normalerweise in STDOUT angezeigt wird (es reicht nicht aus, die Ausgabe in einer Variablen zu speichern), oder es muss eine Funktion sein, die die Ausgabe zurückgibtRust ,
201176167166154 BytesProbieren Sie es online!
Der Ausgabetyp ist ein Summentyp mit zwei Varianten, da die Sprache streng typisiert ist.
L
Dies kann entweder ein Listentyp sein, der diesen Summentyp enthält, oderS
ein Ergebnistyp (eine Zeichenfolge). Das Ergebnis kann so aussehen.Auch neu formatiert mit
rustfmt
:quelle
R , 102 Bytes
Probieren Sie es online!
which
Array-Indizierungquelle
which
ist das, wonach ich gesucht habe, danke! 9 BytesJava 10, 144 Bytes
Die Lösung ist Methode
f
. Es wird eine Zeichenfolgendarstellung des Arrays erstellt.Probieren Sie es online
Ungolfed
Danksagung
quelle
Object[]
mitvar
. Ich denke auch, dass dieserelse
Block unnötig ist, wie Sie esreturn
inif
Block haben.05AB1E , 7 Bytes
Probieren Sie es online!
Erläuterung
quelle
JavaScript (Node.js) ,
626058 BytesProbieren Sie es online! Der Ausgang ist 0-indiziert. Bearbeiten: 2 Bytes dank @JoKing und weitere 2 Bytes dank @Arnauld gespeichert.
quelle
MATLAB,
116108104 BytesAngesichts der Affinität von MATLAB zu mehrdimensionalen Matrizen muss es meiner Meinung nach einen kürzeren Weg geben, dies zu tun ... Vielen Dank an Luis für die 4 Bytes, die von einigen Kürzungen stammen
Erläuterung
Die Ausgabe ist ein n-dimensionales Zellenarray, wobei jedes Element ein Array der Koordinatenwerte ist. Funktioniert für jeden
n
aufgrund der numerischen Array-Ausgabe ohne Mehrdeutigkeiten, solange einn^(n+1)
Element-Array im RAM gespeichert werden kann!quelle
Holzkohle , 26 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Eingabe
n
.Generieren Sie alle
nⁿ
n
-stelligen Zahlen in der Basisn
.Teilen Sie sie
n
mal in einn
eindimensionales Array auf, wobei jede Dimension eine Größe hatn
.Drucken Sie das Array. Der Standardausgabeformat jedes Element in einer eigenen Zeile ist, dann wird jeder Block von
n
Zeilen durch eine Leerzeile beendet ist, dann wird jeder Block vonn
Blöcken vonn
Zeilen wird durch eine zweite Leerzeile beendet ist , und so weiter bis zun-1
Leerzeilen auf der obersten Ebene .quelle
Gelee , 7 Bytes
Probieren Sie es online!
quelle