Этот конкурс окончен. Спасибо за интересные записи, не относящиеся к esolang, и поздравляю Jakuje за его успешное представление JavaScript.
В великой традиции ASCII Art Challenges на этом сайте, вот еще один. Учитывая вход, нарисуйте спираль.
&>----v
||>--v|
|||>v||
|||@|||
||^-<||
|^---<|
^-----<
Просто, да? Хе-хе-хе ... Да ...
(Вдохновлено постом ASCII Dragons Curve и постами Оптимизатора ASCII Art of the Day )
вход
Ввод будет выполнен в виде последовательности параметров, взятых из обычного STDIN / аргумента функции / и т. Д., Независимо от вашего языкового эквивалента, состоящего из четырех частей. Этими частями могут быть четыре отдельных аргумента: четверка, массив размера 4 и т. Д. Для простоты и согласованности на протяжении всего задания я буду представлять входные данные в виде одного слова.
- Целое число,
2 ≤ x ≤ 20
которое определяет размер спирали в терминах «квадратов», причем каждый напечатанный символ представляет один «квадрат» в размере. Теоретически это может быть огромным по объему, но, учитывая, что мы рисуем искусство ASCII, безопасным верхним пределом для него будет 20, так что он будет несколько прилично помещаться на экране. - Отдельная буква
d u r
илиl
, указывающая начальное движение от начального «квадрата» (вниз, вверх, вправо, влево). - Необязательный
c
, указывающий «против часовой стрелки». Еслиc
опущен, предположите вращение по часовой стрелке для спирали. - Конечное целое число,
1 ≤ y ≤ 10
которое указывает, сколько раз повторять рисунок спирали, используя завершающий «квадрат» предыдущей спирали в качестве начального «квадрата» новой. Я выбираю верхний предел 10, потому что я хочу, чтобы рисунок закончился в какой-то момент. - Несколько примеров ввода:
20lc5
13d2
2rc1
Интересно отметить, что нечетные значения для ввода размера @
всегда будут точным центром спирали, но четные значения могут иметь начальное «квадратное» смещение в любом из четырех диагональных направлений, в зависимости от направления начального путешествовать. Это может привести к некоторым ... интересным ... шаблонам. Смотрите два четных примера ниже.
Ввод, который не соответствует спецификации ввода (например, 11q#s
), не определен, и я полностью ожидаю, что программа соответствующим образом заблокируется. :)
Выход
Вывод - это вывод ASCII для печати через эквивалентный языку STDOUT со следующими спецификациями:
- Начальный «квадрат» (каждой рекурсии) должен быть отмечен знаком «at»
@
. - Окончательный «квадрат» должен быть отмечен амперсандом
&
. В случае множественных рекурсий должен быть отмечен только самый последний «квадрат»&
. - Углы спирального пути необходимо «указать» в направлении движения, используя
< > v ^
. - Вертикальное перемещение нужно проводить по трубам
|
. - Горизонтальное перемещение должно быть нарисовано тире
-
. - «Квадраты», которые перезаписываются последующими рекурсиями, должны отображать самое последнее направление движения. Это приведет к тому, что «более новые» рекурсии окажутся слоями поверх «более старых» рекурсий. Смотрите
4rc3
пример ниже. - Последний завершающий перевод строки в порядке, начальные пробелы могут быть обязательными, и поэтому допускаются, но завершающие пробелы не допускаются.
- Я не буду пристыковывать вас, если вы используете escape-последовательности, чтобы нарисовать ASCII-арт, идущий в STDOUT, но я буду молча разочарован в вас. (Вы все равно будете иметь право на получение награды, если будете ее использовать)
Примеры
2d4
= диаметр 2, начинается с спуска, по часовой стрелке, 4 рекурсии
&@@@@
^<<<<
В этом примере рисунок начинается в правом верхнем углу @
, идет вниз, слева, вверх, вверх. К этому моменту мы закончили 2d
часть и, таким образом, начинаем 2-ю рекурсию, так что у нас есть еще один @
, вниз один, слева один, вверх один; затем 3-я рекурсия; потом 4-й и наконец наш &
.
4rc3
= диаметр 4, начинается с направления вправо, против часовой стрелки, 3 рекурсии
&--<
v-<|
|@^|<
>--^|
|@^|<
>--^|
|@^|
>--^
В этом примере рисунок начинается снизу @
, идет вправо вверх, вверх по спирали, пока не достигнет середины @
и не завершит 4rc
часть. Затем это повторяется еще два раза, чтобы получить все 3 запрошенных рекурсии. Обратите внимание, что 4rc1
это будет только верхний левый блок 4x4 этого примера.
7u1
= диаметр 7, начинается с подъема, по часовой стрелке, 1 рекурсия (обратите внимание, что это то же самое, что и вступление)
&>----v
||>--v|
|||>v||
|||@|||
||^-<||
|^---<|
^-----<
Победа и ограничения
Это Code Golf, поэтому выигрывает самый маленький ответ в байтах. Материалы должны быть в обычной форме: программа / функция / блок кода CJam / и т.д. Применяются стандартные ограничения для лазеек. Профессиональный водитель на закрытом курсе. Если раздражение не проходит, прекратите использование и обратитесь к врачу.