Эта проблема основана на публикации в песочнице пользователя 48538 . Поскольку он больше не активен на этом сайте, я принял этот вызов.
apgsearch , распределенная программа поиска супа для «Игры жизни» Конвея и база данных результатов поиска, Catagolue использует apgcodes для классификации и обозначения паттернов. Сами apgcodes используют расширенный формат Wechsler , расширение шаблона записи, разработанное Алланом Wechsler в 1992 году.
Следующие примеры и изображения взяты из LifeWiki .
Строка из n символов в наборе, соответствующая регулярному выражению,
[0-9a-v]
обозначает полосу из пяти строк, n столбцов в ширину. Каждый символ обозначает пять клеток в вертикальной колонне , соответствующие bitstrings [00000
,10000
,01000
...00010
,10010
,01010
,11010
...11111
].Например,
27deee6
соответствует тяжелому космическому кораблю :
Персонаж
z
отделяет смежные пятирядные полосы.Например,
0ca178b96z69d1d96
соответствует 31-битному натюрморту:
Символы
w
иx
используются для сокращения00
и000
, соответственно.Итак,
w33z8kqrqk8zzzx33
соответствует транс-трансвестит :
(10 пустых строк пропущено)
Наконец, символы, соответствующие регулярному выражению,
y[0-9a-z]
соответствуют сериям от 4 до 39 последовательных0
с.Хороший пример
31a08zy0123cko
, соответствующий кораблю на четверке :
Соревнование
Напишите программу или функцию для анализа строки расширенного формата Векслера, определенного выше, и напечатайте (или верните) шаблон, соответствующий этой строке.
Вы можете предположить, что строка не пустая и не начинается и не заканчивается на z
.
Вы можете использовать любой приемлемый формат вывода, например, строку, матрицу, 2d массив. Вы можете использовать любые два значения для представления 0
и 1
, учитывая, что вы объявляете их в ответе.
Вы можете опустить строки конечных нулей в выходных данных или добавить дополнительные строки конечных нулей. Вы также можете добавить / опустить конечные нули в каждой строке, если все строки имеют одинаковую длину в выходных данных.
Вы можете вернуть транспонирование массива, если это более удобно.
Это код-гольф , поэтому выигрывает самый короткий код.
Контрольные примеры
153 => [[1, 1, 1], [0, 0, 1], [0, 1, 0], [0, 0, 0], [0, 0, 0]]
27deee6 => [[0, 1, 1, 0, 0, 0, 0], [1, 1, 0, 1, 1, 1, 1], [0, 1, 1, 1, 1, 1, 1], [0, 0, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0]]
0ca178b96z69d1d96 => [[0, 0, 0, 1, 1, 0, 1, 1, 0], [0, 0, 1, 0, 1, 0, 1, 0, 1], [0, 1, 0, 0, 1, 0, 0, 0, 1], [0, 1, 1, 0, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 0, 0, 0], [1, 0, 0, 0, 0, 0, 1, 0, 0], [1, 0, 1, 0, 1, 0, 1, 0, 0], [0, 1, 1, 0, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0]]
w33z8kqrqk8zzzx33 => [[0, 0, 1, 1, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0], [0, 0, 1, 1, 1, 0, 0], [0, 1, 0, 0, 0, 1, 0], [1, 0, 1, 1, 1, 0, 1], [0, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0]]
31a08zy0123cko => [[1, 1, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1]]
o5995ozes88sezw33 => [[0, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 1, 0], [1, 0, 1, 1, 0, 1], [1, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 1], [1, 1, 0, 0, 1, 1], [1, 1, 1, 1, 1, 1], [0, 1, 0, 0, 1, 0], [0, 0, 1, 1, 0, 0], [0, 0, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]
y3343x6bacy6cab6x343zkk8yy8kkzgo8gywg8ogz0123yw321zzgo4syws4ogzgh1yy1hgz221yy122zy3c2cx6d53y635d6xc2c => [[0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0], [1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1], [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0], [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0], [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0], [1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1], [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
источник
z
нибудь произойдет в самом начале?z
.vv99f60vv99f60uv11320uv19rqz33y133y11322310132231
1yx1
,1yy1
,1yw1
и1yz1
. Может быть, они должны быть тестами.Ответы:
Древесный уголь , 50 байтов
Попробуйте онлайн! Ссылка на подробную версию кода. Использует
1
и0
. Объяснение:Установите фон, то есть любые непечатные ячейки прямоугольника, заключающего выходные данные, в
0
.Поставьте цифры перед предопределенным строчным алфавитом.
Цикл по входной строке.
Если предопределенный пустой список не пустой ...
... затем выведите число
0
s, заданное суммой числа, извлеченного из списка, и индекса текущего символа в цифрах и буквах. Смотрите ниже, что это за число.Переключите текущий символ.
Если это
z
выводит 5 каретных возвратов, перенося нас к следующей выходной полосе.Если это
y
, то нажмите4
на предопределенный пустой список, в результате4+n
0
s будет выведен в следующий раз.Если это,
x
то выведите 30
с. (Это делается с помощью повторения, чтобы избежать0
касания литералаx
или следующего литерала.)Если это,
w
то выведите 20
с. (¦
Необходим для разделения двух строковых литералов.)В противном случае, индексируйте текущий символ цифрами и буквами, преобразуйте в двоичный файл и сначала напечатайте результат в младшем значащем младшем бите; затем переместите курсор вправо для следующего столбца.
источник
JavaScript (ES8), 197 байт
Принимает ввод в виде строки. Возвращает массив строк с символом «#» и пробелами. Вывод может включать дополнительные (но последовательные) конечные пробелы в каждой строке.
Попробуйте онлайн! (предварительный вывод)
Как?
Глобальные переменные
"x"
используется несколько раз, поэтому его стоит сохранить в переменной x .parseInt
используется дважды, так что стоит хранить его в переменной P .Предварительная обработка повторяющихся нулей
Сначала мы заменим все модели
"w"
,"x"
и"yX"
во входной строке с соответствующим количеством пробелов. Эти места будут позже интерпретированы как"0"
.Декодирование
Мы разделяем полученную строку, добавляем начальную
"x"
и повторяем 5 раз (с i = 0 до 4 ) для каждого символа c :Если c меньше чем
"x"
, мы добавляем соответствующий шаблон к следующим 5 строкам.Если c больше или равно
"x"
, мы выделяем 5 новых пустых строк в o [] и добавляем 5 к y . Это вызвано инициалом,"x"
который был добавлен в начале строки, или любым"z"
из оригинального содержимого.набивка
Наконец, мы дополняем каждую строку в o [] пробелами, чтобы все они имели w символов.
источник
05AB1E ,
14813298 байтЯ учусь в старших классах, и это был мой первый раз как для игры в гольф, так и для использования 05AB1E, поэтому комментарии приветствуются!
Попробуйте онлайн!Попробуйте онлайн!Попробуйте онлайн!
Принимает ввод в верхнем регистре и выводит транспонированную матрицу в виде нескольких выходных строк 1 и 0. Может добавить дополнительные нули.
Если вы хотите проверить строчными буквами, добавьте
u
заголовок TIO.Если вы хотите получить хорошо напечатанный текст, добавьте
'1'█:'0'.:
нижний колонтитул TIO.объяснение
(Я называю «строки» и «столбцы» противоположными тем, что вы могли ожидать, потому что это генерирует транспонированную матрицу)
Основной алгоритм:
Есть некоторые другие мелкие детали, которые вы можете увидеть ниже в расширенном коде. Все, что находится после вкладок в конце строки, является комментарием и может быть проигнорировано. (Кстати, эта схема комментариев не является частью 05AB1E. Я сделал это таким образом, потому что она выглядела хорошо.) Строки с комментариями, начинающимися с "@", предназначены для целей отладки и могут быть опущены без изменения окончательного результата.
источник
,
."yy"
может быть„yy
(05AB1E имеет встроенная строка из 2 и 3 символов).>≠
может бытьĀ
(правда, в основном0
остается,0
а все остальное становится1
).}}
может быть]
(закрыть все циклы и if-elses). Я уверен, что некоторые из профессиональных игроков в гольф 05AB1E способны играть в гольф более существенные вещи, чем я, возможно, даже вдвое уменьшив количество байтов.APL (Dyalog Unicode) ,
8780776763 байтаспасибо H.PWiz за сохранение 7 байтов и ngn за еще
1317.Попробуйте онлайн!
NB: принимает ввод в виде строки в верхнем регистре.
С красивой печатной продукцией
объяснение
a←⎕D,⎕A
a - строка'0123...89ABCD...XYZ'
'Y.|W|X'⎕R{'0'/⍨+/30 36|a⍳2↑⍵.Match}
заменяет XW и Yx на соответствующее число'0'
s (объясняется более подробно ниже),35(≠⊆⊢)a⍳
преобразует строку в вектор индерий вa
и разбивает на35
(т. е.'Z'
создает вложенный вектор,↑
преобразует вложенный вектор в матрицу, дополняет ее, преобразуя каждый из0
s(5/2)⊤
число в двоичный вектор, в результате чего 3-мерная матрица с двоичными векторами вдоль первичной оси⊖
инвертируется вдоль первичной оси,↓
уменьшает ранг матрицы, поэтому он 2-мерно,⍉
преобразовывает результат в соответствующий выводисточник
a←⎕D,⎕A⋄,↓↑{⊖(5/2)⊤a⍳⍵}¨'Z'(≠⊆⊢)('Y.|W|X'⎕R{'0'/⍨{0::2+'WX'⍳⍵⋄4+a⍳1⊃⍵}⍵.Match})⍞
. Загвоздка ошибка также не кажется очень golfy⎕R
и их операнды не нужны2+'WX'⍳⍵
->2+'X'=⍵
{0::2+'X'=⍵⋄4+a⍳1⊃⍵}⍵.Match
->30 36|a⍳2↑⍵.Match
Perl 6 ,
156142 байта14 байтов сохранено благодаря Джо Кингу. (Также исправлена небольшая ошибка с разбором
y
и добавлен префтификатор.)Исправлена ошибка разбора
y[wxy]
.Попробуйте онлайн!
Разрыв строки предназначен только для того, чтобы текст помещался на экране. Это не часть программы.
Как это работает
Это анонимная функция, которая принимает изменяемую строку. (Это делает использование функции несколько своеобразным, потому что вы можете назначать ей только переменные, а не литералы.) После некоторой работы, она возвращает список списков, содержащих 0 и 1, с тем же значением, что и в оригинальном посте.
Входная строка входит в переменную
$_
. Мы начнем с использования серии операторов подстановки, чтобы избавиться от всех этих сокращений для различного числа нулей. Во- первых, мы должны разобраться в этомy
, так как в случаеyx
илиyw
, тоw
(илиx
) не является стенографии сам по себе. Мы ищемy(.)
(y
и один символ, который он запоминает) и заменяем его следующим образом000{"0"x:36(~$0)}
: три ноля копируются дословно, затем мы преобразуем следующий символ из базы 36 в базу 10 (:36(~$0)
) и добавляем еще много нулей. Затем мы заменяемw
«использование»s:g/w/00/
иx
«использование»s:g/x/000/
. Наконец, сs/$/z/
добавлениемz
в конце, добавив много пустых строк в нижней части. (Мы увидим причину позже.)Остальное - это просто большая карта. Мы наносим на карту
.split("z").map: (*~0 x.chars).comb})
, что является входной строкой (без нулевых сокращений), разбитой на строки вz
, причем каждая строка сначала дополняется0 x.chars
(тоннами нулей, а именно столько, сколько является общей длиной входной строки) справа а затем разбить на список отдельных символов (.comb
). Наконец, мы транспонируем это с помощью[Z]
(уменьшите с помощью zip). Сжатие заканчивается, как только самый короткий список истощается, в результате чего все строки имеют одинаковую длину. (Количество бесполезных конечных нулей справа равно длине самой короткой строки. Кроме того, этот трюк транспонирования не работает для «матрицы» только с одной строкой. Поэтому мы принудительно добавили еще одну строку в конце ранее.)Теперь мы просто отображаем строки (столбцы исходной матрицы) и заменяем каждый встреченный символ соответствующими 5 битами. Это делается с помощью
:32($_)
(от базы 32 до базы 10).fmt("%05b")
(форматируется как цепочка битов шириной 5, дополненная нулями).flip
(переворачивает строку, поскольку младший бит находится в верхнем ряду, а не в нижнем).comb
(разбейте строку на список персонажи). Мы использовали.flatmap
, что сглаживает результирующий список (в противном случае мы получили бы список списков в каждом столбце). Транспонирование результата затем возвращается неявно.(Я чувствую себя немного плохо из-за того, что так сильно злоупотребляю возможностью отследить нули. Но это значительно сократило байтовый счет :—).)
источник
1yx1
и1yw1
y[0-9a-v]
и когда я обнаружил, что это не так, я просто добавил быстрое (и неправильное) исправление.)000
y наx
Желе , 66 байт
Yowza!
Монадическая ссылка, которая выдает транспонированную версию в виде списка списков (добавить
Z
в конец, чтобы транспонировать обратно).Попробуйте онлайн! Или посмотрите набор тестов (с довольно печатным выводом).
источник
Сетчатка , 203 байта
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Альтернативное решение, также 203 байта:
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Сначала обработайте неуклюжий случай
y
команды. К сожалению, буква после этого может бытьy
или дажеz
, поэтому мы должны быть осторожны здесь. Все магическиеy
s сначала превращаются в#
s.Затем цикл обрабатывает
#
s. Во-первых,0
к#
. Если это -#0
то, то изменяется на то,000
что завершает операцию, в противном случае символ после#
уменьшается, и цикл повторяется до тех пор, пока все#
s не будут обработаны.Исправьте
w
с иx
с.Сплит на новые строки. (
S`z
также работает для того же количества байтов.)Сделайте 5 копий каждой строки, затем выполните двоичное преобразование, сопоставив буквы с соответствующим битом
#
и очистив этот бит, в то время как другие буквы станут пробелами. Биты обрабатываются в порядке 16, 8, 4, 2, и затем последний перевод обрабатывает очистку2
бита и преобразование1
бита одновременно. (Альтернативная версия делает каждую копию отдельно, что стоит больше байтов, но они сохраняются, потому что обработка битов упрощена.)Заполните все строки одинаковой длины.
источник
Python 2 ,
249244 байтаПопробуйте онлайн!
5 байтов сохранены Джонатаном Фрехом .
источник
while 'y'in
. Я думаю, что индекс[-5:][::-1]
может быть в гольфе[:-6:-1]
. Оператор возврата может быть помещен в предыдущую строку.JavaScript (ES8), 192 байта
Возвращает транспонирование ... которое затем отражается по вертикальной оси; дайте мне знать, если это делает эту запись недействительной. Вывод представляет собой массив строк, содержащих
0
s и1
s.Попробуйте онлайн!
объяснение
Для каждого символа
c
, имеетk+1
значение количества строк , чтобы изменить.k = "wxy".search(c) + 1;
гдеsearch
метод возвращает индекс или-1
.k
затем уменьшается до тех пор, пока не достигнет-1
путем проверки~k--
истинного значения.Если текущим символом является «y», установите флаг так, чтобы значение base-36 следующего символа - 1 стало значением для
k
.При обнаружении буквы «z» строки пэдов слева увеличивают значение пэда на
5
и сбрасывают индекс массива на0
.источник
Haskell, 399 байт
Установить
split
пакет:cabal install split
источник