Можливо, ви бачили Сходи Якова в дитячих музеях науки. Якщо ви не знайомі з тим, як вони виглядають, на Вікісховищі є кілька зображень та відеоприкладів . Завдання сьогодні - створити анімовану версію електричного гаджета ASCII. Зрештою, це має виглядати приблизно так:
Будівництво сходів
Ось основна форма сходів висотою ( Н ) 6:
6 \ /
5 \ /
4 \ /
3 \ /
2 \ /
1 \ /
0 ¯¯
Цифри зліва просто вказують номер рядка для цього прикладу і не повинні включатися у висновок. Ми будемо посилатися на даний рядок за його номером ( R ). Рядок 0 - це нижня частина ¯¯
. Кожен рядок від 1 до Н складається з чотирьох частин:
- Пробіл
(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.01s / кадр і 30s / frame є неприйнятними.)
Введення-виведення
- Введення та вихід можуть бути у будь-якому стандартному форматі
- Ви можете експортувати GIF, писати текст на екран, виводити один файл для кожного кадру чи будь-які інші розумні засоби
- Стандартні лазівки заборонені
- Висота сходів Н буде цілим числом
- Кількість дуг для показу 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
. Для того щоб бути симетричними, і перший, і останній символи повинні бути _
кожен раз, а це означає, що шанси на те, що виникне /
або \ \ `, є нульовими .