Wyzwanie jest bardzo proste. Biorąc pod uwagę liczbę całkowitą n
, n x n
wyślij macierz tożsamości. Matryca tożsamości obejmuje matrycę 1
od lewego górnego do prawego dolnego rogu. Napisz program lub funkcję, która zwróci lub wyśle utworzoną macierz tożsamości. Twój wynik może być tablicą 2D lub liczbami oddzielonymi spacjami / tabulatorami i znakami nowej linii.
Przykładowe wejście i wyjście
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.
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach.
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
źródło
źródło
Odpowiedzi:
MATL, 2 bajty
Tłumaczenie mojej odpowiedzi Octave.
Wypróbuj online.
Wersja 4-bajtowa bez wbudowanych (dzięki Luis Mendo):
źródło
:t!=
TI-BASIC, 2 bajty
Ciekawostka: najkrótszą drogą do uzyskania listy
{N,N}
jestdim(identity(N
.Oto najkrótsza droga bez wbudowanego, w 8 bajtów:
randM(
tworzy losową macierz z wpisami zawierającymi wszystkie liczby całkowite od -9 do 9 włącznie (brzmi to dziwnie specyficznie, ponieważ tak jest). Następnie przenosimy tę macierz na zerową potęgę.źródło
{N,N}
, umm,{N,N}
?dim(
iidentity(
każdy ma jeden bajt, ponieważ TI-BASIC jest tokenizowany.Julia,
93 bajtyJest to tylko wbudowana funkcja, która przyjmuje liczbę całkowitą
n
i zwracanxn Array{Float64,2}
(tj. Tablicę 2D). Nazwij to jakeye(n)
.Pamiętaj, że przesłanie tego formularza jest dopuszczalne zgodnie z niniejszymi zasadami .
źródło
APL, 5 bajtów
Jest to monadyczny ciąg funkcji, który akceptuje liczbę całkowitą po prawej stronie i zwraca macierz tożsamości.
Wypróbuj tutaj
źródło
Oktawa,
104 bajtyZwraca anonimową funkcję, która pobiera liczbę
n
i zwraca macierz tożsamości.źródło
@eye
jest wystarczający.eye
tworzy macierz tożsamości w wielu / niektórych językach zorientowanych numerycznie.@
zrobić?@
jest „operatorem uchwytu funkcji”, działa jak a,lambda
a także jako odniesienie do określonej funkcji, więc na przykład@(x)x.^2
jest funkcją kwadratu i@sqrt
jest odniesieniem do funkcji pierwiastka kwadratowego. Możesz przeczytać więcej na ten temat tutajR, 4 bajty
Po otrzymaniu macierzy
diag
zwraca przekątną macierzy. Jednakże, gdy otrzyma liczbę całkowitąn
,diag(n)
zwraca macierz identyczności.Wypróbuj online
źródło
Python 2, 42 bajty
Anonimowa funkcja, jak produkuje wyjście
[(1, 0, 0), (0, 1, 0), (0, 0, 1)]
,Najpierw tworzy listę
([1]+[0]*n)*n
, któran=3
wygląda jakUżywanie sztuczki zip / iter
zip(*[iter(_)]*n
do tworzenia grupn
darówZauważ, że
1
przychodzi jeden indeks później za każdym razem, podając macierz tożsamości. Ale istnieje dodatkowy wiersz zerowy, który jest usuwany za pomocą[:n]
.źródło
Galaretka, 4 bajty
Nie używa wbudowanego. Wypróbuj online!
Jak to działa
źródło
=þ
ma dwa bajty i żartuje z dłuższych odpowiedzi.J, 4 bajty
Jest to funkcja, która pobiera liczbę całkowitą i zwraca macierz.
źródło
=i.
(=i.) 10
=>0 0 0 0 0 0 0 0 0 0
Haskell,
4337 bajtówCałkiem proste, choć myślę, że można zrobić lepiej (bez języka, który ma już tę funkcję wbudowaną, jak wielu zrobiło).
Edycja: upuścił kilka bajtów dzięki Ørjan Johansen
źródło
fromEnum
jaksum[1|x==y]
.fromEnum (y==x)
0^abs(x-y)
.0^(x-y)^2
siebie w innej odpowiedzi, nawet krótszej.Pyth, 7 bajtów
Wypróbuj online: Demonstracja
Tworzenie macierzy zer i zamiana elementów ukośnych na jedynki.
źródło
Q
JavaScript ES6,
686252 bajtyOszczędność 10 bajtów dzięki zgrabnej sztuczce z @Neil
Próbuję innego podejścia niż @ Cᴏɴᴏʀ O'Bʀɪᴇɴ. Można ewentualnie poprawić.
źródło
x=>[...Array(x)].map((_,y,x)=>x.map((_,z)=>+(y==z)))
za oszczędność 10 bajtów.x=>[...Array(x)].map((_,y,x)=>x.map(_=>+!y--))
Siatkówka , 25
Podziękowania dla @randomra i @Martin za dodatkowe gry w golfa.
Wypróbuj online.
Zauważ, że przyjmuje to dane wejściowe jako jednoargumentowy. Jeśli nie jest to do przyjęcia, można wprowadzić dane dziesiętne w następujący sposób:
Retina, 34
Wypróbuj online.
źródło
$*0
zamiany liczby n na n0
s.Haskell, 54 bajty
f
zwraca macierz tożsamości dla wejścia n. Dalekie od optymalnego.źródło
map
połączenia.Lua,
77 7565 bajtówCóż, nie jestem pewien, czy lua jest najlepszym językiem do tego z konkatenacją dwóch okresów ... Ale hej, jest na to szansa. Zobaczę, czy należy wprowadzić jakieś ulepszenia.
EDYTOWAĆ:
Odkryłem coś przypadkowego, co wydaje mi się dość dziwne, ale działa.
W Lua wszyscy wiedzą, że masz możliwość przypisywania funkcji do zmiennych. Jest to jedna z bardziej przydatnych funkcji CodeGolf.
Oznacza to zamiast:
Możesz to zrobić:
Ale czekaj, Lua pozwala na pewną ilość OOP. Więc potencjalnie możesz nawet zrobić:
To też zadziała i tnie postacie.
Teraz nadchodzi dziwna część. W żadnym momencie nie musisz nawet przypisywać łańcucha. Po prostu robiąc:
Będzie działać.
Aby wizualnie zobaczyć różnicę, spójrz na to:
Używanie string.sub (88 znaków)
Przypisywanie string.sub do zmiennej (65 znaków)
Przypisywanie string.sub przy użyciu metody OOP (64 znaki)
Przypisywanie string.sub przy użyciu podejścia .. zero? (60 znaków)
Jeśli ktoś wie, dlaczego to działa, byłbym zainteresowany.
źródło
Python 3, 48
Zaoszczędzono 1 bajt dzięki sp3000.
Uwielbiam wyzwania, które mogę rozwiązać w jednym wierszu. Całkiem proste, zbuduj linię z 1 i 0 równą długości przekazywanej wartości int. Wyjście jako tablica 2d. Jeśli owiniesz część po: in
'\n'.join()
, wydrukuje się całkiem.źródło
x-i-1 -> x+~i
C,
59 lub 5956 lub 56Dwie wersje o identycznej długości.
3 bajty zapisane z powodu sugestii anatolyga:
(n+1)
->~n
Iteruje
i
odn*n-1
zera. Drukuje 1, jeśli i% (n + 1) wynosi zero, w przeciwnym razie 0. Następnie drukuje nową linię, jeślii%n
= 0, w przeciwnym razie spacja.źródło
n+1
jest zbyt nudny. Użyj~n
zamiast tego!i;
?i;
tylko deklaruje zmiennąi
. W C zawsze musisz zadeklarować zmienną przed użyciem, wskazując typ, aby kompilator wiedział, ile pamięci do przydzielenia. W przypadku kompilatora GCC, jeśli nie określisz typu, to jest on zakładanyint
.Mata, 4 bajty
Wynik
Mata jest językiem programowania matrycowego dostępnym w pakiecie statystycznym Stata. I (n) tworzy macierz tożsamości o rozmiarze n * n
źródło
I
a pozostałe 3 bajty po prostu wywołują funkcję. Dzięki temu Twoja odpowiedź będzie jedną z najniższych w tym wyzwaniu! :-)K6 , 1 bajt
=
jest dokładnie toWypróbuj online!
źródło
Pyth, 8 bajtów
Wypróbuj tutaj .
źródło
qRRQQ
który wydaje się działać z wyjątkiem dostaćTrue
iFalse
zamiast1
a0
jednak ustalenie tej AFAIK wymaga zastosowania trzech bajtów dlasMM
których nie pomaga ...Python 3.5 z NumPy -
574930 bajtówNumPy.identity przyjmuje liczbę całkowitą n i zwraca macierz tożsamości n według n. Ta odpowiedź jest dozwolona za pośrednictwem tej zasady .
źródło
import numpy\nnumpy.identity
jest to uzasadniona odpowiedź .import numpy\nnumpy.identity()
30 bajtów?from numpy import identity
. 26 bajtów.from numpy import identidy\nidentity
(w takim przypadku użycie krótszego*
zamiast konkretnego wbudowanego)Mathematica, 35 bajtów
bez użycia IdentityMatrix
źródło
JavaScript, 40
źródło
Japt,
141210 bajtówPrzetestuj online! Uwaga: ta wersja ma kilka dodatkowych bajtów, aby dość wydrukować wydruk.
źródło
Brain-Flak ,
206170162 bajtówWypróbuj online!
źródło
K, 7 bajtów
Weź iloczyn krzyżowy równości dwóch wektorów zawierających [0, n).
W akcji:
źródło
Java, 60 bajtów
Tworzy tablicę 2D i zastępuje elementy, w których wiersze i kolumny są równe
1
.źródło
CJam, 7 bajtów
Jest to blok kodu, który wyrzuca liczbę całkowitą ze stosu i wypycha w zamian tablicę 2D.
Wypróbuj online!
źródło
Mathematica, 14 bajtów
Przypadek testowy
źródło
Perl,
3933 bajtówDzięki Ton Hospel za oszczędność 6 bajtów
Uruchamianie z
-E
perlrun:źródło
/$/,say map$`==$_|0,@%for@%=1..<>
a nawet lepiej,//,say map$'==$_|0,@%for@%=1..<>
ale w ten sposób nie można już tego wyrazić w pojedynczych cytatachprint
zamiast zamiast powiedzieć, ponieważ-E
jest wolny tylko w wierszu poleceń.