Biorąc pod uwagę dodatnią liczbę całkowitą n
, wyprowadzaj N
„matrycę” tożsamości wymiarowej, która jest N^N
tablicą, w 1
której wszystkie składniki indeksów są równe i w 0
przeciwnym razie. N^N
oznacza 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]]]]
Na przykład, jeśli a
jest 4
wymiarowa tożsamość „matrix”, to tylko wpisy z 1
byłoby a[0][0][0][0]
, a[1][1][1][1]
, a[2][2][2][2]
, i a[3][3][3][3]
.
To jest golf golfowy . Najkrótsza odpowiedź w bajtach wygrywa. Obowiązują standardowe luki .
code-golf
math
array-manipulation
integer
generation
Leaky Nun
źródło
źródło
Odpowiedzi:
Oktawa, 29 bajtów
Wypróbuj online!
źródło
Galaretka , 8 bajtów
Wypróbuj online!
Ooh, wygląda na to, że znów mogę przejść do outgolfa @Dennisa w jego własnym języku :-)
Jest to funkcja 1-argumentowa (ponieważ domyślny format wyjściowy Jelly dla list zagnieżdżonych jest nieco niejednoznaczny, co oznacza, że prawdopodobnie nie spełnia specyfikacji jako pełny program).
Wyjaśnienie
Aby to zrozumieć, warto spojrzeć na etapy pośrednie. Dla wejścia 3 otrzymujemy następujące pośrednie kroki:
[1,2,3]
(dane wejściowe wprowadzone pośrednio do zakresuþ
)[[1,0,0],[0,2,0],[0,0,3]]
(utwórz tabelę[1,2,3]
, porównaj, aby uzyskać równość[[1,0,0],[0,1,0],[0,0,1]]
, a następnie pomnóż ją przez jedną z porównywanych wartości)[[[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]]]
(znowu ten sam pomysł)[[[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]]]
(zastąp każdy element jego znakiem za pomocąṠ
)Zauważ, że wejście zaczyna się od 1-wymiarowej oznacza, że musimy zapętlić (input-1) razy, aby dodać wymiary (input-1), tworząc listę danych wejściowych.
Ciekawostka: program ten zawiera pięć Quicks z rzędu,
¥þ’¡`
. (Szybki to modyfikator „linku” lub wbudowanego, służący do modyfikowania jego zachowania lub łączenia go z innym linkiem.)źródło
Mathematica, 30 bajtów
źródło
Table
jest najnowszy dodatek. Matematyka nadal potrzebuje tam listy singletonów: tio.run/##y00sychMLv7/P83WsagosTLaKT8/…Array[Boole@*Equal,#~Table~{#}]&
aby pracować nad matematyką. Starsze wersje Mathematica nie obsługują liczb całkowitych jako drugiego argumentuTable
, i przypuszczam, że matematyka jest oparta na tym.APL (Dyalog) , 10 bajtów
Wypróbuj online!
1=
[jest] 1 równa≢
numer∘
z∪
unikalne elementy¨
w każdym z⍳
indeksy w tablicy o wymiarach⍴⍨
samokształtu ( N kopii N ) z⎕
wejście ( N ) [?]źródło
Galaretka , 9 bajtów
Wypróbuj online!
Jak to działa
Bezpośrednie wykonanie zadania wydaje się trudne (nie znalazłem sposobu), ale tworzenie tablic o tych samych liczbach i tablic o tym samym kształcie jest dość łatwe.
ð
powoduje, że łańcuch staje się dyadyczny, a wejściowa liczba całkowita n służy zarówno jako lewy, jak i prawy argument łańcucha. Można zamiast tego użyć łańcucha monadycznego, ale reguły analizujące dla tych dynamicznych zapisują tutaj trzy bajty (dwa po sprawdzeniuð
).Kartezjański moc atom
ṗ
z argumentem w lewo i w prawo równej N , tworzy tablicę wszystkich wektorów o długości n , które składają się z elementów [1, ..., n] , sortowane leksykograficznie.Gdy n = 3 , daje to
Sobie równe Szybki odnośnik
E€
testuje elementy wszystkich skonstruowanych wektorów do równości.Gdy n = 3 , otrzymujemy
które są elementami trójwymiarowej matrycy tożsamości, w płaskiej matrycy.
Dynamiczne szybkie łącze
+þ’¡
jest wywoływane z lewym argumentem i prawym argumentem n . Szybkie¡
wywołuje atom dekrementacji’
, który daje n-1 , a następnie wywołuje szybkie łącze dodawania tabeli+þ
n-1 razy.Początkowo
+þ
oba argumenty to n . Po każdym wywołaniu prawy argument jest zastępowany lewym, a lewy zastępowany jest wartością zwracaną wywołania.Stół szybkie wywołuje dodawania atom
+
dla poszczególnych elementów jego lewego argumentu, a każdy element jej prawego argumentu budowy stołu / macierz wartości zwracanej. Początkowe argumenty liczb całkowitych n są awansowane do zakresów [1, ... n] .Gdy n = 3 , po awansie, ale przed pierwszą iteracją, oba argumenty są
Dodanie każdej liczby całkowitej w tej tablicy do każdej liczby całkowitej w tej tablicy daje wynik
W kolejnym wywołaniu dodajemy każdą z tych tablic do liczb całkowitych w [1, 2, 3] . Dodawanie wektoryzuje (dodanie liczby całkowitej do tablicy dodaje ją do każdego elementu), więc otrzymujemy
Ta tablica ma taki sam kształt jak trójwymiarowa matryca tożsamości, ale nie ma prawidłowych elementów.
Na koniec atom pleśni
ṁ
odrzuca wpisy liczb całkowitych wyniku po prawej stronie i zastępuje je kolejno elementami w wyniku po lewej stronie.źródło
Python , 70 bajtów
Wypróbuj online!
Rozwiązanie rekurencyjne. Myśląc o macierzy jako liście macierzy o jeden wymiar mniejszej, iteruje tę listę, aby zejść z drzewa. Pamięta wybrane indeksy
l
, a kiedyn
zostały wybrane, przypisujemy1
lub w0
zależności od tego, czy wszystkie są takie same.Python 2 , 73 bajty
Wypróbuj online!
Ulepszenie metody tworzenia przez człowieka matrycy zer, a następnie przypisywania ich do przekątnej.
Python 2 , 88 bajtów
Wypróbuj online!
Niektóre bzdury
eval
, generowanie zagnieżdżonej listy i podstawianie w postaci łańcucha. Ciąg do oceny wygląda następująco:źródło
Python 2 + NumPy ,
807270 bajtówTeraz związany z najwyższą odpowiedzią na Python!
Wypróbuj online
Zaoszczędzono 8 bajtów dzięki Andrasowi Deakowi i 2 przez officialaimm
źródło
a[[range(n)]*n]=1
zamiast swojego exec.fill_diagonal(a,1)
w tym celu, ale to o jeden bajt dłużej)i
, która powinna zaoszczędzić 2 bajty.Python 2 ,
999390 bajtówDzięki Rod dla
niektórychnawet więcej pomocy, że dostał pracę, a także ogolone 6 bajtów off! -3 bajty dzięki xnor.Wypróbuj online!
źródło
def/return
Nigdy lepiej niż jestinput/print
(w najlepszym scenariuszu jest równe), można również upuść()
na('[%d]'%i)
ograniczenie do 93 bajtów'[%d]'%i
zdarza się, że jest to ciąg powtórzeń[i]
.JavaScript (ES6), 67 bajtów
Objaśnienie:
i
służy do śledzenia, czy komórka znajduje się na głównej przekątnej, czy nie. Początkowo jest niezdefiniowany, więc przy pierwszym wywołaniu rekurencyjnym zawsze przekazujemy pierwszy wymiar, podczas gdy przy kolejnych wywołaniach rekurencyjnych przekazujemy go tylko wtedy, gdy bieżący indeks wymiaru jest równy wszystkim poprzednim wymiarom, w przeciwnym razie przekazujemy indeks,n
który wskazuje, że wszystkie komórki rekurencyjne powinny wynosić zero.źródło
Brainfuck , 61 bajtów
Bez golfa
Liczby po nawiasach kątowych wskazują komórkę, nad którą znajduje się głowa.
Wypróbuj online!
Dane wejściowe to liczba binarna. Dane wyjściowe to macierz przechowywana w kolejności rzędów głównych.
źródło
R ,
6449 bajtów-15 bajtów dzięki Jarko Dubbeldam
Odczytuje ze standardowego wejścia i zwraca tablicę, drukując jako matryce.
seq
generuje sekwencję równomiernie rozmieszczoną od1
don^n
z długościąl=n
, co całkiem nieźle ułatwia indeksowanie, gdzie idą 1.Wypróbuj online!
stara wersja:
Czyta
n
ze standardowego; zwraca tablicę, drukując wyniki jako macierze. Zmagałem się z tym przez chwilę, aż przeczytałem dokumentację[
, która wskazuje, że do indeksowania tablicy można użyć macierzy, gdzie każdy wiersz macierzy reprezentuje zestaw indeksów. Schludny!Wypróbuj online!
źródło
array(0, rep(n,n)
działa, więc nie musisz tego robićrep
. Możesz wtedy również przejśćn
przezarray(0, rep(n<-scan(),n))
.x[seq(1,n^n,l=n)]=1
jest o 1 bajt krótszy.J ,
1615 bajtówWypróbuj online!
źródło
Python 3 + numpy,
8177 bajtówNie jestem do końca pewien, czy powyższe spełnia wszystkie wytyczne: zwraca tablicę ndarray o podanych właściwościach. Wiem, że anonimowe funkcje są zwykle w porządku, ale interaktywna powłoka faktycznie wydrukuje
Jeśli puch tablic powoduje, że powyższe jest nieważne, muszę wrzucić
print()
około 7 dodatkowych bajtów.Wypróbuj online!
źródło
Pyth, 14 bajtów
Zestaw testowy
Objaśnienie
^U
:, niejawnie^UQQ
, gdzieQ
jest dane wejściowe, oblicza wszystkie możliwe listy elementów Q zakresu0 ... n-1
.ms!t{d
odwzorowuje te ze wszystkimi elementami równymi 1, a pozostałe na 0. Daje to spłaszczoną moc wyjściowąucGQtQ
wykonuje następujące czynności, Q - 1 razy: Posiekaj dane wejściowe na listy o rozmiarze Q.źródło
C # (.NET Core) , 166 bajtów
Wypróbuj online!
Na początku myślałem, że nie da się tego zrobić za pomocą wyrażenia lambda w C # ... ^ __ ^ U
źródło
Common Lisp,
147133 bajtówWypróbuj online!
Zwykłe bardzo długie seplenienie. Zmniejszono 12 bajtów dzięki @ceilingcat!
Wyjaśnienie:
źródło
SOGL V0.12 , 22 bajty
Wypróbuj tutaj!
Pozostawia dane wyjściowe na stosie , widoczne w konsoli. Jeśli liczby na wyjściu mogą być ciągami, wówczas
r
można je usunąć.Jako zabawny test tego, jak radzi sobie SOGL w wyzwaniach, nie został on całkowicie stworzony dla: str
źródło
Clojure, 92 bajty
Fajnie, że assoc-in działa również z wektorami, nie tylko z mapami skrótów.
źródło