Учитывая квадратную строку, производите весь вывод для строки на каждом этапе развертывания.
Струна должна развернуться по часовой стрелке на четверть оборота за раз.
Примеры
Вход :
A
Выход :
A
Примечание : я также приму дублированный ввод для этого конкретного теста, только если это поможет уменьшить количество байтов.
Вход :
DC
AB
Выход :
DC
AB
D
ABC
ABCD
Вход :
GFE
HID
ABC
Выход :
GFE
HID
ABC
HG
IF
ABCDE
IH
ABCDEFG
I
ABCDEFGH
ABCDEFGHI
Вход :
JIHG
KPOF
LMNE
ABCD
Выход :
JIHG
KPOF
LMNE
ABCD
LKJ
MPI
NOH
ABCDEFG
NML
OPK
ABCDEFGHIJ
ON
PM
ABCDEFGHIJKL
PO
ABCDEFGHIJKLMN
P
ABCDEFGHIJKLMNO
ABCDEFGHIJKLMNOP
правила
Это код-гольф, поэтому выигрывает самый короткий код в байтах.
- Любой разумный формат может быть использован для ввода-вывода, если он согласован.
- Пробелы должны использоваться для заполнения верхних строк вывода.
- Должен быть в состоянии обрабатывать ввод всех печатных символов (включая пробел:
\x20
-\x7e
):
!.? "# $% & '() * +, - / 0123456789:; @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _` АБВГДЕЖЗИКЛМНОПРСТУФХЧШЭЮЯ {|} ~
- Пробелы в начале / конце разрешены.
- Вы можете предположить, что строка всегда будет квадратной.
- Все стандартные лазейки запрещены.
Вдохновение: Напишите квадратную программу, которая выводит количество раз, когда она была «развернута» .
["A","A"]
для"A"
, как и моя программа (вместо["A"]
)? Это кажется мне разумным, поскольку они являются лишь начальной и конечной позициями, и вы пытаетесь развернуть его только один раз.Ответы:
SOGL V0.12 ,
2120191817 байтовПопробуй здесь! (
→
добавлено, потому что это ожидает ввода в стеке)Объяснение:
источник
Python 2 ,
209 207 205 203 202 201 200196 байтов-4 байта благодаря @Quelklef !
Попробуйте онлайн!
Python 2 ,
219 217 215 213 212 211207 байтПопробуйте онлайн!
Первый выводит в виде списка строк, второй выводит как ASCII-art.
источник
[::-1][1:]
может быть[-2::-1]
, как в ответе Линн.Древесный уголь ,
4235 байтПопробуйте онлайн! Ссылка на подробную версию кода. Редактировать: Сохранение 7 байтов в основном путем переключения с символьных массивов на строки. Объяснение:
Считайте входной квадрат как массив строк в переменную
q
.Пока последняя строка в массиве не пуста, удалите ее.
Распечатайте остальную часть массива.
Поверните оставшуюся часть массива, просматривая каждый символ последней строки и присоединяя
l
символ th каждой оставшейся строки в обращенном массиве.Добавьте ранее удаленную последнюю строку
u
, в которой хранится развернутое значение, и напечатайте его.Выведите результат, а затем очистите холст, готовый к следующей итерации.
Обратите внимание, что эта версия выводит окончательное развертывание в отдельной строке, если это нежелательно, тогда для 38 байтов:
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
←E⁺⟦⪫υω⟧⮌θ⮌κ
переворачивает текущий массив, добавляет к развернутой строке, затем переворачивает символы в каждой строке, затем печатает все в обратном порядке, что дает желаемый результат.источник
Rotate
иTrim
команды оставить курсор ...Haskell ,
127120 байтовПопробуйте онлайн!
Входной список строк, например ,
["DC","AB"]
для второго теста вывести список списков строк:[["DC","AB"],[" D","ABC"],["ABCD"]]
. Используйте,mapM (putStrLn . unlines)
чтобы красиво распечатать результат.Изменить: Сохранение 7 байтов, заметив, что короче, что
transpose
я нашел некоторое время, когда идет ход, пригодится, потому что он может быть изменен, чтобы обратить каждый транспонированный непосредственно.источник
05AB1E , 18 байт
Попробуйте онлайн!
объяснение
источник
J, 62 байта
Попробуйте онлайн!
Я уверен, что это может быть много в гольфе. Это печатает лишние пробелы, но только из-за способа, которым J форматирует массивы, содержащиеся в выведенном массиве, чтобы иметь одинаковую форму.
Я думаю, что как только я пойду и прокомментирую, что именно я делаю, у меня может появиться лучшее представление о том, как играть в гольф (сделав это сейчас, я не знаю ...). В целях игры в гольф стоит отметить, что
объяснение
Разгадывая это, я разделю основную функцию на три части.
Мы будем работать со вторым тестовым примером.
unfurl_reversed
Это дает один раз развернутую строку, но в обратном порядке. Все это выполняется в обратном порядке и в определенном порядке, так что способ, которым J автоматически дополняет строки пробелами, чтобы соответствовать форме массива, в котором они находятся, даст правильный интервал.
|:@}:
транспонирование свертки ввода|.@{:
обратная сторона хвоста вводаЯ думаю, вы можете видеть, что мы хотим сделать: мы хотим добавить обратную сторону хвоста к последней части транспонирования свертывания (это полный рот, но в основном присоединяется
CBA
к концуED
). Это даст нам один шаг разворачивания, обратный.(}:@],{:@],[)
делает именно этоОн присоединяет
CBA
кED
, затем присоединяется , что с остальной частью массива. Поэтому наша продукцияwhitespace_filter
По сути, это проверяет, является ли какая-либо строка полностью пробелом, и удаляет ее, если она есть. Он ничего не делает для первой итерации контрольного примера.
Это необходимо (по крайней мере, пока я не найду альтернативу), так как в противном случае мы в конечном итоге развернем пробелы в нашей выходной строке.
раскрываться
Unfurl в основном объединяет другие функции и особые случаи односимвольных вводов.
Когда сила глагола (
^:
) получает пустое поле (a:
), он применяет функцию к входу, пока не сойдется и не соберет результаты в массив.(1 < #)
проверяет, что строки всегда больше 1 (для особых случаев 1 для ввода строки).|."1
инвертирует каждую строку, поэтому инвертирует результатыwhitespace_filter @: unfurl
.источник
Python 2 ,
143132 байтаПопробуйте онлайн!
На каждой итерации
b
«голова» строки (первые n − 1 строк) поворачивается на 90 градусов: еслиa
есть,[" NML", " OPK", "ABCDEFGHIJ"]
тоb
есть["ON", "PM", "KL"]
.Чтобы развернуть строку один раз, мы добавляем последнюю строку
b
кa[-1]
(give"ABCDEFGHIJKL"
), а затем заново вычисляемa[:-1]
, добавляя пробелы к остальным строкам вb
.Мы заканчиваем, пытаясь выскочить,
b
когда он пуст.Python 2 , 132 байта
Попробуйте онлайн!
Та же идея, написанная по-другому. Мы завершаем, пытаясь,
a.pop(-2)
когдаa
имеет только один элемент.источник
Perl 5 , 155 байт
Попробуйте онлайн!
Сохранено несколько байтов без изменения логики. Поток ниже все еще в основном правильный.
# Perl 5 , 163 байтаПопробуйте онлайн!
Как?
источник