Вызов
Мы все знаем о нормальных рождественских елках - но как насчет перевернутой рождественской елки ! Это довольно простой, рождественский тематический вызов. Цель этой задачи - сделать из меня ASCII перевернутую рождественскую елку. Вот правила для этого вызова:
- Примите нечетное, положительное целое число. Вы можете предположить, что это всегда будет между
7
и51
. Основа дерева будет составлена из символов:
___ \ / |
Верх дерева (звезда) будет состоять из одного
*
.Каждая строка дерева будет построена в формате
<?>
где?
любое число-
s. Например, если вы делаете линию длины5
, строка должна быть<--->
. Или если сделать линию длины8
, линия должна быть<------>
.Вот как должно быть построено тело дерева:
Возьмите нечетное число,
n
данное в качестве входных данных, и создайте линию дерева этой длины.Вычтите
4
изn
и создать линию дерева этой длины.Вычтите
2
изn
и создать линию дерева этой длины.Уменьшение
n
на2
. После этого, если нетn
равных5
, вернитесь к шагу 2.
База (см. Шаг 2.) звезда (см. Шаг 3.) и каждая линия дерева (см. Шаги 4. и 5.) должны быть центрированы с использованием исходного ввода нечетного числа (см. Шаг 1.) в качестве максимального ширина.
Примеры / Тестовые случаи
odd number inputed: 7
___
\ /
|
<-----> line length -> 7
<-> line length -> 7 - 4 = 3
<---> line length -> 7 - 2 = 5
*
odd number inputed: 13
___
\ /
|
<-----------> line length -> 13
<-------> line length -> 13 - 4 = 9
<---------> line length -> 13 - 2 = 11
<-----> line length -> 11 - 4 = 7
<-------> line length -> 11 - 2 = 9
<---> line length -> 9 - 4 = 5
<-----> line length -> 9 - 2 = 7
<-> line length -> 7 - 4 = 3
<---> line length -> 7 - 2 = 5
*
odd number inputed: 9
___
\ /
|
<-------> line length -> 9
<---> line length -> 9 - 4 = 5
<-----> line length -> 9 - 2 = 7
<-> line length -> 7 - 4 = 3
<---> line length -> 7 - 2 = 5
*
odd number inputed: 17
___
\ /
|
<---------------> line length -> 17
<-----------> line length -> 17 - 4 = 13
<-------------> line length -> 17 - 2 = 15
<---------> line length -> 15 - 4 = 11
<-----------> line length -> 15 - 2 = 13
<-------> line length -> 13 - 4 = 9
<---------> line length -> 13 - 2 = 11
<-----> line length -> 11 - 4 = 7
<-------> line length -> 11 - 2 = 9
<---> line length -> 9 - 4 = 5
<-----> line length -> 9 - 2 = 7
<-> line length -> 7 - 4 = 3
<---> line length -> 7 - 2 = 5
*
правила
- Применяются стандартные лазейки .
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах!
repeat the above steps until the odd number minus 2 equals 5
- в первом входе нечетное число равно 7, и 7-2 = 5, поэтому дерево должно заканчиваться мгновенно (я знаю, что вы имеете в виду, но оно нуждается в перефразировании)7
минимальным входным значением, вы должны сначала создать три линии дерева (подэтапы .1.1, .1.2, .1.3), затем вычесть2
нечетное число и проверить, равно ли оно5
. Инструкция для проверки того, что «нечетное число минус 2 равно 5» находится в конце, остальные три шага должны быть выполнены в первую очередь. Но чтобы ответить на ваш первый комментарий, это было бы хорошо.7
качестве входных данных или вы можете принять4
, как в четвертом нечетном числе (или3
если оно индексировано 0).Ответы:
Python 3 ,
12712110510310098 байтЭто безымянная лямбда-функция, которая возвращает список строк:
Попробуйте онлайн!
Основная часть этого ответа -
(o-i+2-i%2*3)
это количество штрихов в строке. Остальная часть ответа просто превращает это в желаемое ASCII-искусство.Большое спасибо мистеру Xcoder за то, что он побрил 6 байтов и обсудил со мной игру в гольф в чате.
Спасибо также Линн за то, что заметил, что
3*(i%2)
может быть наi%2*3
2 байта короче!источник
f
строкиo-i+2-i%2*3
сохраняет два байта.C 163 байта
Попробуйте онлайн!
раскатали:
источник
Протон , 83 байта
Спасибо FlipTack за сохранение 4 байта и за сотрудничество в чате (на самом деле мы формируем отличную команду). Косвенно сэкономлено 2 байта благодаря Линн .
Попробуйте онлайн!
источник
Древесный уголь , 28 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Распечатать базу.
Цикл от половины входного номера до 1.
Выведите две строки: первая с одним большим,
-
чем индекс цикла, вторая с одним меньшим.Зеркало для завершения дерева.
Поместите звезду.
источник
SOGL V0.12 ,
3530 байтПопробуй здесь!
Использует алгоритм древесного угля Нейла , принимает входные данные в качестве индекса в нечетных числах - поэтому 13 будет соответствовать входным 7
источник
Сетчатка , 89 байт
Попробуйте онлайн! Пояснение: Первый этап преобразует ввод в унарный и добавляет a
>
. Второй этап заменяет два-
s на a,<
чтобы скорректировать длину строки. Третий этап затем копирует ветвь, но немного короче каждый раз, пока ветвь не может быть сокращена дальше. Заключительный этап добавляет базу и звезду.источник
Javascript 506 байт
Гольф-версия:
Ungolf-версия:
Использование:
console.log(tree(13)), console.log(tree(17)),
ES6 165 байт (от моего друга)
Гольф-версия:
Ungolf-версия:
Использование:
p(31); p(17);
источник
const
PowerShell , 131 байт
Попробуйте онлайн!
Что ж, это беспорядок для тех, кто не знаком с PowerShell ... так что давайте посмотрим, насколько хорошо я могу объяснить, как это работает.
Для объяснения я буду использовать
input = 17
.Мы начнем достаточно просто, установив вспомогательную переменную
$i=2
и установив$x
в<something>
,<something>
начиная с диапазона в диапазоне от входа$args
до5
, так17,16,15,...,6,5
. Этот диапазон закачивается в цикл.Каждую итерацию мы начинаем с установки вспомогательной переменной
$j
в качестве результатаif
оператораif($_%2){$i-2}else{($i++)}
. Если это странно$j=$i-2
, иначе$j=($i++)
. Это, в сочетании с$i=2
в начале, дает нам последовательность0, 2, 1, 3, 2, 4, 3, 5...
которая, как оказалось, точно соответствует тому, сколько пространств нам нужно добавить к нашей линии дерева. ;-) Мы берем' '
и умножаем на это число.Далее нам нужны наши филиалы. Это делается с умножением
'<'
плюс средняя часть'-'
плюс конец'>'
. Умножение сделано, признавая, что-
альтернатива в2, 5, 2, 5, 2...
шаблоне на основе входного числа$_
, поэтому мы выбираем из псевдо-троичного типа на основе этого шаблона.Для дальнейшего пояснения, вот первые пара терминов в каждом разделе:
Итак, теперь мы установили
$x
массив ветвей (т. Е. Строк). Вне цикла мы теперь строим наше дерево "top" с соответствующим количеством сохраненных пробелов$y
, затем отображаем наши ветви$x
, а затем дерево "bottom" с*
. Каждый из них остается в конвейере, и вывод неявный с новой строкой между элементами.источник
JavaScript (ES6),
150147 байтПоказать фрагмент кода
источник
Холст , 28 байтов
Попробуй это здесь!
Порт моего ответа SOGL, который является портом ответа Нейла Уголь.
источник
Моя попытка JS ESGoogoltriplex.
Показать фрагмент кода
источник