Döner Spiraller


12

Karakterlerin bir sarmalını temsil eden bir kare metin verildiğinde, döndürün!

Spiral merkezden başlar ve merkezin solundan başlayarak saat yönünün tersine dış kenara doğru hareket eder :

987
216
345

Bu, dizeye dönüşür 123456789. Döndürme sola yapılır , bu yüzden bir konum döndürürseniz öyle olur 234567891. Bu, aşağıdakilerle temsil edilir:

198
327
456

Giriş

Girdi spiral ve döndürme mesafesinden oluşur.

Mesafe her zaman pozitif bir tamsayı veya sıfır olacaktır ve dilinizin veri türü sınırıyla sınırlandırılabilir.

Spiral, seçtiğiniz bir çizgi sınırlayıcıyla (sınırlayıcı dahil değil) bir dize olarak alınmalıdır. Her zaman bir kare olacak, sınırlayıcılar içermeyecek ve garip bir yan uzunluğa sahip olacak.

Tüm karakterlerin alfasayısal olduğunu varsayın [A-Za-z0-9].

Çıktı

Çıktı döndürülmüş spiraldir. Birden fazla satırda bir kare olmalıdır (basılı veya iade edilmiş olsun).

Örnekler

Giriş

3
tne
atd
bin

Çıktı

bat
nit
den

Giriş

18
efilr
naepo
umshf
tootr
butte

Çıktı

rettu
omseb
oofft
trliu
hpean

Bu kod golf, skor her zamanki gibi bayt olarak sayılır.

Yanıtlar:


6

CJam, 45 44 bayt

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

Burada test edin.

açıklama

Tembel çözüm: Spiralin paketini açın, CJam'ın yerleşik dizi rotasyonunu kullanın, spirali tekrar sarın.

]]       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.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.