Cortar una matriz booleana de 4x2 bloques y hacerlos 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]]
⣎⣀⠅
Rellene con 0-s si las dimensiones no son múltiplos de 4 y 2.
[[0,1,0],
[1,0,0],
[1,1,1]]
⠮⠄
Se aplican las reglas habituales de golf, flexible en el formato de entrada. La salida debe tener la estructura de una matriz o verse como una matriz, por ejemplo, una lista de cadenas; cadena única con líneas nuevas.
Sugerencia: chr(0x2800 + 128*b7 + 64*b6 + 32*b5 + 16*b4 + 8*b3 + 4*b2 + 2*b1 + b0)
es el patrón de puntos
b0 b3
b1 b4
b2 b5
b6 b7
Prueba más grande:
[[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]]
⣰⠟⠻⣦⠀⠠⠾⡇⢠⡞⢛⡆
⣿⢠⣬⣥⠄⣀⠀⡇⢈⣻⣈⡀
⣿⠘⢹⡇⡞⠙⡇⣧⡉⢹⡏⠀
⠘⠷⠟⠁⠳⠾⠃⠘⠇⠾⠧⠀
Respuestas:
Jalea ,
3130 bytesPruébalo en línea!
¿Cómo?
fuente
Ḅ
Admite "dígitos" mayores que 1? En lugar de agregar 10240 (0x2800 - dos bytes) al resultado, puede anteponer 40 (0x28 - un byte) al vector de dígitos binarios. No sé mucho sobre Jelly, así que no estoy seguro de si esto realmente funcionaría.Ḅ
de hecho, convertiría un dígito inicial de 40 como sugiere, pero tendríamos que anteponerlo a cada una de esas listas (a una profundidad de 2) que, creo, requeriría más bytes de código (;@€€40Ḅ
).JavaScript ES7
210207201200198194185183 bytes4 bytes guardados gracias a ngn
3 bytes guardados gracias a Luke
Cómo funciona
Voy a dividir el código en partes y hablar sobre ellas por separado:
Aquí es donde se declara cada variable.
x
yy
es la posición del "cursor" (el borde superior izquierdo del carácter braille actual). La coordenada x aumenta en 2 cada iteración y se detiene cuando no hay una fila con el índicey
(a [x] devuelveundefined
si no existe, que se convierte en falso).Hay varios trucos en la segunda fila.
(a[y] || [])[x]
asegura que buscar el valor en la(x, y)
posición no arroje un error. El&&
es el habitual y el operador, y solo comprueba el lado derecho de la expresión, si el izquierdo era verdadero. Esto se puede traducir aLa siguiente parte:
String.fromCharCode
simplemente convierte el número pasado a un carácter unicode con el mismo código de caracteres. La expresión entre paréntesis calcula el índice del carácter Braille:Pasa por la posición en el
orden, multiplica los valores en esas posiciones con 2 i , donde i es el índice y los suma. los
parte declara una función lambda llamada
g
, que dada una coordenadax
yy
devuelve el valor en la(x, y)
posición o 0 si la posición se encuentra fuera de los límites de la matriz.Esta parte suma las dos últimas posiciones con los pesos correctos utilizando la función definida un poco antes.
Por último, pero no menos importante, el
La parte tiene 2 funciones. Define una lambda anónima y garantiza que el bucle for no cause ningún problema (una sola línea lambda como esta no puede contener solo un bucle for, una evaluación lo evita).
fuente
||0
->|0
;~~(k/3)
->(k>2)
;*128
-><<7
(reemplazando+
-s con|
-s)Mathematica,
1261109790Esta solución aprovecha
ListCorrelate
para convolucionar un núcleo (invertido) sobre una matriz , que es esencialmente una multiplicación de matriz deslizante (o producto de puntos). Vea una explicación visual aquí . El relleno se realiza utilizando0
como cuarto argumento. En el siguiente ejemplo, esperamos que el resultado coincida con la sugerencia anterior:Tenga en cuenta que
ListConvolve
no es más corto, ya que el tercer argumento sería-1
.Como esto aplica el núcleo en cada posición de la matriz, solo necesitamos extraer los elementos en cada cuarta fila y segunda columna. Utilizamos abreviaturas de
Span
yPart
:[[;;;;4,;;;;2]]
.Con ayuda,
FromCharacterCode
puede tomar una matriz de códigos de caracteres y devolver una lista de cadenas.Esta solución devuelve una lista de cadenas, que es uno de los formatos de salida permitidos. Simplemente anteponga
Column@
para que la salida "parezca una matriz".Puede jugar con esto en un cuaderno gratuito de Mathematica en línea. Vaya aquí , haga clic en Crear un cuaderno nuevo, espere un momento, pegue este código y luego presione shift+enter.
Entonces deberías ver esto:
fuente
Dyalog APL,
13312211411210110098959493908886 bytesAsume
⎕IO←0
-
8912 bytes gracias a @ Adám en el chat-2 bytes gracias a @ngn
Pruébalo en línea!
¿Cómo (entrada es
⍵
)?A←4 2
, almacena el vector4 2
en variableA
(⍴⍵)÷
, las dimensiones de⍵
dividido porA
⌈
, techoC←
, guardado enC
A×
, multiplicado porA
⍵↑⍨
, se ajusta⍵
a esas dimensionesS←
, guardado enS
⍳⍴
, índices deS
{0 0≡A|⍵}¨
,1
donde está la parte superior izquierda de una celda, en0
cualquier otro lugar(,b)/,⍳⍴b←
, índices de verdad{⎕UCS 10240+2⊥(∊S⌷⍨⍵+⍳¨A)[⍎¨⍕76531420]}¨
, convierte cada elemento en brailleC⍴
, remodelar las dimensiones aC
fuente
+/(2*0 3 1,A,4+⍳3)×something
→2⊥something[⍎¨⍕76524130]
⎕IO←0
?⎕IO←0
:)⎕IO
) en APL. Para⎕IO←1
, por supuesto, tendría que agregar 1 a cada dígito de 76524130.JavaScript, 136 bytes
Gracias a ngn , el uso de cambios de bit ahorra 4 bytes.
fuente
i/4|0
->i>>2
c*2**
también es un poco turno :)Python 2 + drawille ,
141125120116 bytesGuardado 16 bytes gracias a ngn y L3viathan
Guardado 5 bytes gracias a L3viathan
Guardado 4 bytes gracias a ngn
Pruébalo en línea!
tio no tiene un drawille instalado, por lo que no funciona
fuente
enumerate()
una lista de comprensión.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
truco - la comprensión podría ser una declaración sobre su propio seguido de;print c.frame()
APL (Dyalog) ,
5754 bytes *-3 gracias a OP. Solicita matriz booleana. Imprime la matriz de caracteres.
Pruébalo en línea!
⎕,0
agregar un cero a la derecha (ignorado si hay un número par de columnas)⊢
ceder eso (para separar3
y⎕
)⍪∘0⍣3
agregue ceros en la parte inferior tres veces (porque⌺
cae ventanas parciales)0⍪⍣3
apila ceros en la parte superior tres veces (porque⌺
comienza en la esquina superior izquierda)⊢
producir eso (separa el paréntesis y el0
){
…}⌺(2 2⍴4 2)
En cada ventana de 4 filas y 2 columnas, con paso vertical de 4 filas y horizontal de 2 filas:⊢⌿⍵
última fila (encendido, reducción vertical derecha);[b6,b7]
(
...),
anteponer:3↑
toma tres filas;[[b0,b3],[b1,b4],[b2,b5]]
⍉
transponer;[[b0,b1,b2],[b3,b4,b5]]
,
enmarañar;[b0,b1,b2,b3,b4,b5]
ahora tenemos
[b0,b1,b2,b3,b4,b5,b6,b7]
⌽
marcha atrás;[b7,b6,b5,b4,b3,b2,b1,b0]
40,
anteponer 40 (para 40 × 2 9 = 10240);[40,b7,b6,b5,b4,b3,b2,b1,b0]
2⊥
evaluar como base-2 (binario)⎕UCS
convertir a personaje1↓
soltar la primera fila (todo cero debido al⌺
relleno de ')* En Clásico, contando
⌺
como⎕U233A
.fuente
0⍪⍣3⍪∘0⍣3⊢⎕,0
vs0⍪∘0⍣3⊢⎕,0
⍪∘0⍣3
y,0
sólo son necesarios debido a un error en⌺
, y el primero no es necesario para los casos de prueba.0⍪⍣3⍪∘0⍣3⊢⍵,0
a0(⊖⍪)⍣6⊢⍵,0
.Python 3 ,
168165161 bytesPruébalo en línea!
fuente
[*zip(*m[:4])]
lugar de llamarlist
.Haskell , 145 bytes
Pruébalo en línea!
fuente
Python 3 , 169 bytes
Pruébalo en línea!
fuente
if y%4<1:a+=-~len(l)//2*[10240],
comoa+=(y%4<1)*[-~len(l)//2*[10240]]
y encajarx=0;y+=1
en la misma línea. Creo que ahorra un byte.Perl 5 , 164 bytes
163 bytes de código + 1 bandera
-p
Pruébalo en línea!
Toma cada fila con una coma separada en una línea.
fuente
APL (Dyalog) , 53 bytes
Pruébalo en línea!
fuente