Couper une matrice booléenne dans les blocs et les 4x2 rendre en caractères 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]]
⣎⣀⠅
Pad avec 0-s si les dimensions ne sont pas des multiples de 4 et 2.
[[0,1,0],
[1,0,0],
[1,1,1]]
⠮⠄
Les règles de golf habituelles s'appliquent, flexibles sur le format d'entrée. La sortie doit avoir la structure d’une matrice ou ressembler à une matrice, par exemple une liste de chaînes; chaîne unique avec des nouvelles lignes.
Indice: chr(0x2800 + 128*b7 + 64*b6 + 32*b5 + 16*b4 + 8*b3 + 4*b2 + 2*b1 + b0)
est le motif de points
b0 b3
b1 b4
b2 b5
b6 b7
Plus grand test:
[[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]]
⣰⠟⠻⣦⠀⠠⠾⡇⢠⡞⢛⡆
⣿⢠⣬⣥⠄⣀⠀⡇⢈⣻⣈⡀
⣿⠘⢹⡇⡞⠙⡇⣧⡉⢹⡏⠀
⠘⠷⠟⠁⠳⠾⠃⠘⠇⠾⠧⠀
Réponses:
Gelée ,
31 à30 octetsEssayez-le en ligne!
Comment?
la source
Ḅ
soutien « chiffres » supérieur à 1? Au lieu d’ajouter 10240 (0x2800 - deux octets) au résultat, vous pouvez ajouter 40 (0x28 - un octet) au vecteur de chiffres binaires. Je ne connais pas grand chose à propos de Jelly, alors je ne suis pas sûr que cela fonctionnerait vraiment.Ḅ
convertirait effectivement un chiffre de gauche de 40 comme vous le suggérez, mais nous aurions besoin de l'ajouter à chaque liste (à une profondeur de 2), ce qui, je pense, nécessiterait davantage d'octets de code (;@€€40Ḅ
).JavaScript ES7
210207201200 200198194185 185183 octets4 octets sauvegardés grâce à ngn
3 octets sauvés grâce à Luke
Comment ça fonctionne
Je vais scinder le code en plusieurs parties et en parler séparément:
C'est là que chaque variable est déclarée.
x
ety
est la position du "curseur" (le bord supérieur gauche du caractère braille actuel). La coordonnée x augmente de 2 à chaque itération et s'arrête lorsqu'il n'y a pas de ligne avec l'indexy
(un [x] renvoieundefined
s'il n'existe pas et est converti en false).Il y a plusieurs astuces dans la deuxième rangée.
(a[y] || [])[x]
garantit que la recherche de la valeur à la(x, y)
position ne génère pas d'erreur. Le&&
est l'habituel et l'opérateur, et il vérifie seulement le côté droit de l'expression, si le gauche était vrai. Cela peut être traduit enLa partie suivante:
String.fromCharCode
convertit simplement le nombre passé en un caractère Unicode avec le même code de caractère. L'expression entre parenthèses calcule l'indice du caractère Braille:Passe par la position dans le
order, multiplie les valeurs à ces positions avec 2 i , où i est l’indice et les additionne. le
partie déclare une fonction lambda appelée
g
, laquelle, étant donnée une coordonnéex
ety
renvoie la valeur à la(x, y)
position ou 0 si la position se situe en dehors des limites du tableau.Cette partie additionne les deux dernières positions avec les poids corrects en utilisant la fonction définie un peu plus tôt.
Dernier point mais non le moindre, le
la partie a 2 fonctions. Il définit un lambda anonyme et garantit que la boucle for ne pose aucun problème (une seule lambda comme celle-ci ne peut pas contenir une seule boucle for, une évaluation contourne cela).
la source
||0
->|0
;~~(k/3)
->(k>2)
;*128
-><<7
(en remplaçant+
-s par|
-s)Mathematica,
1261109790Cette solution met à profit
ListCorrelate
pour convoluer un (inversé) sur une matrice noyau , qui est essentiellement une multiplication de matrice de glissement (ou produit scalaire). Voir une explication visuelle ici . Le rembourrage se fait en utilisant0
comme quatrième argument. Dans l'exemple suivant, nous nous attendons à ce que le résultat corresponde à l'indice ci-dessus:Notez que ce
ListConvolve
n’est pas plus court, puisque le troisième argument le serait-1
.Comme cela applique le noyau à chaque position de la matrice, il suffit d'extraire les éléments de chaque quatrième ligne et deuxième colonne. Nous utilisons pour sténographies
Span
etPart
:[[;;;;4,;;;;2]]
.Utilement,
FromCharacterCode
peut prendre une matrice de codes de caractères et renvoyer une liste de chaînes.Cette solution renvoie une liste de chaînes, qui est l'un des formats de sortie autorisés. Il suffit de préfixer
Column@
la sortie pour qu'elle «ressemble à une matrice».Vous pouvez jouer avec cela dans un cahier Mathematica en ligne gratuit. Allez ici , cliquez sur Créer un nouveau carnet, attendez un instant, collez-le dans ce code, puis appuyez sur shift+enter.
Alors vous devriez voir ceci:
la source
Dyalog APL,
13312211411210110098959493908888 octetsSuppose
⎕IO←0
-
8912 octets grâce à @ Adám dans le chat-2 octets grâce à @ngn
Essayez-le en ligne!
Comment (l'entrée est
⍵
)?A←4 2
, stocke le vecteur4 2
dans la variableA
(⍴⍵)÷
, les dimensions de⍵
divisé parA
⌈
plafondC←
, stocké dansC
A×
, multiplié parA
⍵↑⍨
, ajustement⍵
à ces dimensionsS←
, stocké dansS
⍳⍴
, index deS
{0 0≡A|⍵}¨
,1
où le haut gauche d'une cellule est,0
partout ailleurs(,b)/,⍳⍴b←
, index de vérité{⎕UCS 10240+2⊥(∊S⌷⍨⍵+⍳¨A)[⍎¨⍕76531420]}¨
, tournez chaque élément en brailleC⍴
, remodeler les dimensions pourC
la source
+/(2*0 3 1,A,4+⍳3)×something
→2⊥something[⍎¨⍕76524130]
⎕IO←0
?⎕IO←0
:)⎕IO
) dans APL. Pour⎕IO←1
, bien sûr, vous devrez ajouter 1 à chaque chiffre de 76524130.JavaScript, 136 octets
Grâce à ngn , l’utilisation des bits de décalage permet d’économiser 4 octets.
la source
i/4|0
->i>>2
c*2**
est un peu de décalage, aussi :)Python 2 + drawille ,
141125120116 octets16 octets sauvés grâce à ngn et L3viathan
5 octets sauvés grâce à L3viathan
4 octets sauvegardés grâce à ngn
Essayez-le en ligne!
tio n’a pas drawille installé donc ça ne marche pas
la source
enumerate()
une liste de compréhension.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
astuce - la compréhension pourrait être une déclaration en elle-même suivie de;print c.frame()
APL (Dyalog) ,
5754 octets *-3 grâce à OP. Invites pour la matrice booléenne. Imprime la matrice de caractères.
Essayez-le en ligne!
⎕,0
ajouter un zéro à droite (ignoré si nombre pair de colonnes)⊢
donner que (séparer3
et⎕
)⍪∘0⍣3
ajoute des zéros en bas trois fois (parce que⌺
les fenêtres partielles sont lâchées)0⍪⍣3
empile les zéros en haut trois fois (car⌺
commence dans le coin en haut à gauche)⊢
donne que (sépare la parenthèse et le0
){
…}⌺(2 2⍴4 2)
Sur chaque fenêtre à 2 colonnes de 4 rangées, avec gradins verticaux de 4 rangées et horizontales de 2 rangées:⊢⌿⍵
dernière rangée (réduction verticale droite);[b6,b7]
(
…),
Ajouter:3↑
prenez trois rangées;[[b0,b3],[b1,b4],[b2,b5]]
⍉
transposer;[[b0,b1,b2],[b3,b4,b5]]
,
effilochage;[b0,b1,b2,b3,b4,b5]
maintenant nous avons
[b0,b1,b2,b3,b4,b5,b6,b7]
⌽
sens inverse;[b7,b6,b5,b4,b3,b2,b1,b0]
40,
prépend 40 (pour 40 × 2 9 = 10240);[40,b7,b6,b5,b4,b3,b2,b1,b0]
2⊥
évaluer en base 2 (binaire)⎕UCS
convertir en personnage1↓
déposer la première ligne (tout à zéro à cause du⌺
remplissage de)* En classique, compter
⌺
comme⎕U233A
.la source
0⍪⍣3⍪∘0⍣3⊢⎕,0
vs0⍪∘0⍣3⊢⎕,0
⍪∘0⍣3
et,0
ne sont nécessaires en raison d'un bogue dans⌺
, et le premier n'est pas nécessaire pour vos cas de test.0⍪⍣3⍪∘0⍣3⊢⍵,0
à0(⊖⍪)⍣6⊢⍵,0
.Python 3 ,
168165161 octetsEssayez-le en ligne!
la source
[*zip(*m[:4])]
au lieu d'appelerlist
.Haskell , 145 octets
Essayez-le en ligne!
la source
Python 3 , 169 octets
Essayez-le en ligne!
la source
if y%4<1:a+=-~len(l)//2*[10240],
fura+=(y%4<1)*[-~len(l)//2*[10240]]
et à mesure et vous adapterx=0;y+=1
à la même ligne. Je pense que cela sauve un octet.Perl 5 , 164 octets
163 octets de code + 1 drapeau
-p
Essayez-le en ligne!
Prend chaque ligne séparée par une virgule sur une ligne.
la source
APL (Dyalog) , 53 octets
Essayez-le en ligne!
la source