Wyzwanie
Biorąc pod uwagę kwadratową matrycę znaków (jednobajtowe znaki drukowalne ASCII), obróć każdy „pierścień” matrycy w przeciwnych kierunkach.
Weźmy przykład:
1 2 3 4 5
6 7 8 9 A
B C D E F
G H I J K
L M N O P
Następnie najbardziej zewnętrzny pierścień obraca się o 90 stopni zgodnie z ruchem wskazówek zegara, w ten sposób:
1 2 3 4 5 L G B 6 1
6 A M 2
B F => N 3
G K O 4
L M N O P P K F A 5
Drugi pierścień obraca się o 90 stopni w kierunku przeciwnym do ruchu wskazówek zegara:
7 8 9 9 E J
C E => 8 I
H I J 7 C H
Ostatni pierścień jest obracany o 90 stopni w kierunku zgodnym z ruchem wskazówek zegara, ale ponieważ jest to pojedyncza liczba (litera w naszym przykładzie), tak naprawdę nie ma to wpływu.
Ostateczny wynik to:
L G B 6 1
M 9 E J 2
N 8 D I 3
O 7 C H 4
P K F A 5
Jeśli matryca ma równą długość boku, najbardziej wewnętrzny pierścień będzie miał kwadrat 2x2 i powinien nadal być obracany.
Wkład
Lista list w dowolnym rozsądnym standardowym formacie. Na przykład ciąg znaków rozdzielany spacjami lub nowy ciąg rozdzielany spacjami jest dopuszczalny, ale lista wartości jako pierścieni wokół macierzy jest niedopuszczalna. Postacie niekoniecznie są wyjątkowe.
Wydajność
Lista list w dowolnym rozsądnym standardowym formacie. Te same zasady co dane wejściowe.
Przypadki testowe
1 2 3 7 4 1
4 5 6 => 8 5 2
7 8 9 9 6 3
1 2 3 4 5 6 Y S M G A 1
A B C D E F Z E K Q W 2
G H I J K L => ! D O I V 3
M N O P Q R @ C P J U 4
S T U V W X # B H N T 5
Y Z ! @ # $ $ X R L F 6
Kredyty
Mocno zainspirowany pokrewnym wyzwaniem, które obraca każdy element przeciwnie do ruchu wskazówek zegara o jedną pozycję (nie o 90 stopni).
Odpowiedzi:
Haskell , 94 bajty
Anonimowa funkcja pobierająca i zwracająca listę
String
s.Użyj jako
(cycle[t.r,r.t,r.t,r.t]?)["123", "456", "789"]
.Wypróbuj online!
Jak to działa
r
jestreverse
.t
jest o jeden bajt krótszy niż importData.List.transpose
.t.r
obraca listę list o 90 stopni w prawo ir.t
obraca ją w lewo.?
przyjmuje dwa argumenty, listę funkcji i macierz jako listę ciągów znaków.?
usuwa pierwszą funkcjęf
z listy funkcji, a pierwszą linięa
z macierzy.b
macierzy zgodnie z ruchem wskazówek zegara i powtarza się z tą i pozostałymi funkcjami. Powoduje to stopniowe usuwanie matrycy z zewnątrz, jeden pierścień na cztery kroki.a
do wyniku i stosujef
do niej funkcję w celu dostosowania orientacji matrycy.?
z macierzą wejściową jako listą łańcuchów i nieskończoną listą funkcji, która cyklicznie się powtarza co cztery kroki.?
podczas rekurencji.źródło
Python 2 , 104 bajty
Wypróbuj online!
x[l-i][j]
są współrzędnymi obrotu zgodnie z ruchem wskazówek zegara,x[i][l-j]
dla obrotu przeciwnego do ruchu wskazówek zegara.min(i,j,l-i,l-j)%2
służy do wyboru właściwego kierunkuźródło
Mathematica, 113 bajtów
lepiej jest wpisać ciąg znaków jak „E” dla specjalnych liter takich jak E, ja ...
wkład
wydajność
źródło
Oktawa, 86 bajtów
Wypróbuj online!
źródło