Ця проблема випливає з цієї відповіді на Ask Ubuntu Stack Exchange.
Вступ
Пам'ятаєте заставку Windows ME з трубами ? Час повернути ностальгію назад!
Виклик
Ви повинні написати програму або функцію, яка виводить ASCII представлення заставки. У заставці повинна бути одна труба, яка буде рости в напів випадкових напрямках.
Початок труби буде розміщений випадковим чином на будь-якій з меж екрана, і шматок труби повинен бути перпендикулярний до бордюру (кутові першопровідні труби можуть бути горизонтальними або вертикальними). Кожна галочка труби зростатиме у напрямку, до якого вона спрямована (горизонтальна / вертикальна), 80%
або випадково забирає кут 20%
.
Представлення труб
Для створення труби буде використано 6 символів unicode
─ \u2500 horizontal pipe
│ \u2502 vertical pipe
┌ \u250C upper left corner pipe
┐ \u2510 upper right corner pipe
└ \u2514 lower left corner pipe
┘ \u2518 lower right corner pipe
Вхідні дані
Програма / функція прийме 3 значення введення, які можна зібрати через параметри функції або запропонувати користувачеві.
- Кількість кліщів
- Ширина екрана
- Висота екрана
Кількість кліщів
Для кожного галочки на екран буде доданий шматок труби. Труби перезаписують старі шматки труб, якщо вони нерестуються в одному місці.
Наприклад, візьміть екран розміром 3х3
ticks == 3
─┐
┘
ticks == 4
─┐
└┘
ticks == 5
│┐
└┘
Кожного разу, коли труба виходить з екрану, як в останньому прикладі на 5 кліщів, то нова труба нерестується на випадковій межі. Наприклад:
ticks == 6
│┐
└┘
─
Нова труба повинна мати 50% шансів бути горизонтальною або вертикальною.
Ширина / висота екрана
Ширина та висота екрана можуть бути об'єднані в одне значення, якщо це бажано для вашої мови, що вибираєте. Ширина та висота екрана завжди матимуть мінімальне значення 1 та максимальне значення 255. Якщо ваша обрана мова підтримує консоль чи вихідний екран, розмір яких менший за сітку символів 255x255, то ви можете припустити, що ширина та висота будуть ніколи не перевищуйте межі вашої консолі. (Приклад: Windows 80x25 cmd вікно)
Вихідні дані
Вихід вашої програми / функції повинен бути надрукований на екран або повернутись з функції. Для кожного запуску вашої програми повинен бути створений різний набір труб.
Тестові справи
Наступні тестові випадки - це випадкові приклади дійсних результатів
f(4, 3, 3)
│
─┘
│
f(5, 3, 3)
│
─┘┌
│
f(6, 3, 3)
─│
─┘┌
│
f(7, 3, 3)
──
─┘┌
│
Очевидно, що чим більше кліщів виникло, тим важче довести валідність вашої програми. Отже, переважним буде розміщення gif вашого запущеного результату. Якщо це неможливо, будь ласка, опублікуйте версію коду, яка включає друк виводу. Очевидно, що це не зараховуватиметься до вашої оцінки.
Правила
- Це кодовий гольф , найменший виграш байтів
- Застосовуються стандартні лазівки
- Якщо ви використовуєте символи труби Unicode у вихідному коді, ви можете вважати їх одним байтом
Це досить важкий виклик, який, можливо, можна вирішити багатьма творчими способами, вам рекомендується написати відповідь більш докладною мовою, навіть якщо відповіді вже є у коротких езолангах. Це створить каталог найкоротших відповідей на кожну мову. Бонусні надбавки для фантазійних кольорових gifs;)
Щасливого гольфу!
Відмова: Я знаю, що символи Unicode - це не ASCII, але за відсутності кращого імені я просто називаю це мистецтвом ASCII. Пропозиції вітаються :)