Возможно, вы видели Лестницу Иакова в детских научных музеях. Если вы не знакомы с тем, как они выглядят, есть несколько изображений и видео примеров на сайте Wikimedia Commons . Задача сегодня - создать анимированную версию электрического гаджета в формате ASCII. В итоге все должно выглядеть примерно так:
Лестница Строительство
Вот основная форма лестницы с высотой ( H ) 6:
6 \ /
5 \ /
4 \ /
3 \ /
2 \ /
1 \ /
0 ¯¯
Числа слева просто указывают номер строки для этого примера и не должны быть включены в выходные данные. Мы будем ссылаться на данную строку по ее номеру ( R ). Строка 0 является нижней ¯¯
. Каждый ряд с 1 по H состоит из четырех частей:
- Пробел
(U + 0020) повторяется ( H - R ) раз
- Обратная косая черта
\
(U + 005C) - Пробел
(U + 0020) повторяется (2 * R ) раз
/
Косая черта (U + 002F)
Строка 0 идентична, за исключением того, что обе косые черты заменены макроном ¯
(U + 00AF). Конечный пробел в конце каждой строки или под лестницей в порядке. Ведущие пробелы нет.
Строительство дуги
Как только лестница построена, вы можете создать дуги между левой и правой стороной. Одна дуга полностью находится в ряду и заменяет пробелы между ведущим \
и конечным /
. Следовательно, строка 2 будет иметь 4 символа в своей дуге, строка 3 будет иметь 6 и так далее. Каждая дуга составлена с использованием следующих правил:
- Единственные допустимые символы:
_/¯\
(U + 005F, U + 002F, U + 00AF, U + 005C) - Чтобы обеспечить гладкий внешний вид, любой
¯
или/
должен сопровождаться¯
или\
- Чтобы обеспечить гладкий внешний вид, любой
_
или\
должен сопровождаться_
или/
- Два приведенных выше правила относятся и к краям лестницы.
- Три приведенных выше правила фактически означают, что первый символ в дуге должен быть
_
или,/
а последний символ должен быть_
или\
(\¯\_//
недопустимо на обоих концах, но\_/¯\/
все в порядке) - Должен быть ненулевой шанс того, что каждый допустимый персонаж появится в данной точке.
- Каждая дуга независима от любой другой дуги
Анимация
Жизнь одной дуги создается путем ее запуска в 1-й строке и «перемещения» ее на одну строку вверх до тех пор, пока она не достигнет вершины. IE, сначала сгенерируйте дугу в строке 1, затем установите ее обратно в пробелы и сгенерируйте дугу в строке 2, и так далее. Учитывая количество дуг, которые нужно показать ( N ), покажите полный срок жизни такого количества дуг по одной, используя следующие рекомендации:
- Только одна дуга должна быть «живой» в любой момент времени. Следующая дуга не может начаться, пока текущая дуга не достигнет вершины, а затем погаснет.
- Каждый ряд жизни дуги должен быть показан ровно для одного кадра
- Перед началом новой дуги должен быть один кадр только базовой лестницы (без дуг) (необязательно перед первой дугой)
- Анимация должна показать всю жизнь N дуг. Если N = 0, он должен анимировать случайные дуги до тех пор, пока не остановится.
- Если N > 0, вы все равно можете зацикливать анимацию вечно, но это должен быть цикл из одних и тех же дуг снова и снова. (Пример GIF в верхней части этого поста имеет H = 6 и N = 3, но он зацикливается навсегда.)
- Анимация должна происходить на месте. То есть каждый кадр должен полностью перезаписать следующий кадр и находиться в том же месте.
- Длина каждого кадра может быть любой, какой вы хотите, но человек должен наблюдать за ней (IE, используйте ваш здравый смысл: 0,01 с / кадр и 30 с / кадр недопустимы).
Ввод, вывод
- Ввод и вывод может быть в любом стандартном формате
- Вы можете экспортировать GIF, записать текст на экран, вывести один файл для каждого кадра или любым другим разумным способом
- Стандартные лазейки запрещены
- Высота лестницы H будет положительным целым числом
- Число дуг для отображения N будет неотрицательным целым числом
- И H, и N принимаются в качестве входных данных в любом порядке, который вы выберете (пожалуйста, включите этот порядок в ваш ответ)
Условие победы
Это код-гольф, поэтому выигрывает самый короткий код.
the first character in the arc must be _ or / and the last character must be _ or \
иThere must be a non-zero chance for each allowable character to occur at a given point
. Чтобы быть симметричным, как первый, так и последний символ должны быть_
каждый раз, что означает нулевой шанс того, что они возникнут/
или "\".0xAF
находится»
.Ответы:
Python 2 ,
287271270276275 байтПопробуйте онлайн!
Не очищает экран на tio, но работает в консоли.
GIF из этого работает:
источник
print'\n'*99
вместоos.system('cls')
и потерятьos
импорт. Все еще не работает на TIO, но работает как на консолях Windows, так и на Linux.JavaScript (ES6), 245 байт
Количество байтов предполагает кодировку ISO-8859-1.
источник
A=x=>[...Array(x)].map;
в начале и заменив оба варианта использования.map
, это просто собственность,Array.prototype
и она бесполезна. Я пробовал рабочие версии, но все они были длиннее 245 байт.C (gcc) , 406 байтов
Попробуйте онлайн!
Описание:
источник
\--/
. Это, вероятно, легко исправить. Можете ли вы захватить и опубликовать GIF-файл, работающий в Xterm?PowerShell ,
347319 байтПопробуйте онлайн! Невозможно
$args
нормально играть, поэтому ссылка вызывает функцию без очистки консоли.Ungolfed
источник
$l=(($h..1)|%{"$(" "*($h-$_))\$(" "*$_*2)/"})+"$(" "*$h)¯¯"
for($x=0;$x-ne$n;$x++)
может бытьfor($x=0;$x++-ne$n;)
. Я сделал это до 324 байтов (321 символов) при этом. Советы по игре в гольф на <все языки> и Советы по игре в гольф в PowerShell также могут быть интересными для чтения.sleep 1
немного экономит (по умолчанию-секунды), но довольно медленно, но все же разумно,sleep -m 99
довольно быстро, но и разумно. Экономит 5/1 байт в зависимости от того, что вам нравится. Не проверяли попытки Кевина , ноfunction
наfilter
это свободные байты , а также.Рубин , 293 байта
Попробуйте онлайн!
Я на Windows, поэтому он просто печатает много "\ n", чтобы очистить консоль. Принимает 2 аргумента
n
и вh
виде двух строк на stdin.источник