Wyzwanie
Biorąc pod uwagę n x n
macierz liczb całkowitych zn >= 2
1 2 3 4
oraz lista liczb całkowitych z dokładnie takimi 2n
elementami
[1,2, -3, -1]
wyprowadza obróconą matrycę. Ta matryca jest konstruowana w następujący sposób:
- Weź pierwszą liczbę całkowitą z listy i obróć pierwszy rząd w prawo o tę wartość.
- Weź następną liczbę całkowitą i obróć pierwszą kolumnę o tę wartość w dół.
- Weź następną liczbę całkowitą i obróć drugi rząd w prawo o tę wartość itp., Aż obrócisz każdy wiersz i kolumnę macierzy jeden raz.
Lista może zawierać ujemne liczby całkowite, co oznacza, że przesuwasz wiersz / kolumnę w lewo / w górę zamiast w prawo / w dół. Jeśli liczba całkowita wynosi zero, nie obracaj wiersza / kolumny.
Przykład z wykorzystaniem powyższego wejścia
Element listy Matryca Objaśnienie -------------------------------------------------- ---------- 1 2 1 Obróć 1. rząd w prawo o 1 3 4 2 2 1 Obróć 1. kolumnę w dół o 2 3 4 -3 2 1 Obróć 2. rząd w lewo o 3 4 3 -1 2 3 Obróć 2. kolumnę w górę o 1 4 1
Zasady
- Możesz wybrać najbardziej spójny format wejściowy. Po prostu wyjaśnij, którego używasz.
- Dozwolona funkcja lub pełny program.
- Domyślne reguły wejścia / wyjścia.
- Obowiązują standardowe luki .
- To jest golf golfowy , więc wygrywa najmniej bajtów. Tiebreaker to wcześniejsze zgłoszenie.
Przypadki testowe
Format wejściowy tutaj to lista list dla macierzy i normalna lista dla liczb całkowitych.
[[1,2], [3,4]], [1,2, -3, -1] -> [[2,3], [4,1]] [[1,2], [3,4]], [1,1,1,1] -> [[3,2], [4,1]] [[1,2], [3,4]], [0,0,0,0] -> [[1,2], [3,4]] [[1,2, -3], [- 4,5,6], [7, -8,0]], [1, -2,0, -1,3,4] -> [[7, 5,0], [- 3, -8,2], [- 4,1,6]] [[1,2, -3], [- 4,5,6], [7, -8,0]], [3,12, -3,0, -6, -3] -> [[1 , 2, -3], [- 4,5,6], [7, -8,0]]
Happy Coding!
code-golf
array-manipulation
matrix
Denker
źródło
źródło
Odpowiedzi:
CJam, 13 bajtów
Nienazwany blok (funkcja), który przenosi macierz i listę na stos (w tej kolejności) i pozostawia nową macierz na swoim miejscu.
Uruchom wszystkie przypadki testowe.
Ten sam pomysł, ta sama liczba bajtów, różne implementacje:
Wyjaśnienie
Idealnie chcielibyśmy traktować każdą instrukcję na liście w ten sam sposób i po prostu użyć jej do obrócenia pierwszego rzędu macierzy. Można to zrobić dość łatwo, transformując matrycę po każdej instrukcji i upewniając się, że wszystkie te dodatkowe transformacje zostaną ostatecznie anulowane. Więc po przetworzeniu każdej instrukcji obracamy wszystkie wiersze o jeden w górę (tak, że następna instrukcja wzdłuż tego samego wymiaru przetwarza następny wiersz), a następnie transponujemy macierz, tak że przetwarzamy kolumny w następnej kolejności. Te dodatkowe przekształcenia są prostopadłe do instrukcji na liście i mają dokładnie taki okres
2n
, jakiego potrzebujemy.Co do kodu:
źródło
APL (Dyalog Extended) ,
17151413 bajtów-3 bajty autorstwa Adáma
Wypróbuj online!
Pobiera dane wejściowe jako listę, w której pierwszym elementem jest macierz, a pozostałe elementy są wielkościami obrotu. Gdyby ⌽ obrócił się w prawo zamiast w lewo, pokonałoby to CJam.
źródło
{⍉1⊖⌽⍺⌽@(⍳1)⌽⍵}
→(⍉1⊖⌽@(⍳1)⍢⌽)
ale czy możesz mi wyjaśnić, dlaczego@1
nie będzie działać zamiast@(⍳1)
lub@(,1)
? Ponadto OP może umożliwiać wprowadzanie danych w odwrotnej kolejności.at
który stoi za rozszerzeniem,@
nie jest kompatybilnym rozszerzeniem. Można jednak użyć elementu macierzystego,@
z`@1
którym zapisuje się bajt@1 1
.Python 2, 96 bajtów
Testy
f
zwraca listę krotek. Każda linia w treści funkcji jest wcięta 1 znakiem tabulacji.źródło
return zip(*m)
oszczędziłby ci 5 bajtów?m=zip(*m);return m
justreturn zip(*m)
? Nie mogę tego zrobić, ponieważm=zip(*m)
jest częściąfor
pętliStax , 12 bajtów
Uruchom i debuguj
źródło