회전 나선


12

문자의 나선을 나타내는 텍스트 사각형이 주어지면 회전하십시오!

나선은 중심에서 시작하여 중심 의 왼쪽에서 시작하여 시계 반대 방향 으로 바깥 쪽 가장자리로 이동합니다 .

987
216
345

이것은 문자열로 변환됩니다 123456789. 회전이 완료 왼쪽으로 당신이 한 위치가 될 것입니다 회전 그렇다면, 234567891. 이것은 다음과 같이 표현됩니다.

198
327
456

입력

입력은 나선과 회전 거리로 구성됩니다.

거리는 항상 양의 정수 또는 0이며 언어의 데이터 유형 제한에서 제한 될 수 있습니다.

나선은 선택한 줄 구분 기호 (구분 기호 제외)가있는 문자열로 가져와야합니다. 구분 기호를 포함하지 않고 항상 정사각형이며 측면 길이가 홀수입니다.

모든 문자가 영숫자 [A-Za-z0-9]라고 가정합니다.

산출

출력은 회전 된 나선입니다. 여러 줄의 사각형이어야합니다 (인쇄 또는 반납).

입력

3
tne
atd
bin

산출

bat
nit
den

입력

18
efilr
naepo
umshf
tootr
butte

산출

rettu
omseb
oofft
trliu
hpean

이것은 코드 골프이며 평소와 같이 점수가 바이트로 계산됩니다.

답변:


6

CJam, 45 44 바이트

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

여기에서 테스트하십시오.

설명

게으른 해결책 : 나선형을 풀고 CJam의 내장 배열 회전을 사용하고 나선형을 다시 롤업하십시오.

]]       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.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.