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.
xyyes 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] devuelveundefinedsi 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.fromCharCodesimplemente 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 coordenadaxyydevuelve 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
ListCorrelatepara 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 utilizando0como cuarto argumento. En el siguiente ejemplo, esperamos que el resultado coincida con la sugerencia anterior:Tenga en cuenta que
ListConvolveno 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
SpanyPart:[[;;;;4,;;;;2]].Con ayuda,
FromCharacterCodepuede 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 2en variableA(⍴⍵)÷, las dimensiones de⍵dividido porA⌈, techoC←, guardado enCA×, multiplicado porA⍵↑⍨, se ajusta⍵a esas dimensionesS←, guardado enS⍳⍴, índices deS{0 0≡A|⍵}¨,1donde está la parte superior izquierda de una celda, en0cualquier otro lugar(,b)/,⍳⍴b←, índices de verdad{⎕UCS 10240+2⊥(∊S⌷⍨⍵+⍳¨A)[⍎¨⍕76531420]}¨, convierte cada elemento en brailleC⍴, remodelar las dimensiones aCfuente
+/(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>>2c*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 ctruco - 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!
⎕,0agregar un cero a la derecha (ignorado si hay un número par de columnas)⊢ceder eso (para separar3y⎕)⍪∘0⍣3agregue ceros en la parte inferior tres veces (porque⌺cae ventanas parciales)0⍪⍣3apila 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)⎕UCSconvertir a personaje1↓soltar la primera fila (todo cero debido al⌺relleno de ')* En Clásico, contando
⌺como⎕U233A.fuente
0⍪⍣3⍪∘0⍣3⊢⎕,0vs0⍪∘0⍣3⊢⎕,0⍪∘0⍣3y,0sólo son necesarios debido a un error en⌺, y el primero no es necesario para los casos de prueba.0⍪⍣3⍪∘0⍣3⊢⍵,0a0(⊖⍪)⍣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+=1en la misma línea. Creo que ahorra un byte.Perl 5 , 164 bytes
163 bytes de código + 1 bandera
-pPrué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