Входные данные:
Строка
Выход:
1) Сначала мы берем символ удаления в конце входной строки, пока не останемся с квадратом длины (т.е. 1, 4, 9, 16, 25, 36 и т. Д.).
Таким образом, abcdefghijklmnopqrstuvwxyz
(длина 26) становится abcdefghijklmnopqrstuvwxy
( длина 25).
2) Затем мы помещаем это в квадрат, по одной строке за раз, слева направо:
abcde
fghij
klmno
pqrst
uvwxy
3) Мы складываем его во всех четырех направлениях, вот так (мы продолжаем разворачиваться до тех пор, пока внешний свернутый «блок» больше не будет иметь внутренних символов, чтобы развернуться):
m
qrs
l n
ghi
abcde
ihgf jihg
mn lk on lm
srqp tsrq
uvwxy
qrs
l n
ghi
m
Некоторые вещи, на которые следует обратить внимание, когда мы сворачиваемся наружу, мы в основном отражаемся следующим образом (числа, добавленные как пояснение, которое представляет «индексы» в этих примерах):
Когда мы раскладываем левую сторону:
123 to: 321 123
fghij ihgf j
Когда мы сложим правую сторону:
123 to: 123 321
fghij f jihg
Когда мы складываемся вверх:
3q
2l
1g
b to: b
1g 1
2l 2
3q 3
v v
Когда мы складываемся вниз:
b b
1g 1
2l 2
3q 3
v to: v
3q
2l
1g
Правила вызова:
- Можно предположить, что на входе всегда будет хотя бы 1 символ (который также будет выходным).
- Выходной формат гибкий, поэтому вы можете печатать в STDOUT или STDERR; возвращать как строковый массив / список или символьный 2D-массив; одиночная строка с новыми строками; и т.п.
- Ввод будет содержать только буквенно-цифровые символы (
a-zA-Z0-9
) - Вы также можете использовать не алфавитно-цифровой символ для заполнения пробелов в и / или вокруг вывода ASCII-art, как точка
.
. - Завершающие пробелы и одна завершающая новая строка необязательны.
- Мы продолжаем разворачиваться до тех пор, пока у внешнего свернутого «блока» больше не будет центров для раскрытия.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте найти как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
Тестовые случаи:
Input: abcdefghijklmnopqrstuvwxy
Output:
m
qrs
l n
ghi
abcde
ihgf jihg
mn lk on lm
srqp tsrq
uvwxy
qrs
l n
ghi
m
Input: A
Ouput:
A
Input: ThisIsATest
Output:
I
Thi
Is sI
ATe
I
Input: HowAboutAVeryLongExampleWhichIsAlsoAnEvenSquareInsteadOfOddOneAndExceeds64Chars
Output:
An
ch
xamp
i I
o E
quar
steadO
S e
s v
h s
E l
VeryLo
HowAbout
oLyreVA noLyreV
xampl Eg el Examp
hci Is hW As hi Ihc
nAo Ev sl ev so EnA
quare Sn Ie Squar
Odaetsn fOdaets
OddOneAn
steadO
S e
s v
h s
E l
VeryLo
xamp
i I
o E
quar
An
ch
Input: Lenght7
Output:
Le
ng
Input: abc
Output:
a