Schneiden Sie ein boolean Matrix in 4x2 Blöcke und machen sie als Braille - Zeichen 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]]
⣎⣀⠅
Mit 0-s auffüllen, wenn die Abmessungen nicht ein Vielfaches von 4 und 2 sind.
[[0,1,0],
[1,0,0],
[1,1,1]]
⠮⠄
Es gelten die üblichen Golfregeln, die sich nach dem Eingabeformat richten. Die Ausgabe sollte entweder die Struktur einer Matrix haben oder wie eine Matrix aussehen, z. B. eine Liste von Zeichenfolgen. Einzelsaite mit Zeilenumbrüchen.
Hinweis: chr(0x2800 + 128*b7 + 64*b6 + 32*b5 + 16*b4 + 8*b3 + 4*b2 + 2*b1 + b0)
ist das Punktmuster
b0 b3
b1 b4
b2 b5
b6 b7
Größerer 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]]
⣰⠟⠻⣦⠀⠠⠾⡇⢠⡞⢛⡆
⣿⢠⣬⣥⠄⣀⠀⡇⢈⣻⣈⡀
⣿⠘⢹⡇⡞⠙⡇⣧⡉⢹⡏⠀
⠘⠷⠟⠁⠳⠾⠃⠘⠇⠾⠧⠀
Antworten:
Jelly ,
3130 BytesProbieren Sie es online!
Wie?
quelle
Ḅ
Unterstützung „Ziffern“ größer als 1? Anstatt 10240 (0x2800 - zwei Bytes) zum Ergebnis hinzuzufügen, können Sie dem Vektor der Binärziffern 40 (0x28 - ein Byte) voranstellen. Ich weiß nicht viel über Jelly, also bin ich mir nicht sicher, ob das wirklich funktionieren würde.Ḅ
würde in der Tat eine führende Ziffer von 40 konvertieren, wie Sie vorschlagen, aber wir müssten sie jeder solchen Liste voranstellen (mit einer Tiefe von 2), was meiner Meinung nach mehr Byte Code (;@€€40Ḅ
) erfordern würde .JavaScript ES7
210207201200198194185183 Bytes4 Bytes gespart dank ngn
3 Bytes gespart dank Luke
Wie es funktioniert
Ich werde den Code in Teile aufteilen und separat darüber sprechen:
Hier wird jede Variable deklariert.
x
undy
ist die Position des "Cursors" (der obere linke Rand des aktuellen Braillezeichens). Die x-Koordinate wird bei jeder Iteration um 2 erhöht und angehalten, wenn keine Zeile mit dem Index vorhanden isty
(a [x] wird zurückgegeben,undefined
wenn es nicht vorhanden ist, was in false konvertiert wird).In der zweiten Reihe gibt es mehrere Tricks.
(a[y] || [])[x]
stellt sicher, dass das Nachschlagen des Werts an der(x, y)
Position keinen Fehler verursacht. Das&&
ist das Übliche und der Operator und überprüft nur die rechte Seite des Ausdrucks, wenn die linke wahr ist. Dies kann übersetzt werden inDer nächste Teil:
String.fromCharCode
konvertiert einfach die übergebene Nummer in ein Unicode-Zeichen mit demselben Zeichencode. Der Ausdruck in Klammern berechnet den Index des Braillezeichens:Geht die Position in der durch
order multipliziert die Werte an diesen Positionen mit 2 i , wobei i der Index ist, und addiert sie zusammen. Das
part deklariert eine aufgerufene Lambda-Funktion
g
, die beix
undy
-Koordinate entweder den Wert an der(x, y)
Position oder 0 zurückgibt, wenn die Position außerhalb der Grenzen des Arrays liegt.Dieser Teil addiert die letzten beiden Positionen mit den korrekten Gewichten unter Verwendung der zuvor definierten Funktion.
Last but not least die
Teil hat 2 Funktionen. Es definiert ein anonymes Lambda und stellt sicher, dass die for-Schleife keine Probleme verursacht (ein einzeiliges Lambda wie dieses kann keine einzige for-Schleife enthalten, eine Auswertung umgeht dies).
quelle
||0
->|0
;~~(k/3)
->(k>2)
;*128
-><<7
(Ersetzen von+
-s durch|
-s)Mathematica,
1261109790Diese Lösung nutzt den Vorteil
ListCorrelate
, einen (umgekehrten) Kernel über eine Matrix zu falten , bei der es sich im Wesentlichen um eine Gleitmatrixmultiplikation (oder ein Skalarprodukt) handelt. Eine visuelle Erklärung finden Sie hier . Das Auffüllen erfolgt mit0
dem vierten Argument. Im folgenden Beispiel erwarten wir, dass das Ergebnis dem obigen Hinweis entspricht:Beachten Sie, dass dies
ListConvolve
nicht kürzer ist, da das dritte Argument wäre-1
.Da dies den Kernel an jeder Position der Matrix anwendet, müssen wir nur die Elemente in jeder vierten Zeile und zweiten Spalte extrahieren. Wir verwenden Kürzel für
Span
undPart
:[[;;;;4,;;;;2]]
.Hilfreich,
FromCharacterCode
kann eine Matrix von Zeichencodes nehmen und eine Liste von Zeichenfolgen zurückgeben.Diese Lösung gibt eine Liste von Zeichenfolgen zurück, bei der es sich um eines der zulässigen Ausgabeformate handelt. Stellen Sie einfach vor,
Column@
dass die Ausgabe wie eine Matrix aussieht.Sie können damit in einem kostenlosen Online-Mathematica-Notizbuch herumspielen. Gehen Sie hier , klicken Sie auf ein neues Notebook erstellen, warten Sie einen Moment, in diesem Code einfügen, dann drücken shift+enter.
Dann solltest du folgendes sehen:
quelle
Dyalog APL,
13312211411210110098959493908886 BytesGeht davon aus
⎕IO←0
-
8912 Bytes dank @ Adám im Chat-2 Bytes dank @ngn
Probieren Sie es online!
Wie (Eingabe ist
⍵
)?A←4 2
Speichern Sie den Vektor4 2
in VariableA
(⍴⍵)÷
, die Dimensionen⍵
geteilt durchA
⌈
DeckeC←
, gespeichert inC
A×
, multipliziert mitA
⍵↑⍨
passen⍵
zu diesen DimensionenS←
, gespeichert inS
⍳⍴
, Indizes vonS
{0 0≡A|⍵}¨
,1
wo sich die obere linke Ecke einer Zelle befindet,0
überall sonst(,b)/,⍳⍴b←
, wahrheitsgemäße Indizes{⎕UCS 10240+2⊥(∊S⌷⍨⍵+⍳¨A)[⍎¨⍕76531420]}¨
, verwandle jedes Element in BrailleC⍴
Umformen der Maße aufC
quelle
+/(2*0 3 1,A,4+⍳3)×something
→2⊥something[⍎¨⍕76524130]
⎕IO←0
?⎕IO←0
:)⎕IO
) in APL vergessen . Für⎕IO←1
, natürlich würden Sie 1 bis jede Ziffer von 76524130. hinzufügen müssenJavaScript, 136 Bytes
Dank ngn sparen Sie mit Bitverschiebungen 4 Bytes.
quelle
i/4|0
->i>>2
c*2**
ist ein bisschen verschieben, auch :)Python 2 + Drawille ,
141125120116 Bytes16 Bytes dank ngn und L3viathan eingespart
5 Bytes gespart dank L3viathan
4 Bytes gespart dank ngn
Probieren Sie es online!
tio hat keine Drawille installiert und funktioniert daher nicht
quelle
enumerate()
ein Listenverständnis verwenden.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
trick nicht - das verständnis könnte eine;print c.frame()
APL (Dyalog) ,
5754 Byte *-3 dank OP. Fordert zur Eingabe einer Booleschen Matrix auf. Druckt die Zeichenmatrix.
Probieren Sie es online!
⎕,0
füge rechts eine Null an (ignoriert wenn gerade Anzahl von Spalten)⊢
ergeben, dass (zu trennen3
und⎕
)⍪∘0⍣3
füge dreimal Nullen am unteren Rand an (da⌺
Teilfenster wegfallen)0⍪⍣3
stapeln Sie Nullen dreimal nach oben (weil⌺
in der oberen linken Ecke beginnt)⊢
ergeben, dass (trennt die Klammer und0
){
… In}⌺(2 2⍴4 2)
jedem 4-zeiligen 2-Spalten-Fenster mit 4-zeiliger vertikaler und 2-zeiliger horizontaler Stufe:⊢⌿⍵
letzte Reihe (lit. vertikale rechte Verkleinerung);[b6,b7]
(
…),
Voranstellen:3↑
Nimm drei Reihen.[[b0,b3],[b1,b4],[b2,b5]]
⍉
transponieren;[[b0,b1,b2],[b3,b4,b5]]
,
Ravel;[b0,b1,b2,b3,b4,b5]
jetzt haben wir
[b0,b1,b2,b3,b4,b5,b6,b7]
⌽
umkehren;[b7,b6,b5,b4,b3,b2,b1,b0]
40,
voranstellen 40 (für 40 × 2 9 = 10240);[40,b7,b6,b5,b4,b3,b2,b1,b0]
2⊥
als Basis 2 (binär) auswerten⎕UCS
in Charakter umwandeln1↓
Lasse die erste Zeile fallen (Null wegen der⌺
Polsterung)* Bei Classic gilt
⌺
als⎕U233A
.quelle
0⍪⍣3⍪∘0⍣3⊢⎕,0
gegen Ende: vs0⍪∘0⍣3⊢⎕,0
⍪∘0⍣3
und,0
nur aufgrund eines Fehlers benötigt werden⌺
und der erste für Ihre Testfälle nicht benötigt wird.0⍪⍣3⍪∘0⍣3⊢⍵,0
zu0(⊖⍪)⍣6⊢⍵,0
.Python 3 ,
168165161 BytesProbieren Sie es online!
quelle
[*zip(*m[:4])]
anstatt aufzurufenlist
.Haskell , 145 Bytes
Probieren Sie es online!
quelle
Python 3 , 169 Bytes
Probieren Sie es online!
quelle
if y%4<1:a+=-~len(l)//2*[10240],
als umschreibena+=(y%4<1)*[-~len(l)//2*[10240]]
undx=0;y+=1
in dieselbe Zeile einfügen . Ich denke, es spart ein Byte.Perl 5 , 164 Bytes
163 Byte Code + 1 Flag
-p
Probieren Sie es online!
Nimmt jedes Zeilenkomma getrennt in eine Zeile.
quelle
APL (Dyalog) , 53 Bytes
Probieren Sie es online!
quelle