Введение
Кактусы бывают разных размеров, форм и цветов. Тем не менее, самым знаковым кактусом и обязательным элементом в каждом западном регионе должен быть сагуаро . Важными особенностями являются его размер и руки, которые определили стереотипный внешний вид кактуса.
Ваша задача - принести сагуаро в мир ASCII. Однако, как и в реальном мире, ни один saguaro не похож на другой, поэтому ваша программа должна иметь возможность генерировать saguaros с различными конфигурациями рук.
Пример сагуаро
- Ввод:
[0b10, 0b11]
([2, 3]
в десятичном виде, длина ввода2
)
_
/ \
_ | |
/ \ | |
| | | |
\ \_| |
\__ |
\ |
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
| |
| |
Характеристики
У сагуаро всегда есть основание и верх, с переменным количеством ствола между ними. У частей стебля не может быть рук, рука справа, одна слева или две руки.
Модели роста Saguaro представлены в виде входного списка, содержащего двухбитовые значения. 00
означает отсутствие рук, 01
руку справа, 10
руку слева и 11
две руки (все в двоичном виде). Длина списка ввода определяет высоту saguaro.
Разделы Saguaro выглядят следующим образом. Части кактуса окружены октоторпами, #
для ясности, которые не должны быть напечатаны.
Высота сагуаро всегда равна 4+6*k
символам для неотрицательных целых чисел k
.
#############
# _ # Saguaro top
# / \ #
#############
# _ | | _ # Stem, both arms
#/ \ | | / \# Stem id: 11
#| | | | | |#
#\ \_| |_/ /#
# \__ __/ #
# \ / #
#############
# _ | | # Stem, left arm
#/ \ | | # Stem id: 10
#| | | | #
#\ \_| | #
# \__ | #
# \ | #
#############
# | | _ # Stem, right arm
# | | / \# Stem id: 01
# | | | |#
# | |_/ /#
# | __/ #
# | / #
#############
# | | # Stem, no arms
# | | # Stem id: 00
# | | #
# | | #
# | | #
# | | #
#############
# | | # Saguaro base
# | | #
#############
вход
Как было сказано ранее, входные данные состоят из списка двухбитных значений ( 0, 1, 2, 3
в десятичном формате ). Это может быть дано в любом разумном формате. Первый элемент списка соответствует самой верхней части ствола saguaro, второй элемент - его второй самой высокой части ствола и т. Д.
Если вы хотите, вы можете запросить длину входного списка в качестве дополнительного ввода. Пожалуйста, укажите это в своем ответе, если вы это сделаете.
Выход
Ваш вывод ASCII saguaro должен быть построен с использованием точных частей ствола, как описано выше. Конечные пробелы в строке и конечные новые строки игнорируются; Вы можете напечатать больше, меньше или столько, сколько указано выше.
правила
Контрольные примеры
- Выброс. Входные данные:
[0b01, 0b00, 0b01, 0b11]
_
/ \
| | _
| | / \
| | | |
| |_/ /
| __/
| /
| |
| |
| |
| |
| |
| |
| | _
| | / \
| | | |
| |_/ /
| __/
| /
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
| |
| |
- Чередование рук. Входные данные:
[0b10, 0b01, 0b10]
_
/ \
_ | |
/ \ | |
| | | |
\ \_| |
\__ |
\ |
| | _
| | / \
| | | |
| |_/ /
| __/
| /
_ | |
/ \ | |
| | | |
\ \_| |
\__ |
\ |
| |
| |
- Изобилие оружия. Входные данные:
[0b11, 0b11]
_
/ \
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
| |
| |
- Нет оружия, также известный как копье. Входные данные:
[0b00]
_
/ \
| |
| |
| |
| |
| |
| |
| |
| |
- Нет тела, некоторые называют это молодым кактусом. Входные данные:
[]
_
/ \
| |
| |
источник
4 1 0 1 3
)Ответы:
Древесный уголь ,
5049 байтовПопробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Нарисуй верх.
Зациклиться на каждой стороне.
Прыгайте прямо под правую сторону вершины.
Обмотайте каждую часть стебля.
Проверьте, есть ли рука.
Если это так, распечатайте руку.
В противном случае просто напечатайте вертикальную линию.
После печати стебля распечатайте основание.
Отражение готово нарисовать другую сторону. Как только обе стороны нарисованы, стороны затем возвращаются в свое окончательное положение.
источник
JavaScript (ES6), 210 байт
Я потратил слишком много времени на другое решение, прежде чем понял, что есть лучший способ, который не оставил мне столько времени, сколько мне бы хотелось поработать над этим.
Попытайся
источник
00,01,10,11
качестве ввода вместо двоичного ввода или0,1,2,3
. с использованием тестовых случаев OP это не удается.Python 2 , 189 байт
Попробуйте онлайн!
источник
Python 2 ,
256253 ... 205203199 байтПопробуйте онлайн!
источник
for ...:\n r...\n r...
->for ...:r...;r...
сохраняет три байта.PowerShell , 235 байт
Попробуйте онлайн!
PowerShell не имеет
map
илиzip
или действительно простой способ перевернуть строки, поэтому у нас есть кое-что еще - простая замена повторяющихся разделов.Первые две строки принимают входные данные как массив целых чисел и выводят вершину кактуса. Затем мы перебираем
$a
и выбираем массив из четырех строк на основе текущего значения. Эти строки остаются на конвейере, а затем мы используем нашу,-replace
чтобы заполнить соответствующие места. Затем мы помещаем дно кактуса на трубопровод.Все собирается из конвейера, и неявное
Write-Output
происходит при завершении программы, вставляя новую строку между каждым элементом.источник
05AB1E ,
7675 байтПопробуйте онлайн!
источник
Java (OpenJDK 8) ,
626566499466398312310308 байтМожно сыграть в тонну
Попробуйте онлайн!
источник
{j=e>1;k=e%2>0;n+=(k?" _ |":g)+(j?" | _,":r)+
кn+=((k=e%2>0)?" _ |":g)+((j=e>1)?" | _,":r)+
и удалению закрытия}
этого для петли , а также.1
и2
.SOGL V0.12 ,
565453 байтПопробуй здесь!
Объяснение:
источник