Вырезать булеву матрицу в 4х2 блоков и сделать их как символы Брайля U+2800
... U+28FF
.
[[0,1,0,0,1,0],
[1,0,0,0,0,0],
[1,0,0,0,1,0],
[1,1,1,1,0,0]]
⣎⣀⠅
Pad с 0-s, если размеры не кратны 4 и 2.
[[0,1,0],
[1,0,0],
[1,1,1]]
⠮⠄
Применяются обычные правила игры в гольф, гибкий формат ввода. Вывод должен иметь структуру матрицы или выглядеть как матрица, например, список строк; одна строка с символами новой строки.
Подсказка: chr(0x2800 + 128*b7 + 64*b6 + 32*b5 + 16*b4 + 8*b3 + 4*b2 + 2*b1 + b0)
это точечный шаблон
b0 b3
b1 b4
b2 b5
b6 b7
Большой тест:
[[0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0],
[0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1],
[0,1,1,0,0,1,1,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,1],
[1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1],
[1,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0],
[1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0],
[1,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0],
[1,1,0,1,1,1,1,1,0,0,1,1,0,0,1,0,0,1,1,1,1,1,1],
[1,1,0,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0],
[1,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,0,0,0,1,1,0,0],
[1,1,0,0,0,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,0],
[1,1,0,0,0,1,1,0,1,0,0,0,1,0,1,1,1,0,0,1,1,0,0],
[0,1,1,0,1,1,1,0,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0],
[0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,1,1,1,0,0],
[0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,0]]
⣰⠟⠻⣦⠀⠠⠾⡇⢠⡞⢛⡆
⣿⢠⣬⣥⠄⣀⠀⡇⢈⣻⣈⡀
⣿⠘⢹⡇⡞⠙⡇⣧⡉⢹⡏⠀
⠘⠷⠟⠁⠳⠾⠃⠘⠇⠾⠧⠀
Ответы:
Желе ,
3130 байтПопробуйте онлайн!
Как?
источник
Ḅ
Поддерживает ли «цифры» больше 1? Вместо добавления 10240 (0x2800 - два байта) к результату, вы можете добавить 40 (0x28 - один байт) к вектору двоичных цифр. Я не знаю много о Желе, поэтому я не уверен, что это действительно сработает.Ḅ
будет действительно преобразовывать начальную цифру 40, как вы предлагаете, но нам нужно было бы добавить ее к каждому такому списку (на глубине 2), который, я думаю, потребовал бы больше байтов кода (;@€€40Ḅ
).JavaScript ES7
210207201200198194185183 байта4 байта сохранены благодаря ngn
3 байта спасены благодаря Люку
Как это устроено
Я собираюсь разбить код на части и поговорить о них отдельно:
Здесь каждая переменная объявляется.
x
иy
- позиция «курсора» (левый верхний край текущего символа Брайля). Координата x увеличивается на 2 на каждой итерации и останавливается, когда нет строки с индексомy
(a [x] возвращает,undefined
если он не существует, который преобразуется в false).Есть несколько трюков во втором ряду.
(a[y] || [])[x]
гарантирует, что поиск значения в(x, y)
позиции не приведет к ошибке. Это&&
обычный оператор и оператор, и он проверяет только правую часть выражения, если слева было значение true. Это можно перевести наСледующая часть:
String.fromCharCode
просто преобразует переданное число в символ Unicode с тем же кодом символа. Выражение в скобках вычисляет индекс символа Брайля:Проходит позицию в
order, умножает значения в этих позициях на 2 i , где i - индекс, и складывает их вместе.
part объявляет вызванную лямбда-функцию
g
, которая с учетом координатыx
andy
возвращает либо значение в(x, y)
позиции, либо 0, если позиция находится за пределами массива.Эта часть суммирует последние две позиции с правильными весами, используя функцию, определенную чуть ранее.
Не в последнюю очередь,
часть имеет 2 функции. Он определяет анонимную лямбду и гарантирует, что цикл for не вызывает никаких проблем (такая лямбда-строка, как эта, не может содержать только один цикл for, оценка обходит это).
источник
||0
->|0
;~~(k/3)
->(k>2)
;*128
-><<7
(замена+
-s на|
-s)Mathematica,
1261109790Это решение использует преимущество, заключающееся в том,
ListCorrelate
чтобы сворачивать (обращенное) ядро над матрицей , которая по сути является умножением скользящей матрицы (или точечным произведением). Смотрите визуальное объяснение здесь . Заполнение выполняется с помощью0
четвертого аргумента. В следующем примере мы ожидаем, что результат будет соответствовать подсказке выше:Обратите внимание, что
ListConvolve
это не короче, так как третий аргумент будет-1
.Так как это применяет ядро в каждой позиции матрицы, нам просто нужно извлечь элементы в каждой четвертой строке и втором столбце. Мы используем Shorthands для
Span
иPart
:[[;;;;4,;;;;2]]
.Полезно,
FromCharacterCode
может взять матрицу кодов символов и вернуть список строк.Это решение возвращает список строк, который является одним из разрешенных форматов вывода. Просто
Column@
подготовьте вывод, чтобы «выглядеть как матрица».Вы можете поиграть с этим в бесплатной онлайн тетради Mathematica. Перейдите сюда , нажмите «Создать новую записную книжку», подождите, вставьте этот код и нажмите shift+enter.
Тогда вы должны увидеть это:
источник
Dyalog APL,
13312211411210110098959493908886 байтовПредполагает
⎕IO←0
-
8912 байт благодаря @ Adám в чате-2 байта благодаря @ngn
Попробуйте онлайн!
Как (вход есть
⍵
)?A←4 2
сохранить вектор4 2
в переменнойA
(⍴⍵)÷
Размеры⍵
делятся наA
⌈
потолокC←
, Хранится вC
A×
, умножается наA
⍵↑⍨
подходит⍵
к этим размерамS←
, Хранится вS
⍳⍴
, индексыS
{0 0≡A|⍵}¨
,1
Где верхняя левая из клетки, и0
везде(,b)/,⍳⍴b←
правдивые показатели{⎕UCS 10240+2⊥(∊S⌷⍨⍵+⍳¨A)[⍎¨⍕76531420]}¨
, превратить каждый элемент в шрифт БрайляC⍴
изменить размеры вC
источник
+/(2*0 3 1,A,4+⍳3)×something
→2⊥something[⍎¨⍕76524130]
⎕IO←0
?⎕IO←0
:)⎕IO
) в APL. Для⎕IO←1
, конечно , вы должны были бы добавить 1 к каждой цифре 76524130.JavaScript, 136 байт
Благодаря ngn использование сдвигов битов экономит 4 байта.
источник
i/4|0
->i>>2
c*2**
немного сдвиг тоже :)Python 2 + drawille ,
141125120116 байтСохранено 16 байтов благодаря ngn и L3viathan
Сохранено 5 байт благодаря L3viathan
Сохранено 4 байта благодаря ngn
Попробуйте онлайн!
на tio не установлен drawille, поэтому он не работает
источник
enumerate()
и понимание списка.def b(d,c=l.Canvas()):print([c.set(j,i)for i,x in enumerate(d)for j,y in enumerate(x)if y]and c).frame()
and c
трюк - понимание может быть самостоятельным утверждением, за которым следует;print c.frame()
APL (Dyalog) ,
5754 байта *-3 благодаря ОП. Подсказки для булевой матрицы. Печатает матрицу символов.
Попробуйте онлайн!
⎕,0
добавить ноль справа (игнорируется, если четное количество столбцов)⊢
дать это (отделить3
и⎕
)⍪∘0⍣3
добавьте нули в нижнюю часть трижды (потому что⌺
пропускает частичные окна)0⍪⍣3
складывать нули сверху трижды (потому что⌺
начинается в верхнем левом углу)⊢
выход , что (отделяет скобку и тому0
){
… В}⌺(2 2⍴4 2)
каждом 4-рядном 2-колоночном окне с 4-рядным вертикальным и 2-рядным горизонтальным шагом:⊢⌿⍵
последний ряд (горит вертикальное правое сокращение);[b6,b7]
(
…),
Prepend:3↑
взять три ряда;[[b0,b3],[b1,b4],[b2,b5]]
⍉
транспонировать;[[b0,b1,b2],[b3,b4,b5]]
,
распутать;[b0,b1,b2,b3,b4,b5]
теперь у нас есть
[b0,b1,b2,b3,b4,b5,b6,b7]
⌽
задний ход;[b7,b6,b5,b4,b3,b2,b1,b0]
40,
40 перед именем (для 40 × 2 9 = 10240);[40,b7,b6,b5,b4,b3,b2,b1,b0]
2⊥
оценивать как базу-2 (двоичная)⎕UCS
преобразовать в персонажа1↓
отбросить первый ряд (все ноль из-за⌺
отступов)* В Классике, считая
⌺
как⎕U233A
.источник
0⍪⍣3⍪∘0⍣3⊢⎕,0
vs0⍪∘0⍣3⊢⎕,0
⍪∘0⍣3
и,0
только необходимы , из - за ошибки в⌺
, и первый один не требуется для тестов.0⍪⍣3⍪∘0⍣3⊢⍵,0
до0(⊖⍪)⍣6⊢⍵,0
.Python 3 ,
168165161 байтПопробуйте онлайн!
источник
[*zip(*m[:4])]
вместо вызоваlist
.Haskell , 145 байт
Попробуйте онлайн!
источник
Python 3 , 169 байт
Попробуйте онлайн!
источник
if y%4<1:a+=-~len(l)//2*[10240],
какa+=(y%4<1)*[-~len(l)//2*[10240]]
и поместитьсяx=0;y+=1
на одной строке. Я думаю, что это сохраняет байт.Perl 5 , 164 байта
163 байта кода + 1 флаг
-p
Попробуйте онлайн!
Берет каждую строку через запятую, разделенную на одну строку.
источник
APL (Dyalog) , 53 байта
Попробуйте онлайн!
источник