Geben Sie bei einer positiven Ganzzahl n
die N
eindimensionale Identität "Matrix" aus, bei der es sich um das N^N
Array handelt, bei 1
dem alle Komponenten der Indizes gleich und 0
ansonsten gleich sind . N^N
bedeutet N-by-N-by-N-by -...
1 -> [1]
2 -> [[1,0],[0,1]]
3 -> [[[1,0,0],[0,0,0],[0,0,0]],[[0,0,0],[0,1,0],[0,0,0]],[[0,0,0],[0,0,0],[0,0,1]]]
4 -> [[[[1,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]],[[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,1,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]],[[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,1,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]],[[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,1]]]]
Zum Beispiel, wenn a
die 4
-dimensional Identität „Matrix“, dann die einzigen Einträge mit 1
wären a[0][0][0][0]
, a[1][1][1][1]
, a[2][2][2][2]
, und a[3][3][3][3]
.
Das ist Code-Golf . Kürzeste Antwort in Bytes gewinnt. Es gelten Standardlücken .
code-golf
math
array-manipulation
integer
generation
Undichte Nonne
quelle
quelle
Antworten:
Oktave, 29 Bytes
Probieren Sie es online!
quelle
Gelee , 8 Bytes
Probieren Sie es online!
Oh, sieht so aus, als würde ich @Dennis wieder in seiner eigenen Sprache spielen :-)
Dies ist eine 1-Argument-Funktion (da das Standardausgabeformat von Jelly für verschachtelte Listen etwas mehrdeutig ist und die Spezifikation möglicherweise nicht als vollständiges Programm erfüllt).
Erläuterung
Um dies zu verstehen, ist es hilfreich, die Zwischenschritte zu betrachten. Bei einer Eingabe von 3 erhalten wir folgende Zwischenschritte:
[1,2,3]
(Eingabe, die implizit von der in einen Bereich gestellt wirdþ
)[[1,0,0],[0,2,0],[0,0,3]]
(Erstelle eine Tabelle mit[1,2,3]
, vergleiche, um Gleichheit zu erhalten[[1,0,0],[0,1,0],[0,0,1]]
, und multipliziere dann mit einem der Werte, die wir verglichen haben.)[[[1,0,0],[0,0,0],[0,0,0]],[[0,0,0],[0,2,0],[0,0,0]],[[0,0,0],[0,0,0],[0,0,3]]]
(die gleiche Idee nochmal)[[[1,0,0],[0,0,0],[0,0,0]],[[0,0,0],[0,1,0],[0,0,0]],[[0,0,0],[0,0,0],[0,0,1]]]
(Ersetzen Sie jedes Element durch sein Vorzeichen mitṠ
)Die Tatsache, dass die Eingabe eindimensional beginnt, bedeutet, dass wir eine Schleife (Eingabe-1) durchführen müssen, um Dimensionen (Eingabe-1) hinzuzufügen und eine eindimensionale Liste zu erstellen.
Unterhaltsame Tatsache: Dieses Programm enthält fünf Schnelldurchläufe hintereinander
¥þ’¡`
. (Ein Quick ist ein Modifikator für einen "Link" oder einen eingebauten Link, der zum Ändern seines Verhaltens oder zum Kombinieren mit einem anderen Link verwendet wird.)quelle
Mathematica, 30 Bytes
quelle
Table
ist eine neue Ergänzung. Die Mathematik braucht dort noch eine Singleton-Liste: tio.run/##y00sychMLv7/P83WsagosTLaKT8/…Array[Boole@*Equal,#~Table~{#}]&
, um mit Mathematik zu arbeiten. Ältere Versionen von Mathematica unterstützen keine Ganzzahl als zweites ArgumentTable
, und ich denke, Mathics basiert darauf.APL (Dyalog) , 10 Bytes
Probieren Sie es online!
1=
[ist] 1 gleich≢
die Nummer∘
von∪
einzigartige Elemente¨
in jedem⍳
die Indizes in einem Array mit den Dimensionen von⍴⍨
die Selbstumformung ( N Kopien von N ) von⎕
die Eingabe ( N ) [?]quelle
Gelee , 9 Bytes
Probieren Sie es online!
Wie es funktioniert
Es scheint schwierig zu sein, die Aufgabe direkt zu lösen (ich habe keinen Weg gefunden), aber es ist ziemlich einfach, Arrays mit den gleichen Zahlen und der gleichen Form zu konstruieren.
ð
macht die Kette dyadisch, und die Ganzzahleingabe n dient sowohl als linkes als auch als rechtes Argument für die Kette. Es ist möglich, stattdessen eine monadische Kette zu verwenden, aber die Analyseregeln für dyadische speichern hier drei Bytes (zwei nach der Berechnung vonð
).Das kartesische Potenzatom
ṗ
mit dem linken und rechten Argument gleich n konstruiert das Array aller Vektoren der Länge n , die aus lexikographisch sortierten Elementen von [1, ..., n] bestehen .Wenn n = 3 ist , ergibt dies
Der Gleichheits- Quicklink
E€
testet die Elemente aller konstruierten Vektoren auf Gleichheit.Wenn n = 3 , bekommen wir
Dies sind die Elemente der dreidimensionalen Identitätsmatrix in einer flachen Anordnung.
Der dyadische Quicklink
+þ’¡
wird mit linkem und rechtem Argument n aufgerufen . Der Quick¡
ruft das Dekrement-Atom auf’
, das n-1 ergibt , und ruft dann den Add-Table- Quicklink+þ
n-1- mal auf.Anfangs sind die Argumente von
+þ
beide n . Nach jedem Aufruf wird das rechte Argument durch das linke und das linke Argument durch den Rückgabewert des Aufrufs ersetzt.Die Tabelle ruft für jedes Element des linken Arguments und jedes Element des rechten Arguments schnell das Atom add
+
auf und erstellt eine Tabelle / Matrix des Rückgabewerts. Die anfänglichen ganzzahligen Argumente n werden in die Bereiche [1, ... n] hochgestuft .Wenn n = 3 ist , lauten beide Argumente nach der Heraufstufung, jedoch vor der ersten Iteration
Das Addieren jeder Ganzzahl in diesem Array zu jeder Ganzzahl in diesem Array ergibt
Beim nächsten Aufruf fügen wir jedes dieser Arrays den Ganzzahlen in [1, 2, 3] hinzu . Die Addition vektorisiert (das Hinzufügen einer Ganzzahl zu einem Array fügt es jedem Element hinzu), also erhalten wir
Dieses Array hat dieselbe Form wie die dreidimensionale Identitätsmatrix, jedoch nicht die richtigen Elemente.
Schließlich werden die Formatom verwirft die ganzzahlige Einträge des Ergebnisses nach rechts und ersetzt sie mit den Elementen in der Folge nach links um.
ṁ
quelle
Python , 70 Bytes
Probieren Sie es online!
Eine rekursive Lösung. Wenn Sie sich die Matrix als eine um eine Dimension kleinere Liste von Matrizen vorstellen, iteriert sie über diese Liste, um den Baum zu durchlaufen. Es merkt sich die ausgewählten Indizes
l
, und wennn
Indizes ausgewählt wurden, weisen wir ein1
oder0
abhängig davon, ob sie alle gleich sind.Python 2 , 73 Bytes
Probieren Sie es online!
Eine Verbesserung gegenüber der Methode von Totalhuman , eine Nullmatrix zu erstellen und dann der Diagonale Einsen zuzuweisen .
Python 2 , 88 Bytes
Probieren Sie es online!
Ein bisschen Unsinn mit
eval
, dem Generieren einer verschachtelten Liste und dem Ersetzen durch Zeichenfolgen. Die auszuwertende Zeichenfolge sieht folgendermaßen aus:quelle
Python 2 + NumPy ,
807270 BytesJetzt mit der Top-Python-Antwort verbunden!
Probieren Sie es online aus
8 Bytes dank Andras Deak und 2 von officialaimm gespeichert
quelle
a[[range(n)]*n]=1
statt Ihrer Exec.fill_diagonal(a,1)
für diesen Zweck, aber das ist ein Byte länger)i
, die 2 Bytes sparen sollte.Python 2 ,
999390 BytesDank Rod für
einigenoch mehr Hilfe , die habe es funktioniert und auch 6 Bytes abrasiert! -3 Bytes dank xnor.Probieren Sie es online!
quelle
def/return
ist besser als nieinput/print
(es ist gleich im besten Szenario), können Sie auch die Drop -()
in('[%d]'%i)
zur Verringerung der 93 Bytes'[%d]'%i
zufällig die Zeichenfolge von sein[i]
.JavaScript (ES6), 67 Byte
Erläuterung: Wird
i
verwendet, um zu verfolgen, ob sich die Zelle in der Hauptdiagonale befindet oder nicht. Anfänglich ist es undefiniert, sodass wir beim ersten rekursiven Aufruf immer die erste Dimension übergeben, während wir sie bei nachfolgenden rekursiven Aufrufen nur übergeben, wenn der aktuelle Dimensionsindex allen vorherigen Dimensionen entspricht, andernfalls übergeben wir einen Index, dern
angibt, dass alle von Die rekursiven Zellen sollten Null sein.quelle
Brainfuck , 61 Bytes
Ungolfed
Die Zahlen hinter den spitzen Klammern geben an, über welcher Zelle sich der Kopf befindet.
Probieren Sie es online!
Die Eingabe ist eine Binärzahl. Die Ausgabe ist eine Matrix, die in der Reihenfolge der Hauptzeilen gespeichert ist.
quelle
R ,
6449 Bytes-15 Bytes dank Jarko Dubbeldam
Liest von stdin und gibt ein Array zurück, das als Matrizen gedruckt wird.
seq
Erzeugt eine Sequenz mit gleichmäßigem Abstand von1
bisn^n
und Längel=n
, was sehr gut dazu beiträgt, zu indizieren, wohin die Einsen gehen.Probieren Sie es online!
alte Version:
Liest
n
von stdin; Gibt ein Array zurück und druckt die Ergebnisse als Matrizen. Ich habe eine Weile damit gekämpft, bis ich die Dokumente gelesen habe[
, die darauf hinweisen, dass eine Matrix zum Indizieren eines Arrays verwendet werden kann, wobei jede Zeile der Matrix die Menge der Indizes darstellt. Ordentlich!Probieren Sie es online!
quelle
array(0, rep(n,n)
funktioniert, so müssen Sie nicht tunrep
. Sie können dann auchn
durch nehmenarray(0, rep(n<-scan(),n))
.x[seq(1,n^n,l=n)]=1
1 Byte kürzer.J ,
16-15BytesProbieren Sie es online!
quelle
Python 3 + Anzahl,
8177 BytesIch bin nicht ganz sicher, ob das oben genannte allen Richtlinien entspricht: Es wird ein ndarray mit den angegebenen Eigenschaften zurückgegeben. Ich weiß, dass anonyme Funktionen normalerweise in Ordnung sind, aber eine interaktive Shell wird tatsächlich gedruckt
Wenn der Array-Flaum das oben genannte ungültig macht, muss ich
print()
für so etwas wie 7 zusätzliche Bytes einwerfen .Probieren Sie es online!
quelle
Pyth, 14 Bytes
Testsuite
Erläuterung: Wenn
^U
implizit angegeben wird^UQQ
, woQ
sich die Eingabe befindet, werden alle möglichen Q-Element-Listen des Bereichs berechnet0 ... n-1
.ms!t{d
Ordnet diejenigen zu, bei denen alle Elemente gleich 1 und der Rest gleich 0 sind. Dies ergibt die abgeflachte AusgabeucGQtQ
Führt Folgendes aus, Q - 1 mal: Zerhackt die Eingabe in Listen der Größe Q.quelle
C # (.NET Core) , 166 Byte
Probieren Sie es online!
Zuerst dachte ich, dass dies mit einem Lambda-Ausdruck in C # nicht möglich ist ... ^ __ ^ U
quelle
Common Lisp,
147133 BytesProbieren Sie es online!
Das übliche überlange Lispeln. Reduzierte 12 Bytes dank @ceilingcat!
Erläuterung:
quelle
SOGL V0.12 , 22 Bytes
Probieren Sie es hier aus!
Lässt die Ausgabe auf dem Stapel und kann in der Konsole angezeigt werden. Wenn die Zahlen in der Ausgabe Zeichenfolgen sein dürfen, kann die
r
entfernt werden.Nur als lustiger Test, wie sich SOGL in Herausforderungen verhält, wurde es nicht für folgende Zwecke entwickelt: p
quelle
Clojure, 92 Bytes
Schön, dass assoc-in auch mit Vektoren funktioniert, nicht nur mit Hash-Maps.
quelle