tło
W najbardziej rozsądnych językach programowania bardzo łatwo jest obracać wiersze lub kolumny tablicy 2D. W tym wyzwaniu Twoim zadaniem jest obrócenie przeciw przekątnych . Przypomnij sobie, że przeciw przekątnymi macierzy 2D są jej wycinki 1D wykonane w kierunku północno-wschodnim ↗.
Wkład
Niepusta prostokątna tablica 2D liczb jednocyfrowych w dowolnym rozsądnym formacie. Pamiętaj, że tablica nie może być kwadratem.
Wydajność
Taki sam układ, ale z każdym anty-przekątnym obróconym o jeden krok w prawo.
Przykład
Rozważ 3x4
tablicę wejściową
0 1 2 3
4 5 6 7
8 9 0 1
Anty-przekątne tego układu są
0
4 1
8 5 2
9 6 3
0 7
1
Ich obrócone wersje to
0
1 4
2 8 5
3 9 6
7 0
1
Zatem prawidłowe wyjście to
0 4 5 6
1 8 9 0
2 3 7 1
Zasady i punktacja
Możesz napisać pełny program lub funkcję. Dopuszczalne jest również napisanie funkcji, która modyfikuje tablicę wejściową, jeśli Twój język na to pozwala. Wygrywa najniższa liczba bajtów, a standardowe luki są niedozwolone.
Tabela liderów
Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
## Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza lub chcesz pokazać stare wyniki, które poprawiłeś), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku.
Dodatkowe przypadki testowe
Input:
4
Output:
4
Input:
5 6 1
Output:
5 6 1
Input:
0 1
6 2
Output:
0 6
1 2
Input:
6 3 0 8
4 6 1 4
6 2 3 3
9 3 0 3
Output:
6 4 6 1
3 6 2 3
0 9 3 0
8 4 3 3
Input:
5 8 2
6 7 3
2 6 1
6 0 6
6 4 1
Output:
5 6 7
8 2 6
2 6 0
3 6 4
1 6 1
Input:
9 9 4 0 6 2
2 3 2 6 4 7
1 5 9 3 1 5
0 2 6 0 4 7
Output:
9 2 3 2 6 4
9 1 5 9 3 1
4 0 2 6 0 4
0 6 2 7 5 7
CJam,
44434240 bajtówSprawdź to tutaj.
Hmm, znacznie lepiej niż moja pierwsza próba, ale mam wrażenie, że Dennis i tak rozwiąże to znacznie mniej ...
Dane wejściowe i wyjściowe są jak siatki ASCII:
daje
źródło
J, 24 char
Funkcja przyjmująca jeden argument.
J ma operator o
/.
nazwie Oblique . Nie może go odwrócić, więc rekonstrukcja nie jest trywialna, ale można rozważyć „listowanie ukośnych” jako permutację elementów tablicy. Więc odwracamy tę permutację za pomocą/:
( Sortowanie dynamiczne ), umieszczając permutację „listowanie ukośnych” dla tego rozmiaru (</.@i.@$
) po prawej stronie, a nasze nowe wartości ukośne, odpowiednio obrócone, po lewej stronie. Następnie przekształcamy tę listę w starą prostokątną tablicę za pomocą starej dobrej$$
.Wypróbuj online.
źródło
J,
3830 bajtów8 bajtów zapisanych dzięki @al algorytmshark.
Funkcja zbiera górną i lewą krawędź w listę, przycina listę do dwóch kawałków o wystarczających rozmiarach i zszywa je z prawej i dolnej części rdzenia.
Stosowanie:
Wypróbuj online tutaj.
źródło
{./.
replaces}:@{.,{:"1
i można zapisać dwie tyldy przez przerzucanie pociągiem wokół:{./.((}.~#),~({.~#),.])}:"1@}.
.Julia,
153149139 bajtówSpowoduje to utworzenie nienazwanej funkcji, która akceptuje tablicę i zwraca zmodyfikowaną tablicę wejściową.
Nie golfowany:
Podziękowania dla Martina Büttnera za porady algorytmiczne i oszczędność 4 bajtów!
źródło
ES6, 75 bajtów
To akceptuje tablicę tablic jako parametr i modyfikuje ją w miejscu.
Nie golfowany:
Aby uzyskać dodatkowe wyjaśnienia, zobacz diagram @ aditsu.
źródło
{t.push(r.pop());r.unshift(t.shift())}
nat.push(r.pop())+r.unshift(t.shift())
Pyth, 20 bajtów
Wykorzystuje podejście Adistu do usunięcia górnego wiersza i prawej kolumny, a następnie przyklejenia ich po lewej i na dole. Ale ze zmiennymi strukturami danych, a nie transpozycjami.
źródło
Oktawa, 85 bajtów
Mam nadzieję, że uda mi się go pozbyć
end
.źródło
Python 2 ,
11310494 bajtyWypróbuj online!
To dość dosłowna interpretacja metody @ aditsu. Składnia Pythona do traktowania pustych list jako False pomogła zaoszczędzić dodatkowe 10 bajtów.
źródło
0
w[0:1]