Biorąc pod uwagę macierz, wyświetl reprezentację macierzy, w której górny lewy element znajduje się na górze, anty-przekątna jest środkowym rzędem, a prawy dolny element jest na dole.
Rozważmy na przykład następującą macierz:
1 2 3
4 5 6
7 8 9
Diamentowa wersja tej matrycy to:
1
4 2
7 5 3
8 6
9
Wejścia i wyjścia
Macierz wprowadzania zostanie podana jako lista list (lub cokolwiek podobnego w wybranym języku). Wynikiem powinna być również lista list.
Macierze będą zawierać tylko dodatnie liczby całkowite.
Macierz wejściowa niekoniecznie będzie kwadratowa.
Matryca wejściowa będzie wynosić co najmniej 1 × 1.
Przypadki testowe
Input: [[1]]
Output: [[1]]
Input: [[1,2],[3,4]]
Output: [[1],[3,2],[4]]
Input: [[1,2,3],[4,5,6]]
Output: [[1],[4,2],[5,3],[6]]
Input: [[11,2,5],[3,99,3],[4,8,15],[16,23,42]]
Output: [[11],[3,2],[4,99,5],[16,8,3],[23,15],[42]]
Punktacja
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
code-golf
array-manipulation
matrix
Fatalizować
źródło
źródło
Odpowiedzi:
J, 7 bajtów
Jest to bezimienny czasownik monadyczny, który pobiera macierz i zwraca listę antydiagonali:
Sprawdź to tutaj.
Wyjaśnienie
/.
jest wbudowany w J, aby zastosować funkcję do każdej anty-przekątnej. Niestety, te anty-przekątne są podane w odwrotnej kolejności niż tutaj.<@|.
, najpierw zastosujemy,|.
który odwraca anty-przekątną, a następnie<
umieszcza ją w ramce (jest to jedyny sposób, aby zwrócić nierówną tablicę w J, ponieważ normalne tablice są zawsze prostokątne, więc antyiagonale byłyby wypełnione zerami).źródło
Python, 91 bajtów
Przetestuj na Ideone .
Python + NumPy, 69 bajtów
Oczekuje na wejście tablicy 2D NumPy i zwraca listę tablic NumPy. Przetestuj na Ideone .
źródło
Galaretka, 7 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Mathematica,
5856 bajtówFunkcja anonimowa, przyjmuje zagnieżdżone tablice.
źródło
Length[#]
gdzie
jest\[Transpose]
. I prawdopodobnie kolejny z aliasinguLength
.Length@#&@@#
dla ASCII tylko przy tej samej liczbie bajtów.CJam, 17 bajtów
Nienazwany blok (funkcja), który oczekuje matrycy na stosie i zastępuje ją antydiagonalami.
Sprawdź to tutaj.
To (znalezione przez Sp3000) działa dla tej samej liczby bajtów:
Wyjaśnienie
Można to najlepiej wyjaśnić na przykładzie. Rozważ dane wejściowe:
źródło
Python 2,
8887 bajtówDodaj zera, zip, a następnie usuń elementy fałszowania. Zwraca listę krotek. Wykorzystuje
map(None,...)
do wykonywaniazip_longest
(dopełnienie brakujących plamyNone
) orazfilter(None,...)
usunąć elementy falsy.Irytująco musimy dodać dodatkowy
[]
wiersz do,map
aby zagwarantować, że lista krotek zostanie zwrócona, ponieważmap(None,*[[1]])
zwraca[1]
raczej niż[(1,)]
macierz 1x1. Dodatkowy rząd zostaje jednak usuniętyfilter
.(Dzięki @Dennis za -1 bajt)
źródło
Rubin,
6866 bajtówFunkcja anonimowa.
źródło
Mathematica, 60 bajtów
gdzie
jest znakiem Unicode, który Mathematica odczytuje jako\[Transpose]
operator postfiksa .Jest to nieco dłużej niż inne rozwiązanie Mathematica, ale pomyślałem, że opublikuję to, ponieważ nie korzysta z
Diagonals
wbudowanego i używa zupełnie innego podejścia.Wyjaśnienie
To najpierw transponuje matrycę (tak, że antydiagonale pojawiają się we właściwej kolejności, jeśli matryca jest spłaszczona). Następnie mapujemy
List
komórki macierzy wraz z indeksem, który zamienia każdy element macierzyi
w{i, {x, y}}
miejscex
iy
współrzędne elementu w macierzy.Spłaszcza to najbardziej zewnętrzny wymiar, dzięki czemu mamy teraz płaską listę elementów macierzy (wraz z ich współrzędnymi) w porządku głównym kolumny.
Grupuje te elementy według sumy ich współrzędnych. Zauważ, że antyiagonale są liniami stałej
x+y
, więc robi to dokładnie to, czego chcemy. Kolejność w każdej grupie jest zachowana. Teraz musimy tylko pozbyć się współrzędnych. Odbywa się to za pomocą dość tajemniczego:To odwzorowuje funkcję
#&@@@#&
na każdą grupę, która sama dotyczy#&
każdego elementu w grupie, i#
jest po prostu pierwszym argumentem, tj. Oryginalnym elementem macierzy.źródło
jest czytane jako\[transpose]
?T
: reference.wolfram.com/language/ref/character/Transpose.html ...\[Transpose]
to po prostu transliteracja tego znaku Unicode w ASCII. Działa kopiowanie znaku Unicode lub transliteracji do Mathematica.Oktawa, 77 bajtów
Przy odrobinie nadużycia
accumarray
funkcji:Definiuje to anonimową funkcję. Aby go użyć, przypisz zmienną lub użyj
ans
.Dane wejściowe to macierz z
:
separatorem wierszy. Dane wyjściowe to tablica komórek zawierająca tablicę dla każdego wiersza (odpowiednik oktawowych tablic poszarpanych). Jest to wyświetlane przez Octave pokazujące wskaźniki tablicy komórek i zawartość każdej komórki. Wypróbuj tutaj .Aby wyświetlić wynik oddzielony tylko spacjami i znakami nowej linii: 83 bajty
Możesz także spróbować tutaj .
źródło
JavaScript (Firefox),
8675 bajtówZaoszczędź 11 bajtów dzięki @Neil!
Działa w przeglądarce Firefox 30+. Zajmuje tablicę tablic.
źródło
a.concat(a[0]).slice(1)
aby uzyskać tablicę o odpowiedniej długości. Ponadto[for(of)]
nie jest ES6; Zwykle piszę to jako (Firefox 30+) lub coś takiego.concat
islice
. Dzięki!Oktawa,
6362 bajtyUsunięto jeden bajt dzięki
@DonMue ...@LuisMendo!Przeszedłem nudną trasę i zmiażdżyłem antydiagonale.
Próbka uruchomiona na ideone .
źródło
'uni'
do'un'
Haskell,
8382 bajtównimi uratował bajt. Dzięki!
źródło
Python, 128 bajtów (numpy)
źródło
lambda
tylko lambda, którego możesz użyć jako przesłanego.lambda A:[[A[U][I-U]for U in range(max(I-len(A)+1,0),min(len(A[0])-1,I)+1)]for I in range(len(A+A[0])-1)]
(jak w oryginalnej wersji) byłby nieco krótszy. Ponadto, należy zmienićA[U][I-U]
, abyA[I-U][U]
uzyskać orientację z pytaniem.Pyth ,
4117 bajtówWypróbuj online!
Zainspirowany rozwiązaniem @ Doorknob na inny problem .
Jak to działa:
Poprzednia próba:
Wypróbuj online!
Jak to działa:
źródło
Groovy,
777375Pobiera tablicę tablic jako dane wejściowe i zwraca tablicę tablic.
Spróbuj
EDYCJA: Zapomniałem wysłać odpowiedź, po dodaniu jej wynik wzrasta do 75.
źródło