У эзотерического языка программирования зло есть интересная операция над байтовыми значениями, которую он называет «переплетением». По сути, это перестановка восьми битов байта (не имеет значения, с какого конца мы начинаем считать, поскольку шаблон симметричен):
- Бит 0 перемещается в бит 2
- Бит 1 перемещается в бит 0
- Бит 2 перемещен в бит 4
- Бит 3 перемещается в бит 1
- Бит 4 перемещен в бит 6
- Бит 5 перемещен в бит 3
- Бит 6 перемещен в бит 7
- Бит 7 перемещен в бит 5
Для удобства приведем два других представления перестановки. Как цикл:
(02467531)
И как список пар сопоставления:
[[0,2], [1,0], [2,4], [3,1], [4,6], [5,3], [6,7], [7,5]]
Ваша задача состоит в том, чтобы визуализировать эту перестановку, используя окно рисования персонажей ─
, │
, ┌
, ┐
, └
, ┘
, ┼
(Unicode кодовых точек: U + 2500, U + 2502, U + 250C, U + 2510, U + 2514, U + 2518, U + 253c). Эта визуализация должна удовлетворять следующим ограничениям:
Первая и последняя строка точно:
0 1 2 3 4 5 6 7
Между ними вы можете использовать столько строк, сколько вы хотите, до 15 символов в каждой, чтобы они соответствовали символам рисования в рамке (вам понадобится как минимум 4 строки). Строки должны начинаться вертикально под одной из цифр в первой строке и заканчиваться вертикально над соответствующей цифрой в последней строке. Восемь линий должны быть соединены и могут пересекаться только через ┼
(который всегда является пересечением, а не двумя линиями поворота, которые касаются друг друга). Точные пути линий зависят от вас (и поиск особенно подходящего для игры макета является ядром этой задачи). Один действительный вывод будет:
0 1 2 3 4 5 6 7
│ │ └─┼┐│ │ └┐│
└─┼─┐ ││└─┼─┐││
┌─┘ │ ││ │ │││
│ ┌─┼─┘│ │ │││
│ │ │ ┌┼──┘ │││
│ │ │ │└┐ ┌─┼┼┘
│ │ │ │ │ │ │└┐
0 1 2 3 4 5 6 7
Однако любая другая раскладка, которая правильно соединяет правильные цифры, тоже подойдет. Пожалуйста, покажите выбранный результат в вашем ответе.
Вы можете написать программу или функцию и не будете принимать никаких данных. Выведите диаграмму либо в STDOUT (или ближайшую альтернативу), либо как возвращаемое функцией значение в виде строки или списка строк (каждая из которых представляет одну строку).
Применяются стандартные правила игры в гольф , поэтому выигрывает самый короткий код (в байтах).
источник
01234567
качестве входных данных , а затем подключение , что к01234567
? Так что вам самим приходится выяснять ссылки? Это было бы значительно более сложной задачей, особенно для игры в гольф.Ответы:
На самом деле, 69 байтов
Попробуйте онлайн! (выравнивание немного запутано в онлайн-переводчике)
На самом деле, здесь есть ОГРОМНОЕ преимущество - все символы рисования прямоугольников в CP437, так что они по одному байту каждый. Хотя каждый необходимый символ теоретически может быть закодирован в 4 бита (поскольку имеется только 9 уникальных символов), 31 байт, сохраненный при сжатии строки, будет потерян из-за очень плохих возможностей обработки строки в действительности. Это также означает, что любая конфигурация 8x4 приведет к тому же результату. Поскольку 8x4 представляется самой короткой (вертикально) конфигурацией, это оптимально.
Спасибо Мартину за 3 байта!
Спасибо TimmyD за еще 4 байта!
Объяснение:
источник
PowerShell v2 +,
172153148145142131123 байта (81 символ)Я продолжил плетение, исключив необходимость использования нескольких переменных с помощью встроенных блоков кода. Это, вероятно, в пределах нескольких байтов от оптимального.
Мы начинаем с установки
$a
равного диапазону,0..7
который был объединен с пробелами. Это связано с тем, что по умолчанию$ofs
(Разделитель выходных полей) для массива является пробелом, поэтому, когда массив структурируется с помощью""+
(с таким оператором, PowerShell попытается неявно привести правый объект в качестве объекта левой руки), результат - диапазон, разделенный пробелом.Это заключено в parens, что добавляет результат в конвейер. Затем мы устанавливаем одну вспомогательную переменную
$b
, за которой следуют четыре строки вывода с соответствующей переменной (разделенных литеральными символами новой строки) и использующие встроенные кодовые блоки для повторяющихся разделов, а затем$a
снова. Эти четыре строки$a
также размещаются на конвейере, а вывод неявен в конце.источник
Javascript ES6,
168167 байтРедактировать: Ой, оказалось, что я использовал трубу
|
char вместо U + 2502│
в части функции, обновлен счетчик байтов.Возвращает строку.
Выход:
Дополнительно: используя метод @ TimmyD, у меня есть другое 167-байтовое решение:
источник
JavaScript (ES6),
137134 байтаКак звонарь, я сразу узнал это как первые два ряда Plain Hunt Major (обратите внимание, что в связанном изображении используется 1-8 вместо 0-7).
источник
Pyth -
11910410081 байтОчень просто. (На самом деле это байты на этот раз).
Попробуйте это онлайн здесь .
Я также украл вывод @ TimmyD:
источник
Пакет MS-DOS, 136 байт
Используя вывод @ TimmyD. Это может работать и в Windows Batch, но моя кодовая страница есть CP850, а не CP437.
источник
MATLAB / Octave,
112109 байтВыход:
Мой код основан на выходах @Dendrobium и @Neil .
источник
/// , 112 байт (100 символов)
Спасибо @MartinEnder за -3 байта!
Спасибо @MartinEnder за -9 байт!
Спасибо @MartinEnder (OP) за указание на правило 15 символов
Использует
вывод @ TimmyD's@ Marcoисточник
Python3, 209 байт
Возвращает строку.
Спасибо @Mego за сохранение 2 байта!
Кредиты тела персонажа идут на @TimmyD!
источник
a,
часть, которая также устраняет необходимость вызова ее с параметром.Sprects , 99 байтов (87 символов)
Использует вывод @ Marco (замените каждый 16-й символ новой строкой (регулярное выражение:
(.{15}).
->\1\n
)).источник
Bash + GNU sed, 140 байт
Выход:
Используя вывод @ TimmyD : 142 байта
Выход:
источник
Tcl , 205 байт
Попробуйте онлайн!
выходы
источник
SOGL V0.12 , 64 байта
Попробуй здесь!
Узор, украденный из PowerShell
источник