На днях я шел через тыквенный участок на вечеринку по случаю дня рождения и заметил, что тыквенные лозы имеют изящный узор с вихрями, петлями и ответвлениями. Мы собираемся смоделировать это здесь с помощью некоторого искусства ASCII.
(())
\
p--q p-----q
/ \ / \
(()) b--d (())
Правила строительства лозы
- Существует только одна основная лоза, состоящая исключительно из
\ / - p q b d
персонажей. - Виноградная лоза движется только слева направо по экрану. Другими словами, предположим, что вы муравей, начиная с самого левого персонажа из лозы. По мере продвижения к следующему смежному персонажу на главной лозе вы должны переместиться на один столбец вправо, а не влево.
- Когда лоза меняет направление, один из
p q b d
персонажей должен имитировать цикл.p
Присоединяется лозы путешествие на северо - восток на восток, тоq
на восток на юго-востокеb
с юго - востока на восток иd
с востока на северо - восток. Обратите внимание, что «петля» буквы соединяется с горизонтальной лозой, а «ножка» буквы соединяется с диагональю. - Начало виноградной лозы должно быть одним из
p
илиb
(по вашему выбору, оно не должно быть случайным) и начинается горизонтально. Конец виноградной лозы должен быть однимq
илиd
(ваш выбор не должен быть случайным) и должен заканчиваться горизонтально. - Обратите внимание, что петли могут быть размещены непосредственно рядом с другими петлями (например,
pd
это допустимая подстрока лозы), но это может затруднить размещение тыкв позже. Вы можете захотеть всегда иметь один из- / \
сразу после цикла (как я делал в моих примерах), но это не обязательно.
Тыквенные правила
- Тыквы состоят исключительно из
(())
(этой точной строки). - С главной лозы тыквы прикрепляются ответвлениями. Эти ответвления могут быть прикреплены только к
p q b d
петлям, точно одной\
или/
длиной, и прикреплены к тыкве, так что «конец» ответвления находится посередине. - Они могут соединяться выше или ниже основной лозы.
- Ответвления могут соединяться идущими «слева».
- Только одна тыква может присоединиться к ответвлению, и только один ответвление за цикл.
хаотичность
- При движении в горизонтальном направлении лоза имеет 50% -ную вероятность продолжения в горизонтальном направлении, 25% -ную вероятность поворота на северо-восток и 25% -ную вероятность поворота на юго-восток.
- При движении по диагонали у лозы есть 90% шанс поворота в горизонтальном направлении и 10% шанса по диагонали.
- Должно быть достаточное количество оборотов для поддержки количества вводимых тыкв, хотя допускается большее количество оборотов.
- Как только виноградная лоза построена, тыквы могут быть произвольно размещены в любом углу, который еще не занят тыквой.
- Тыквы не могут перекрывать виноградную лозу или другие тыквы.
Соревнование
Учитывая введенное число, выведите рандомизированный патч тыквы, следуя приведенным выше правилам. Многократное выполнение кода с одним и тем же вводом должно давать разные результаты. Все возможные тыквенные патчи для данного входного номера должны иметь некоторый (не обязательно равный) ненулевой шанс возникновения.
вход
Одно целое число, n
представляющее количество тыкв в патче в любом удобном формате . Для краткости кода вы можете предположить, что ввод 0 < n < 256
.
Выход
Полученный тыквенный патч либо распечатывается / отображается на экране, либо возвращается как строка / массив строк / и т. Д.
правила
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
- Используйте наше стандартное определение «Случайный».
- Либо полная программа или функция приемлемы.
- Стандартные лазейки запрещены.
- Начальные и конечные пробелы / переводы строк являются необязательными.
Примеры
Для ввода n = 3
вот несколько ДЕЙСТВИТЕЛЬНЫХ примеров тыквенного патча, следующего приведенным выше правилам (разделенных пустыми символами новой строки).
(())
\
p--q p-----q
/ \ / \
(()) b--d (())
(()) (())
\ /
b-q (())
\ /
b-q
p-----------------------q (())
/ \ /
(()) b-q
/
(())
Вот некоторые НЕВЕРНЫЕ примеры для ввода n = 3
с объяснениями #
.
(()) (())
/ /
p---q----q
\
(())
# The vine continued horizontally after a loop was placed.
(()(())
\ /
p---q
\
(())
# The pumpkins are both overlapping and sprouting from the same loop.
p----------------q
\ \ \
(()) (()) (())
# The pumpkin is attached to the middle of the vine, not at a loop.
Ответы:
Python 2, 819 байт
Принимает в
n
качестве вводаВсегда размещает pumkpins на «внешних» углах (случайным образом влево / вправо)
Пока строится лоза, добавляются тыквы, и когда там достаточно тыкв, лоза останавливается.
Примеры:
n=4
n=20
источник