Эта проблема вдохновлена этим ответом на бирже Ask Ubuntu Stack Exchange.
вступление
Помните заставку Windows ME с трубами ? Время вернуть ностальгию!
Вызов
Вы должны написать программу или функцию, которая выведет ASCII-представление заставки. В скринсейвере должна быть одна труба, которая будет расти в полуслучайных направлениях.
Начало трубы будет случайным образом размещено на любой из границ экрана, и часть трубы должна быть перпендикулярна границе (угловые первые трубы могут быть горизонтальными или вертикальными). Каждый тик труба будет расти в том направлении, в котором она находится (горизонтальный / вертикальный) при 80%
случайном повороте или при повороте 20%
.
Представление трубы
Для создания канала будут использованы 6 символов Юникода
─ \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 вашей работы будет предпочтительнее. Если это невозможно, пожалуйста, опубликуйте версию своего кода, которая включает распечатку вывода. Очевидно, это не будет учитываться при подсчете очков.
правила
- Это код-гольф , выигрывает самое короткое количество байтов
- Применяются стандартные лазейки
- Если в исходном коде вы используете символы канала Юникод, вы можете считать их одним байтом
Это довольно сложная задача, которую, возможно, можно решить многими творческими способами. Вам предлагается написать ответ на более многословном языке, даже если ответы уже есть в коротких esolangs. Это создаст каталог кратчайших ответов для каждого языка. Бонус за голосование за модные цветные гифки;)
Удачного игры в гольф!
Отказ от ответственности: я знаю, что символы Unicode не ASCII, но из-за отсутствия лучшего названия я просто называю это ASCII art. Предложения приветствуются :)