Xoay xen kẽ


25

Thử thách

Đưa ra một ma trận vuông các ký tự (các ký tự ASCII có thể in một byte), xoay từng "vòng" của ma trận theo các hướng ngược lại.

Hãy lấy một ví dụ:

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

Sau đó, vòng ngoài cùng được xoay theo chiều kim đồng hồ 90 độ, như vậy:

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

Vòng thứ hai được quay ngược chiều kim đồng hồ 90 độ:

7 8 9    9 E J
C   E => 8   I
H I J    7 C H

Vòng cuối cùng được xoay theo chiều kim đồng hồ 90 độ, nhưng vì nó là một số duy nhất (chữ cái trong ví dụ của chúng tôi), nên nó không thực sự bị ảnh hưởng.

Kết quả cuối cùng là:

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

Nếu ma trận có độ dài cạnh chẵn, vòng trong cùng sẽ là hình vuông 2x2 và vẫn nên được xoay.

Đầu vào

Một danh sách các danh sách trong bất kỳ định dạng tiêu chuẩn hợp lý. Ví dụ: một chuỗi được phân tách bằng không gian được phân tách bằng dòng mới hoặc một danh sách các chuỗi được phân tách bằng dấu cách có thể được chấp nhận, nhưng không thể chấp nhận một danh sách các giá trị như các vòng xung quanh ma trận. Các nhân vật không nhất thiết phải là duy nhất.

Đầu ra

Một danh sách các danh sách trong bất kỳ định dạng tiêu chuẩn hợp lý. Quy tắc tương tự như đầu vào.

Các trường hợp thử nghiệm

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

Tín dụng

Lấy cảm hứng mạnh mẽ từ một thử thách liên quan xoay mỗi yếu tố ngược chiều kim đồng hồ một vị trí (không phải 90 độ).



@ rahnema1 Đúng rồi, tôi nhớ bài đó. Bài này chủ yếu lấy cảm hứng từ bài đó; Tôi sẽ tín dụng. Cảm ơn!
HyperNeutrino

@ Mr.Xcoder Rất tiếc. Bạn nói đúng, cảm ơn.
HyperNeutrino

@HyperNeutrino chúng ta có thể lấy kích thước của ma trận làm một phần của đầu vào không?
Uriel

Tất cả các nhân vật trong ví dụ của bạn là duy nhất. Điều này sẽ luôn luôn là trường hợp?
Dennis

Câu trả lời:


9

Haskell , 94 byte

Một hàm ẩn danh lấy và trả về một danh sách Strings.

Sử dụng như (cycle[t.r,r.t,r.t,r.t]?)["123", "456", "789"].

(cycle[t.r,r.t,r.t,r.t]?)
(g:h)?(a:b)=g$a:h?t(r b)
_?a=a
r=reverse;t=zipWith(:)`foldr`repeat[]

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

  • rreverse. tngắn hơn một byte so với nhập Data.List.transpose. t.rxoay danh sách các danh sách 90 độ theo chiều kim đồng hồ và r.txoay theo chiều ngược chiều kim đồng hồ.
  • Toán tử ?lấy hai đối số, một danh sách các hàm và một ma trận làm một danh sách các chuỗi.
    • Một ma trận trống vừa được trả về.
    • Mặt khác, ?loại bỏ chức năng đầu tiên fra khỏi danh sách các chức năng và dòng đầu tiên ara khỏi ma trận.
    • Sau đó, nó xoay phần còn lại bcủa ma trận theo chiều kim đồng hồ và đệ quy với hàm đó và các hàm còn lại. Điều này dần dần tước ma trận từ bên ngoài vào, mỗi vòng bốn bước.
    • Sau đó, nó chuẩn bị dòng ban đầu acho kết quả và áp dụng hàm fcho nó để điều chỉnh hướng của ma trận.
  • Hàm ẩn danh gọi ?với ma trận đầu vào là một danh sách các chuỗi và một danh sách các hàm vô hạn, lặp lại theo chu kỳ cứ sau bốn bước.
    • Đối với hầu hết các bước, chức năng là quay ngược chiều kim đồng hồ, điều này hoàn tác việc xoay theo chiều kim đồng hồ được thực hiện bằng cách ?đệ quy.
    • Tuy nhiên, bước đầu tiên và mỗi bước thứ tư sau đó thay vào đó là xoay theo chiều kim đồng hồ.
      • Hàm này được áp dụng khi một vòng của ma trận hoàn thành, làm cho mỗi vòng quay 180 độ so với vòng tiếp theo.
      • May mắn thay, đây cũng là biến đổi chính xác để áp dụng cho ma trận cuối cùng, hoàn thành để có kết quả cuối cùng.

6

Python 2 , 104 byte

def f(x):l=len(x)-1;r=range(l+1);return[[[x[l-i][j],x[i][l-j]][min(i,j,l-i,l-j)%2]for i in r]for j in r]

Hãy thử trực tuyến!

x[l-i][j]là các tọa độ của một lượt theo chiều kim đồng hồ, x[i][l-j]cho một lượt phản hồi. min(i,j,l-i,l-j)%2được sử dụng để chọn đúng hướng


quay trở lại đệ quy.
tuskiomi

@tuskiomi hmm ??
Rod

@tuskiomi Tôi đã thử một cách tiếp cận đệ quy trong ES6. Nó dài khoảng gấp đôi một cổng đơn giản của câu trả lời này ...
Neil

4

Toán học, 113 byte

r=Reverse;(l=Length[s=#];Table[s[[i+1;;l-i,i+1;;l-i]]=r/@r@s[[i+1;;l-i,i+1;;l-i]],{i,⌊l/2⌋}];r/@Transpose@s)&


tốt hơn là nhập chuỗi char như "E" cho các chữ cái đặc biệt như E, I ...

đầu vào

[{{1, 2, 3, 4, 5, 6}, {A, B, C, D, "E", F}, {G, H, "I", J, K, L}, {M , N, O, P, Q, R}, {S, T, U, V, W, X}, {Y, Z, "!", "@", "#", "&"}}]

đầu ra

{{Y, S, M, G, A, 1}, {Z, "E", K, Q, W, 2}, {"!", D, O, "I", V, 3}, { "@", C, P, J, U, 4}, {"#", B, H, N, T, 5}, {"&", X, R, L, F, 6}}


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.