Напишите программу или функцию, которая принимает непустую однострочную строку печатных символов ascii, исключая пробел:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Вы можете предположить, что ввод действителен.
Основываясь на вводимых данных, нарисуйте новую строку, расположенную на текстовой сетке пробелов и новых строк, следуя правилам графики черепах, где черепаха всегда занимает одну ячейку сетки и может смотреть только на кардинальные направления.
Выведите первый символ входной строки в текстовую сетку. Черепаха начинается здесь лицом к правой стороне. Выполните итерации по остальным символам во входной строке (останавливается, только если черепаха застрянет), повторяя этот процесс:
Если все 4 ячейки сетки, непосредственно соседствующие с черепахой, заполнены (т.е. ни одно из них не является пробелом), прекратите итерацию. Черепаха застряла, и решетка настолько полная, насколько это возможно.
Посмотрите на текущий символ на входе по сравнению с предыдущим символом:
Если текущий символ лексически предшествует предыдущему, поверните черепаху на четверть оборота влево.
Если текущий символ лексический после предыдущего, поверните черепаху на четверть оборота вправо.
Если текущий персонаж равен предыдущему, не поворачивайте черепаху.
Если пространство сетки, с которой сталкивается черепаха, не является пустым (то есть не пространством), несколько раз поверните черепаху на четверть оборота влево, пока она не окажется перед пустым пространством сетки.
Переместите черепашку на один шаг вперед в направлении, в котором она стоит, и напечатайте текущего персонажа на сетке в новом месте черепахи.
Выведите или верните полученную текстовую строку сетки без посторонних строк или столбцов пробелов. Строки могут иметь пробелы до самого правого столбца с пробелом, но не дальше. Один трейлинг-перевод строки разрешен.
Самый короткий код в байтах побеждает.
пример
Вот все шаги ввода spattuuxze
. Эти ^V<>
символы показывают направление черепаха сталкивается, они не часть входа или выхода.
s>
^
p
s
<ap
s
^
t
ap
s
^
t
t
ap
s
tu>
t
ap
s
tuu>
t
ap
s
tuu
t x
apV
s
tuu
<zx
ap
s
В этот момент черепаха застревает, поэтому ее e
никогда не распечатывают, и в итоге получается:
tuu
tzx
ap
s
Ниже приведен аналогичный, но недействительный вывод, поскольку в нем есть ненужный начальный столбец пробелов:
tuu
tzx
ap
s
Тестовые случаи
spattuuxze
tuu
tzx
ap
s
spattuuxxze
tuu
t x
apx
sze
1111111
1111111
ABCDEFGHIJKLMNOP
PEFG
ODAH
NCBI
MLKJ
`_^]\[ZYXWVUTSR
^_RS
\]`UT
[ZWV
YX
Woo!
W
o
o!
woo!
!o
o
w
Wheeee
W
heeee
banana
a
an
an
b
Turtle
T
ure
tl
turTle
e
tTl
ur
(Скажите мне прямо сейчас, если какой-либо из них кажется неправильным.)
PONMLKJIHGFEDCBA
, так как результат не просто квадрат и контрастирует с тем,ABCDEFGHIJKLMNOP
чтобы выделить асимметрию в правилах.Ответы:
Groovy (357 байт)
Внешние черепахи не использовались и черепахам не причиняли вреда.
Попробуйте это здесь: https://groovyconsole.appspot.com/edit/5115774872059904
Предыдущие попытки
Groovy (397 байт)
https://groovyconsole.appspot.com/script/5179465747398656
источник
Java,
408406 байтФункция получает входные данные в виде строки и возвращает результат в виде строки.
Внутренне он использует массив двумерных символов для хранения букв и сохраняет минимальные и максимальные столбцы и строки, используемые для возврата использованного подмассива.
Итак, в итоговой строке нет начальных столбцов пробелов, но есть конечные пробелы до самого правого столбца с непробельным символом. Новая строка добавляется в конце.
Любые предложения по гольфу больше приветствуются :-)
источник
%
является остатком в java, и оно может быть отрицательным, что нежелательно. Спасибо за предложения :-)Python3,
419414 байтисточник