Введение
Алиса - это двумерный язык Мартина Эндера, который имеет два разных режима исполнения: кардинальный и порядковый . Когда указатель инструкций проходит через зеркало (либо, /
либо \
), он переключается из одного режима в другой.
В этой задаче мы сосредоточимся на порядковом режиме, где команды работают со строками, а указатель инструкций перемещается по диагонали, отскакивая от краев кода.
Простые программы, работающие только в обычном режиме, могут быть написаны в довольно компактном стиле, как в следующем примере:
/fbd/
@aec\
При этом IP - запускается в режиме кардинального от первой ячейки на востоке, проходит через первое зеркало и начинает двигаться по диагонали , и отражаясь, выполнение команд a
, b
и c
. Затем он встречает на северо-востоке зеркала , которое делает его идти на юг по направлению к другому зеркалу , а затем начать прыгающую спину к западу, встречая команды d
, e
, f
, и , наконец @
, которая завершает программу.
Такая структура довольно компактна, но ее нелегко писать и поддерживать (добавление одной команды может заставить нас переупорядочить большую часть кода!), Поэтому я бы хотел, чтобы вы помогли мне с форматированием.
Задание
Учитывая последовательность команд, где каждая команда представляет собой один печатный символ ASCII, переупорядочьте их в две строки, чтобы можно было прочитать первую половину последовательности, начиная с первого символа второй строки, а затем перемещаться всегда по диагонали вправо, в то время как вторую половину можно прочитать, взяв оставшиеся символы справа налево. Не беспокойтесь о зеркалах и символе завершения, я добавлю их сам.
Так, например, при заданном входе abcdef
вы должны вывести
fbd
aec
В случае, если ввод имеет нечетную длину, вы должны добавить один пробел (который является алисом в Алисе) в любом месте, при условии, что последовательность встречаемых команд остается неизменной. Вы также можете выбрать вывод двух строк, различающихся по длине на один символ, и в этом случае более короткая считается имеющей один пробел в конце.
правила
Это Код-гольф, самый короткий ответ, в байтах, выигрывает!
- Вы можете вводить / выводить с помощью любого из методов ввода / вывода по умолчанию
- Ввод состоит из одной строки печатных символов ASCII
- В выводе допускается один завершающий символ новой строки
- Некоторые выходные данные вашей программы могут работать не совсем корректно при запуске в качестве программ Алисы (например, если пробел вставляется в строковый литерал). Вам не нужно беспокоиться о таких ситуациях
- Стандартные лазейки запрещены
Контрольные примеры
--Input
abcdef
--Output
fbd
aec
--Input
123
--Output
2
13
OR
31
2
OR
3
12
OR
32
1
--Input
O
--Output
O
OR
O
--Input
"Hello, World!"o
--Output
oH!lloo
""edlr,W
--Input
i.szR.szno
--Output
o.zz.
inssR
--Input
" ^^} .~[}.~~[}{~~{}[^^^^.""!}"r.h~;a*y'~i.*So
--Output
o *^i}'.*[;.h~r}}~"{.[^
"S .^~ y~a}~~.["{!~"}^^^
(Odd length, your solution may be different)
Желе ,
2322 байта-1 байт благодаря Льву (нижний левый может быть дополнением)
Полная программа печати результата (монадическая ссылка возвращает список списков списков символов).
Попробуйте онлайн! или посмотрите набор тестов .
Как?
источник
JavaScript (ES6), 104 байта
Работает, эмулируя путь выполнения и заполняя команды по мере поступления.
источник
1&~i
Достигает вертикальные зигзагообразный, в то время какi+i>l?l-i:i
достигает полпути зеркала. Как только все команды введены в желаемые позиции выполнения, массив затем собирается вместе для получения желаемого результата.