Powiedzmy, że mam następującą macierz (2D):
[[1, 2, 3, 4 ],
[5, 6, 7, 8 ],
[9, 10, 11, 12],
[13, 14, 15, 16]]
Obróć matrycę w kierunku przeciwnym do ruchu wskazówek zegara R
(nie w przyrostach 90 stopni, tylko o 1 liczbę za każdym razem),
1 2 3 4 2 3 4 8 3 4 8 12
5 6 7 8 --> 1 7 11 12 --> 2 11 10 16
9 10 11 12 5 6 10 16 1 7 6 15
13 14 15 16 9 13 14 15 5 9 13 14
Ukończony przykład:
Wkład:
2
[[1, 2, 3, 4 ],
[5, 6, 7, 8 ],
[9, 10, 11, 12],
[13, 14, 15, 16]]
Wydajność:
[[3, 4, 8, 12],
[2, 11, 10, 16],
[1, 7, 6, 15],
[5, 9, 13, 14]]
(dziwne spacje mają wyrównać liczby w ładnych kolumnach)
Zewnętrzny „pierścień” matrycy obraca się 2 przeciwnie do ruchu wskazówek zegara, a wewnętrzny prawy również obraca 2. W tej matrycy są tylko dwa pierścienie.
Przykład z 1 „pierścieniem”:
2
[[1, 2],
[3, 4],
[5, 6]]
Powinien generować:
[[4, 6],
[2, 5],
[1, 3]]
Wyzwanie polega na przyjęciu macierzy i liczby całkowitej R
oraz wygenerowaniu przetłumaczonej wersji po R
rotacji.
Obrót matrycy 4x5 jest reprezentowany przez następujący rysunek:
Ograniczenia:
2 ≤ M, N ≤ 100
, gdzie M i N są wymiarami macierzy. Gwarantuje się, że minimum M i N będzie parzyste.1 ≤ R ≤ 80
, gdzie r jest liczbą obrotów.- Macierz będzie zawsze zawierała dodatnie liczby całkowite.
- Wartości nie zawsze są wyraźne.
- Dane wejściowe powinny być zawsze w postaci tablicy 2D (jeśli nie możesz wziąć danych wykonawczych jako tablicy 2D, musisz po prostu znaleźć inny sposób na uzyskanie danych wejściowych).
Kolejny przypadek testowy z nierozróżnialnymi wartościami:
1
[[1, 1],
[2, 2],
[3, 3]]
Wyjścia:
[[1, 2],
[1, 3],
[2, 3]]
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź!
źródło
[[3, 4, 8, 12], [2, 11, 10, 16], [1, 7, 6, 16], [5, 9, 13, 14]]
16 jest nagle duplikowane Chyba powinno być[[3, 4, 8, 12], [2, 11, 10, 16], [1, 7, 6, 15], [5, 9, 13, 14]]
:?Odpowiedzi:
Galaretka ,
39383635 bajtówWypróbuj online!
źródło
Oktawa, 210 bajtów
Wypróbuj w Octave Online!
Wersja bez golfa:
Wyjaśnienie:
Funkcja, która pobiera liczbę i generuje zakres, który jest uporządkowany i wyśrodkowany dla wejścia 4 (parzysty) generuje
-2 -1 1 2
dla wejścia 5 (nieparzysty) generuje
-2.5 -1.5 0 1 2
tylko to, że powinien być uporządkowany i wyśrodkowany
złożona macierz wygenerowana z zakresów
Konwertuj współrzędne prostokątne na biegunowe i zwracaj kąty, aby dla każdego kąta pierścienia były sortowane przeciwnie do ruchu wskazówek zegara
Wygenerowano następującą macierz
Oblicza transformatę odległości B za pomocą odległości szachownicy w celu wygenerowania wskaźników pierścienia
dla macierzy 6 * 7 będziemy mieli następującą macierz
sortowanie leksykograficzne najpierw na podstawie indeksu pierścieniowego, a następnie według kolejności kątów (zwrócone wskaźniki posortowanych elementów)
i wreszcie okrągłe przesunięcie każdego pierścienia.
źródło
Python 3,
292288 bajtówPobiera dane wejściowe z usuniętymi znakami nowej linii, ale pozostawia spację po liczbie przyrostów, aby ją obrócić.
Wyjaśnienie:
Zamiast modelować macierz jako serię koncentrycznych pierścieni zgodnie z sugestią PO, można zamiast tego podzielić ją na cztery regiony, w których elementy poruszają się w górę, w dół, w prawo lub w lewo podczas jednego obrotu. Jest to celem długiego sprawdzonego ciągu
f
: określenie regionu, do którego należy każdai,j
kombinacja. Następnie wynik jest dwukrotnie sprawdzanyl
, dając element, który musi obrócić się w odpowiedniej pozycjii,j
w następnym kroku. Funkcja,g
która wykonuje to wszystko i tworzy nową macierz po jednym kroku, jest następnie wywoływana wielokrotnie przez sprawdzenie wygenerowanego ciągu zawierającego reprezentację zagnieżdżonego wywołania funkcji.Kiedy zrobiłem to pierwotnie, przypadkowo spowodowałem, że matryca obraca się zgodnie z ruchem wskazówek zegara zamiast w kierunku przeciwnym do ruchu wskazówek zegara. Zamiast zrobić właściwą poprawkę, dodałem dwie strategicznie umieszczone kopie,
[::-1]
aby odwrócić matrycę przed i po rotacji. Prawdopodobnie można je oddzielić do ~280276 bajtów, ale jestem zbyt leniwy, aby to zrobić.Jest to także szybki, niesprawdzony port z nieco dłuższego programu w języku Python 2, więc wybacz mi, jeśli nie działa całkiem dobrze. W każdym razie oto kod Python 2:
Edycja: golfed od 4 bajtów, zastępując
or
w|
dwukrotnie.and
nie można niestety pomóc.źródło
Perl,
330328 bajtówWypróbuj na Ideone .
Nie golfowany:
źródło