Для целей этого вопроса кривая меандрирования представляет собой кривую, которая следует общему направлению слева направо, но многократно поворачивает n + 1 на 90 градусов влево, а затем n + 1 поворачивает вправо (для n> 0).
Фактически у самого меандра будут n
сегменты.
Повороты обозначены с +
.
Ширина меандров (расстояние между двумя +
) составляет 3 на горизонте ( ---
) и 1 на вертикали ( |
)
Вот отдельные сегменты извилистой кривой с размерами n от 1 до 5:
+-------------------+
| |
+---------------+ | +-----------+ |
| | | | | |
+-----------+ | +-------+ | | | +---+ | |
| | | | | | | | | | | |
+-------+ | +---+ | | +---+ | | | +---+ | | |
| | | | | | | | | | | | | |
+---+ +---+ | +---+ | | +-------+ | | +-----------+ | |
| | 1 | | 2 | | 3 | | 4 | | 5
---+ +-------+ +-----------+ +---------------+ +-------------------+ +
Вызов:
Учитывая два положительных числа n
и m
, нарисуйте m
отрезки извилистой кривой с размером n
. Вы можете написать полную программу или функцию.
Входные данные:
n
> 0 Размер кривой
m
> 0 Количество сегментов для рисования
Выход:
Представление ASCII меандрирующей кривой.
Примеры:
n = 3
m = 2
+-----------+ +-----------+
| | | |
| +---+ | | +---+ |
| | | | | | | |
+---+ | | +---+ | |
| | | |
-----------+ +-----------+ +
n = 2
m = 5
+-------+ +-------+ +-------+ +-------+ +-------+
| | | | | | | | | |
+---+ | +---+ | +---+ | +---+ | +---+ |
| | | | | | | | | |
-------+ +-------+ +-------+ +-------+ +-------+ +
n = 4
m = 4
+---------------+ +---------------+ +---------------+ +---------------+
| | | | | | | |
| +-------+ | | +-------+ | | +-------+ | | +-------+ |
| | | | | | | | | | | | | | | |
| +---+ | | | +---+ | | | +---+ | | | +---+ | |
| | | | | | | | | | | | | | | |
+-------+ | | +-------+ | | +-------+ | | +-------+ | |
| | | | | | | |
---------------+ +---------------+ +---------------+ +---------------+ +
Критерии победы:
Это код-гольф , поэтому выигрывает самый короткий код в байтах на каждом языке. Пожалуйста, объясните свой код, если у вас есть время, чтобы сделать это.
n
осталось повороты?n+1
при рассмотрении примеров, особенно между отдельными сегментами ..Ответы:
Древесный уголь ,
523433 байтаПопробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Введите размер меандра.
Поверните вверх, поскольку рисунок начинается справа и работает влево.
Зациклиться на желаемое количество меандров.
Зациклить сегменты меандра.
Распечатать а
+
.k
Чередуйте удвоение и четырехкратное увеличение длины, поскольку горизонтальные линии в два раза длиннее, но уменьшайте результат перед печатью, чтобы учесть только
+
что напечатанное.Поверните соответственно для следующего сегмента.
источник
APL (Dyalog Classic) ,
10810195 байтПопробуйте онлайн!
источник
Python 3 ,
371354346328298290 байт-20B благодаря потолку
Попробуйте онлайн!
Pre-гольф:
источник
C (gcc) ,
559 540 523 511 494 484 476 468 456 447443 байтаПопробуйте онлайн!
Немного меньше в гольф
источник
Dash - скрипт POSIX Shell, 528 байт
Попробуйте онлайн!
golfed:
ungolfed:
источник
Python 2 , 261 байт
Попробуйте онлайн!
5 байт из этого наконечника по Esolanging фруктов .
источник