Corte uma matriz de boolean em 4x2 blocos e torná-los como caracteres Braille 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]]
⣎⣀⠅
Almofada com 0-s se as dimensões não forem múltiplos de 4 e 2.
[[0,1,0],
[1,0,0],
[1,1,1]]
⠮⠄
Aplicam-se regras usuais de golfe, flexíveis no formato de entrada. A saída deve ter a estrutura de uma matriz ou parecer com uma matriz, por exemplo, lista de strings; cadeia única com novas linhas.
Dica: chr(0x2800 + 128*b7 + 64*b6 + 32*b5 + 16*b4 + 8*b3 + 4*b2 + 2*b1 + b0)
é o padrão de pontos
b0 b3
b1 b4
b2 b5
b6 b7
Teste maior:
[[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]]
⣰⠟⠻⣦⠀⠠⠾⡇⢠⡞⢛⡆
⣿⢠⣬⣥⠄⣀⠀⡇⢈⣻⣈⡀
⣿⠘⢹⡇⡞⠙⡇⣧⡉⢹⡏⠀
⠘⠷⠟⠁⠳⠾⠃⠘⠇⠾⠧⠀
Respostas:
Geléia ,
3130 bytesExperimente online!
Quão?
fonte
Ḅ
apoio "dígitos" superior a 1? Em vez de adicionar 10240 (0x2800 - dois bytes) ao resultado, você pode acrescentar 40 (0x28 - um byte) ao vetor de dígitos binários. Eu não sei muito sobre Jelly, então não tenho certeza se isso realmente funcionaria.Ḅ
de fato, converteria um dígito inicial de 40, como você sugere, mas precisaríamos anexá-lo a cada lista (a uma profundidade de 2) que, acredito, exigiria mais bytes de código (;@€€40Ḅ
).JavaScript ES7
210207201200198194185183 bytes4 bytes salvos graças a ngn
3 bytes salvos graças a Luke
Como funciona
Vou dividir o código em partes e falar sobre eles separadamente:
É aqui que todas as variáveis são declaradas.
x
ey
é a posição do "cursor" (a borda superior esquerda do caractere atual em braille). A coordenada x aumenta em 2 a cada iteração e para, quando não há linha com o índicey
(a [x] retornaundefined
se não existir, o que é convertido em falso).Existem vários truques na segunda linha.
(a[y] || [])[x]
garante que procurar o valor na(x, y)
posição não gere um erro. O&&
é o habitual e o operador, e apenas verifica o lado direito da expressão, se a esquerda for verdadeira. Isso pode ser traduzido paraA próxima parte:
String.fromCharCode
simplesmente converte o número passado em um caractere unicode com o mesmo código de caractere. A expressão entre parênteses calcula o índice do caractere Braille:Atravessa a posição no
ordem, multiplica os valores nessas posições com 2 i , onde i é o índice e os soma. o
parte declara uma função lambda chamada
g
, que, dada umax
ey
coordenada, retorna o valor na(x, y)
posição ou 0 se a posição estiver fora dos limites da matriz.Esta parte soma as duas últimas posições com os pesos corretos, usando a função definida um pouco antes.
Por último, mas não menos importante, o
parte tem 2 funções. Ele define um lambda anônimo e garante que o loop for não cause problemas (uma única linha lambda como essa não pode conter apenas um loop for, uma avaliação contorna isso).
fonte
||0
->|0
;~~(k/3)
->(k>2)
;*128
-><<7
(substituindo+
-s por|
-s)Mathematica,
1261109790Essa solução aproveita
ListCorrelate
para envolver um núcleo (invertido) sobre uma matriz , que é essencialmente uma multiplicação de matriz deslizante (ou produto de ponto). Veja uma explicação visual aqui . O preenchimento é feito usando0
o quarto argumento. No exemplo a seguir, esperamos que o resultado corresponda à dica acima:Observe que
ListConvolve
não é mais curto, pois o terceiro argumento seria-1
.Como isso aplica o kernel em todas as posições da matriz, só precisamos extrair os elementos em cada quarta linha e segunda coluna. Usamos atalhos para
Span
ePart
:[[;;;;4,;;;;2]]
.Ajuda,
FromCharacterCode
pode pegar uma matriz de códigos de caracteres e retornar uma lista de strings.Esta solução retorna uma lista de cadeias, que é um dos formatos de saída permitidos. Simplesmente anteceda
Column@
a saída para "parecer uma matriz".Você pode brincar com isso em um notebook Mathematica online gratuito. Vá aqui , clique em Criar um novo caderno, aguarde um momento, cole neste código e pressione shift+enter.
Então você deve ver isso:
fonte
Dyalog APL,
13312211411210110098959493908886 bytesAssume
⎕IO←0
-
8912 bytes graças a @ Adám no chat-2 bytes graças a @ngn
Experimente online!
Como (entrada é
⍵
)?A←4 2
, armazene o vetor4 2
na variávelA
(⍴⍵)÷
, as dimensões de⍵
dividido porA
⌈
tetoC←
, armazenado emC
A×
, multiplicado porA
⍵↑⍨
, ajuste⍵
a essas dimensõesS←
, armazenado emS
⍳⍴
, índices deS
{0 0≡A|⍵}¨
,1
onde fica a0
parte superior esquerda de uma célula, em qualquer outro lugar(,b)/,⍳⍴b←
índices de verdade{⎕UCS 10240+2⊥(∊S⌷⍨⍵+⍳¨A)[⍎¨⍕76531420]}¨
, transforme cada elemento em brailleC⍴
, remodelar as dimensões paraC
fonte
+/(2*0 3 1,A,4+⍳3)×something
→2⊥something[⍎¨⍕76524130]
⎕IO←0
?⎕IO←0
:)⎕IO
) no APL. Para⎕IO←1
, é claro que você tem que adicionar 1 a cada dígito 76524130.JavaScript, 136 bytes
Graças ao ngn , o uso de deslocamento de bits economiza 4 bytes.
fonte
i/4|0
->i>>2
c*2**
é uma mudança pouco, também :)Python 2 + drawille ,
141125120116 bytesEconomizou 16 bytes graças ao ngn e L3viathan
Guardado 5 bytes graças a L3viathan
Guardado 4 bytes graças a ngn
Experimente online!
O tio não possui drawille instalado, portanto não funciona
fonte
enumerate()
e uma compreensão da lista.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
truque - a compreensão pode ser uma declaração por si só, seguida por;print c.frame()
APL (Dyalog) ,
5754 bytes *-3 graças a OP. Solicita matriz booleana. Imprime a matriz de caracteres.
Experimente online!
⎕,0
acrescentar um zero à direita (ignorado se o número par de colunas)⊢
produzir que (separar3
e⎕
)⍪∘0⍣3
acrescentar zeros na parte inferior três vezes (porque⌺
cai janelas parciais)0⍪⍣3
empilhe zeros na parte superior três vezes (porque⌺
começa no canto superior esquerdo)⊢
rendimento que (separa parênteses e0
){
…}⌺(2 2⍴4 2)
Em cada janela de 4 linhas e 2 colunas, com degraus na vertical e 4 linhas na horizontal:⊢⌿⍵
última linha (lit. redução vertical à direita);[b6,b7]
(
…),
Prepend:3↑
pegue três linhas;[[b0,b3],[b1,b4],[b2,b5]]
⍉
transpor;[[b0,b1,b2],[b3,b4,b5]]
,
confusão;[b0,b1,b2,b3,b4,b5]
agora temos
[b0,b1,b2,b3,b4,b5,b6,b7]
⌽
marcha ré;[b7,b6,b5,b4,b3,b2,b1,b0]
40,
anexar 40 (para 40 × 2 9 = 10240);[40,b7,b6,b5,b4,b3,b2,b1,b0]
2⊥
avaliar como base-2 (binário)⎕UCS
converter em personagem1↓
solte a primeira linha (tudo zero por causa do⌺
preenchimento)* No clássico, contando
⌺
como⎕U233A
.fonte
0⍪⍣3⍪∘0⍣3⊢⎕,0
vs0⍪∘0⍣3⊢⎕,0
⍪∘0⍣3
e,0
só são necessários devido a um bug no⌺
, e o primeiro não é necessário para seus casos de teste.0⍪⍣3⍪∘0⍣3⊢⍵,0
para0(⊖⍪)⍣6⊢⍵,0
.Python 3 ,
168165161 bytesExperimente online!
fonte
[*zip(*m[:4])]
vez de chamarlist
.Haskell , 145 bytes
Experimente online!
fonte
Python 3 , 169 bytes
Experimente online!
fonte
if y%4<1:a+=-~len(l)//2*[10240],
comoa+=(y%4<1)*[-~len(l)//2*[10240]]
e caberx=0;y+=1
na mesma linha. Eu acho que economiza um byte.Perl 5 , 164 bytes
163 bytes de código + 1 sinalizador
-p
Experimente online!
Leva cada vírgula de linha separada em uma linha.
fonte
APL (Dyalog) , 53 bytes
Experimente online!
fonte