Linh hồn quay


12

Cho một hình vuông văn bản đại diện cho một vòng xoắn của các ký tự, xoay nó!

Vòng xoắn ốc bắt đầu ở trung tâm và di chuyển ngược chiều kim đồng hồ ra rìa ngoài, bắt đầu từ bên trái của trung tâm:

987
216
345

Điều này chuyển thành chuỗi 123456789. Xoay được thực hiện ở bên trái , vì vậy nếu bạn xoay nó một vị trí, nó sẽ được 234567891. Điều này được đại diện bởi:

198
327
456

Đầu vào

Đầu vào bao gồm hình xoắn ốc và khoảng cách để xoay nó.

Khoảng cách sẽ luôn là số nguyên dương hoặc bằng 0 và có thể được giới hạn ở giới hạn loại dữ liệu của ngôn ngữ của bạn.

Hình xoắn ốc nên được lấy dưới dạng một chuỗi, với một dấu phân cách dòng bạn chọn (bao gồm cả không có dấu phân cách). Nó sẽ luôn là một hình vuông, không bao gồm các dấu phân cách và có độ dài cạnh lẻ.

Giả sử tất cả các ký tự là chữ và số [A-Za-z0-9].

Đầu ra

Đầu ra là xoắn ốc xoay. Nó phải là một hình vuông trên nhiều dòng (cho dù được in hoặc trả lại).

Ví dụ

Đầu vào

3
tne
atd
bin

Đầu ra

bat
nit
den

Đầu vào

18
efilr
naepo
umshf
tootr
butte

Đầu ra

rettu
omseb
oofft
trliu
hpean

Đây là mã golf, với số điểm được tính bằng byte như bình thường.

Câu trả lời:


6

CJam, 45 44 byte

]]l~LqN/{(W%@+\zW%}h;m<{1$,/(W%a@W%z+\s}h;N*

Kiểm tra nó ở đây.

Giải trình

Giải pháp lười biếng: tháo xoắn ốc, sử dụng phép quay mảng tích hợp của CJam, cuộn lại hình xoắn ốc.

]]       e# Push [""]. We'll later use this to roll up the spiral.
l~       e# Read the integer and evaluate it.
L        e# Push an empty string: we'll unroll the input into this.
qN/      e# Read the spiral and split it into lines.
{        e# While the top of the stack is truthy...
  (W%    e#   Pull the first line off the spiral and reverse it.
  @+     e#   Pull up the string we've built so far and prepend the reversed line.
  \zW%   e#   Swap with the remaining spiral, and rotate the spiral.
}h       e# This terminates when the centre character has been added to the string and
         e# the spiral becomes an empty array.
;        e# Discard the empty array.
         e# Note that we've unrolled the spiral from outside in, but we've also built up
         e# the string in reverse, which gives us the string from inside out.
m<       e# Rotate to the left by the given number of characters.
{        e# While the top of the stack is truthy...
  1$,    e#   Copy the spiral so far and get the number of lines.
  /      e#   Split the string into chunks of that size.
  (W%a   e#   Pull off the first chunk, reverse it and wrap it in an array.
  @zW%   e#   Pull up the spiral so far, rotate it.
  +      e#   Prepend the chunk to the spiral as a line.
  \s     e#   Swap with the other chunks and flatten them into a string again.
}h       e# This terminates when the string has been used up completely.
;        e# Discard the empty string.
N*       e# Join the lines with linefeed characters.
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.