Цей конкурс закінчився. Дякуємо за цікаві записи, що не належать до esolang, та вітаю Якову за виграшне подання JavaScript.
У чудовій традиції ASCII Art Challenges на цьому сайті, ось ще одна. Давши вхід, намалюйте спіраль.
&>----v
||>--v|
|||>v||
|||@|||
||^-<||
|^---<|
^-----<
Просто, так? Хе-хе-хе ... Ага ...
(Натхненний публікацією " Крива драконів ASCII" та повідомленнями " Арт- оптимізатор" АССІІ "Мистецтво дня" )
Вхідні дані
Введення буде у вигляді серії параметрів, узятих із звичайного 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
приклад нижче. - Остаточний новий рядок є нормальним, провідні пробіли можуть бути обов'язковими, і так дозволено, але пробіли не допускаються.
- Я не буду стикувати вас, якщо ви використовуєте послідовності втечі, щоб намалювати мистецтво ASCII, що йде до STDOUT, але я буду мовчки розчарований у вас. (Ви все одно отримаєте право на винагороду, якщо будете використовувати їх)
Приклади
2d4
= діаметр 2, починається зі спуску, за годинниковою стрілкою, 4 рекурсії
&@@@@
^<<<<
У цьому прикладі малюнок починається вгорі праворуч @
, йде вниз по одному, вліво, вгору. На цьому етапі ми закінчили 2d
порцію, і так розпочинаємо другу рекурсію, тож у нас є ще одна @
, внизу одна, ліва, вгору одна; потім 3-та рекурсія; потім 4-й і нарешті наш &
.
4rc3
= діаметр 4, починається з руху вправо, проти годинникової стрілки, 3 рекурсії
&--<
v-<|
|@^|<
>--^|
|@^|<
>--^|
|@^|
>--^
У цьому прикладі креслення починається знизу @
, йде праворуч, вгору, спіраль навколо, поки не досягне середини @
і не закінчить 4rc
частину. Потім це повторюється ще два рази, щоб отримати всі 3 запитуваних рекурсії. Зауважте, що це 4rc1
був би лише верхній лівий блок 4x4 цього прикладу.
7u1
= діаметр 7, починається з підйому вгору, за годинниковою стрілкою, 1 рекурсія (зверніть увагу на те, що це введення)
&>----v
||>--v|
|||>v||
|||@|||
||^-<||
|^---<|
^-----<
Перемога та обмеження
Це Code Golf, тому найменша відповідь у байтах виграє. Подання повинні бути у звичайній формі програми / функції / Блок коду CJam / тощо. Застосовуються стандартні обмеження на прорізи. Професійний водій на закритому курсі. Якщо роздратування не зникає, припиніть використання та проконсультуйтеся з лікарем.