Die Herausforderung ist sehr einfach. Geben Sie bei einer Ganzzahleingabe n
die n x n
Identitätsmatrix aus. Die Identitätsmatrix 1
erstreckt sich von oben links nach unten rechts. Sie schreiben ein Programm oder eine Funktion, die die von Ihnen erstellte Identitätsmatrix zurückgibt oder ausgibt. Ihre Ausgabe kann ein 2D-Array oder durch Leerzeichen / Tabulatoren und Zeilenumbrüche getrennte Zahlen sein.
Beispiel für Ein- und Ausgabe
1: [[1]]
2: [[1, 0], [0, 1]]
3: [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
4: [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]
5: [[1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1]]
1
===
1
2
===
1 0
0 1
3
===
1 0 0
0 1 0
0 0 1
etc.
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
code-golf
math
matrix
linear-algebra
binary-matrix
code-challenge
polyglot
code-golf
restricted-source
programming-puzzle
expression-building
apl
code-challenge
image-processing
compression
code-golf
puzzle-solver
code-golf
grid
code-golf
number
number-theory
code-golf
array-manipulation
sorting
code-golf
string
balanced-string
code-golf
puzzle-solver
code-golf
string
decision-problem
code-golf
path-finding
puzzle-solver
graph-theory
code-golf
string
encode
networking
code-golf
code-golf
string
chemistry
code-golf
date
code-golf
decision-problem
graph-theory
code-golf
ascii-art
graph-theory
code-golf
string
Seadrus
quelle
quelle
Antworten:
MATL, 2 Bytes
Eine Übersetzung meiner Octave-Antwort.
Probieren Sie es online aus.
Eine 4-Byte-Version ohne eingebaute Funktionen (dank Luis Mendo):
quelle
:t!=
TI-BASIC, 2 Bytes
Unterhaltsame Tatsache: Der kürzeste Weg, eine Liste zu erhalten,
{N,N}
istdim(identity(N
.Hier ist der kürzeste Weg ohne die eingebauten, in 8 Bytes:
randM(
Erstellt eine Zufallsmatrix mit Einträgen aller ganzen Zahlen zwischen -9 und 9 (das klingt seltsamerweise spezifisch, weil es so ist). Wir nehmen dann diese Matrix zur 0. Potenz.quelle
{N,N}
, ähm{N,N}
?dim(
undidentity(
sind jeweils ein Byte, da TI-BASIC tokenisiert ist.Julia,
93 BytesDies ist nur eine integrierte Funktion, die eine Ganzzahl akzeptiert
n
und einnxn Array{Float64,2}
(dh ein 2D-Array) zurückgibt . Nenne es soeye(n)
.Beachten Sie, dass Einsendungen dieses Formulars gemäß dieser Richtlinie zulässig sind .
quelle
APL, 5 Bytes
Dies ist ein monadischer Funktionszug, der eine Ganzzahl auf der rechten Seite akzeptiert und die Identitätsmatrix zurückgibt.
Probieren Sie es hier aus
quelle
Oktave,
104 BytesGibt eine anonyme Funktion zurück, die eine Zahl annimmt
n
und die Identitätsmatrix zurückgibt.quelle
@eye
ist genügend.eye
Erzeugt die Identitätsmatrix in vielen / einigen numerisch orientierten Sprachen.@
?@
ist der "Funktions-Handle-Operator". Er funktioniert wie einelambda
und auch als Referenz auf eine bestimmte Funktion, z. B.@(x)x.^2
die Quadrierungsfunktion und@sqrt
eine Referenz auf die Quadratwurzelfunktion. Sie können mehr darüber hierR, 4 Bytes
Wenn eine Matrix angegeben wird, wird
diag
die Diagonale der Matrix zurückgegeben. Bei einer Ganzzahln
wird jedochdiag(n)
die Identitätsmatrix zurückgegeben.Probieren Sie es online aus
quelle
Python 2, 42 Bytes
Eine anonyme Funktion erzeugt eine Ausgabe wie
[(1, 0, 0), (0, 1, 0), (0, 0, 1)]
:Zunächst wird die Liste erstellt
([1]+[0]*n)*n
, nach dern=3
aussiehtMit Hilfe der zip / iter Trick
zip(*[iter(_)]*n
Gruppen zu machen , dern
gibtBeachten Sie, dass der
1
Index jedes Mal einen Index später kommt und die Identitätsmatrix angibt. Es gibt jedoch eine zusätzliche Null-Zeile, die mit entfernt wird[:n]
.quelle
Gelee, 4 Bytes
Verwendet kein eingebautes. Probieren Sie es online!
Wie es funktioniert
quelle
=þ
es zwei Bytes, und über die längeren Antworten wird sich lustig gemacht.J, 4 Bytes
Dies ist eine Funktion, die eine Ganzzahl annimmt und die Matrix zurückgibt.
quelle
=i.
(=i.) 10
=>0 0 0 0 0 0 0 0 0 0
Haskell,
4337 BytesZiemlich einfach, obwohl ich denke, man kann es besser machen (ohne eine Sprache, in der diese Funktion bereits eingebaut ist, wie es viele getan haben).
Bearbeiten: Dank Ørjan Johansen sind einige Bytes weggefallen
quelle
fromEnum
als betrügensum[1|x==y]
.fromEnum (y==x)
0^abs(x-y)
.0^(x-y)^2
andere Antwort benutzt, noch kürzer.Pyth, 7 Bytes
Probieren Sie es online aus: Demonstration
Erstellen einer Nullmatrix und Ersetzen der diagonalen Elemente durch Einsen.
quelle
Q
JavaScript ES6,
686252 Bytes10 Bytes gespart dank eines netten Tricks von @Neil
Ich versuche einen anderen Ansatz als bei @ Cᴏɴᴏʀ O'Bʀɪᴇɴ. Könnte evtl. verbessert werden.
quelle
x=>[...Array(x)].map((_,y,x)=>x.map((_,z)=>+(y==z)))
Einsparung von 10 Bytes.x=>[...Array(x)].map((_,y,x)=>x.map(_=>+!y--))
Retina , 25
Dank an @randomra und @Martin für zusätzliches Golfen.
Probieren Sie es online aus.
Beachten Sie, dass dies als unäre Eingabe gilt. Ist dies nicht akzeptabel, kann die Dezimaleingabe wie folgt erfolgen:
Retina, 34
Probieren Sie es online aus.
quelle
$*0
, um eine Zahl n durch ns zu ersetzen0
.Haskell, 54 Bytes
f
Gibt die Identitätsmatrix für Eingabe n zurück. Weit davon entfernt, optimal zu sein.quelle
map
Aufrufs speichern .Lua,
77 7565 BytesNun, ich bin mir nicht sicher, ob lua die beste Sprache für diese Verkettung ist ... Aber hey, es gibt eine Chance. Ich werde sehen, ob Verbesserungen vorgenommen werden müssen.
BEARBEITEN:
Ich habe durch einen Unfall etwas herausgefunden, was ich ziemlich merkwürdig finde, aber es funktioniert.
In Lua weiß jeder, dass Sie Variablen Funktionen zuweisen können. Dies ist eine der nützlicheren CodeGolf-Funktionen.
Das heißt statt:
Du kannst das:
Aber warte, Lua lässt etwas OOP zu. Sie könnten also möglicherweise sogar Folgendes tun:
Das funktioniert auch und schneidet Charaktere.
Jetzt kommt hier der seltsame Teil. Sie müssen zu keinem Zeitpunkt eine Zeichenfolge zuweisen. Einfach machen:
Wird funktionieren.
So können Sie den Unterschied visuell erkennen und sich die Golfergebnisse ansehen:
Verwenden von string (88 Zeichen)
Zuweisen von string.sub zu einer Variablen (65 Zeichen)
String.sub mit einem OOP-Ansatz zuweisen (64 Zeichen)
String.sub mit einem .. nil-Ansatz zuweisen? (60 Zeichen)
Wenn jemand weiß, warum das funktioniert, würde ich mich interessieren.
quelle
Python 3, 48
1 Byte dank sp3000 gespeichert.
Ich liebe Herausforderungen, die ich in einer Linie lösen kann. Ziemlich einfach, erstellen Sie eine Zeile aus 1 und 0, die der Länge des übergebenen Int entspricht. Ausgabe als 2D-Array. Wenn Sie das Teil nach dem: in einwickeln
'\n'.join()
, wird es hübsch gedruckt.quelle
x-i-1 -> x+~i
C,
59 oder 5956 oder 56Zwei Versionen gleicher Länge.
3 Bytes gespart aufgrund eines Vorschlags von anatolyg:
(n+1)
->~n
Iteriert
i
vonn*n-1
auf Null. Gibt eine 1 aus, wenn i% (n + 1) Null ist, andernfalls 0. Gibt eine neue Zeile aus, wenni%n
= 0, andernfalls ein Leerzeichen.quelle
n+1
ist zu langweilig. Verwenden Sie~n
stattdessen!i;
das?i;
deklariert nur die Variablei
. In C müssen Sie immer eine Variable deklarieren, bevor Sie sie verwenden. Geben Sie dabei den Typ an, damit der Compiler weiß, wie viel Speicher zugewiesen werden muss. Wenn Sie beim GCC-Compiler keinen Typ angeben, wird davon ausgegangen, dass dies der Fall istint
.Mata, 4 Bytes
Ausgabe
Mata ist die Matrix-Programmiersprache, die im Statistikpaket Stata enthalten ist. I (n) erzeugt eine Identitätsmatrix der Größe n * n
quelle
I
ist und die anderen 3 Byte nur die Funktion aufrufen. Das würde Ihre Antwort zu einer der niedrigsten bei dieser Herausforderung machen! :-)K6 , 1 Byte
=
ist genau dasProbieren Sie es online!
quelle
Pyth, 8 Bytes
Probieren Sie es hier aus .
quelle
qRRQQ
das zu funktionieren scheint, außer Sie bekommenTrue
undFalse
anstelle von1
und0
, jedoch erfordert das Beheben dieses Problems die Verwendung von drei Bytes,sMM
wofür es nicht hilft ...Python 3.5 mit NumPy -
574930 BytesNumPy.identity nimmt eine Ganzzahl n auf und gibt eine Identitätsmatrix von n zurück. Diese Antwort ist über diese Richtlinie zulässig .
quelle
import numpy\nnumpy.identity
das für eine legitime Antwort .import numpy\nnumpy.identity()
30 Bytes sein könnte?from numpy import identity
. 26 Bytes.from numpy import identidy\nidentity
(in diesem Fall wäre es kürzer,*
anstelle der spezifischen eingebauten zu verwenden)Mathematica, 35 Bytes
ohne Verwendung von IdentityMatrix
quelle
Javascript, 40
quelle
Japt,
141210 BytesOnline testen! Hinweis: Diese Version verfügt über einige zusätzliche Bytes, um die Ausgabe hübsch zu drucken.
quelle
Brain-Flak ,
206170162 BytesProbieren Sie es online!
quelle
K, 7 Bytes
Nehmen Sie das Gleichheitskreuzprodukt zweier Vektoren, die [0, n) enthalten.
In Aktion:
quelle
Java, 60 Bytes
Erstellt ein 2D-Array und ersetzt Elemente, bei denen Zeile und Spalte gleich sind
1
.quelle
CJam, 7 Bytes
Dies ist ein Codeblock, der eine Ganzzahl aus dem Stapel entfernt und ein 2D-Array zurückschiebt.
Probieren Sie es online!
quelle
Mathematica, 14 Bytes
Testfall
quelle
Perl,
3933 BytesVielen Dank an Ton Hospel für die Einsparung von 6 Bytes
Laufen mit dem
-E
Perlrun:quelle
/$/,say map$`==$_|0,@%for@%=1..<>
oder noch besser,//,say map$'==$_|0,@%for@%=1..<>
aber so kann man es nicht mehr in einfache Anführungszeichen setzenprint
anstelle von say erfordern , da-E
es nur in der Befehlszeile frei ist.