Возможно, вы видели Лестницу Иакова в детских научных музеях. Если вы не знакомы с тем, как они выглядят, есть несколько изображений и видео примеров на сайте 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
. Чтобы быть симметричным, как первый, так и последний символ должны быть _
каждый раз, что означает нулевой шанс того, что они возникнут /
или "\".