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.