Potong matriks boolean di 4x2 blok dan membuat mereka sebagai karakter 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 dengan 0-s jika dimensi bukan kelipatan 4 dan 2.
[[0,1,0],
[1,0,0],
[1,1,1]]
⠮⠄
Aturan golf biasa berlaku, fleksibel pada format input. Keluaran harus memiliki struktur matriks atau terlihat seperti matriks, misalnya daftar string; string tunggal dengan baris baru.
Petunjuk: chr(0x2800 + 128*b7 + 64*b6 + 32*b5 + 16*b4 + 8*b3 + 4*b2 + 2*b1 + b0)
adalah pola titik
b0 b3
b1 b4
b2 b5
b6 b7
Tes yang lebih besar:
[[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]]
⣰⠟⠻⣦⠀⠠⠾⡇⢠⡞⢛⡆
⣿⢠⣬⣥⠄⣀⠀⡇⢈⣻⣈⡀
⣿⠘⢹⡇⡞⠙⡇⣧⡉⢹⡏⠀
⠘⠷⠟⠁⠳⠾⠃⠘⠇⠾⠧⠀
Jawaban:
Jelly ,
3130 byteCobalah online!
Bagaimana?
sumber
Ḅ
dukungan "angka" lebih besar dari 1? Alih-alih menambahkan 10240 (0x2800 - dua byte) ke hasilnya, Anda bisa menambahkan 40 (0x28 - satu byte) ke vektor digit biner. Saya tidak tahu banyak tentang Jelly, jadi saya tidak yakin apakah ini akan berhasil.Ḅ
memang akan mengkonversi digit terdepan dari 40 seperti yang Anda sarankan, tetapi kita perlu menambahkannya ke setiap daftar tersebut (pada kedalaman 2) yang, saya pikir, akan membutuhkan lebih banyak byte kode (;@€€40Ḅ
).JavaScript ES7
210207201200198194185183 byte4 byte disimpan berkat ngn
3 byte disimpan berkat Luke
Bagaimana itu bekerja
Saya akan membagi kode menjadi beberapa bagian dan membicarakannya secara terpisah:
Di sinilah setiap variabel dideklarasikan.
x
dany
adalah posisi "cursor" (tepi kiri atas karakter braille saat ini). Koordinat x meningkat 2 setiap iterasi, dan berhenti, ketika tidak ada baris dengan indeksy
(a [x] kembaliundefined
jika tidak ada, yang akan dikonversi ke false).Ada beberapa trik di baris kedua.
(a[y] || [])[x]
memastikan bahwa mencari nilai pada(x, y)
posisi tidak menimbulkan kesalahan. Ini&&
adalah yang biasa dan operator, dan hanya memeriksa sisi kanan ekspresi, jika yang kiri benar. Ini dapat diterjemahkan keBagian selanjutnya:
String.fromCharCode
cukup konversi nomor yang diteruskan ke karakter unicode dengan kode karakter yang sama. Ekspresi dalam tanda kurung menghitung indeks karakter Braille:Pergi melalui posisi di
memesan, mengalikan nilai pada posisi-posisi tersebut dengan 2 i , di mana i adalah indeks dan menambahkannya bersama-sama. Itu
bagian menyatakan fungsi lambda disebut
g
, yang diberix
dany
mengoordinasikan mengembalikan nilai pada(x, y)
posisi atau 0 jika posisi terletak di luar batas array.Bagian ini menambahkan dua posisi terakhir dengan bobot yang benar menggunakan fungsi yang didefinisikan sedikit lebih awal.
Terakhir,
bagian memiliki 2 fungsi. Ini mendefinisikan lambda anonim dan memastikan, untuk loop tidak menyebabkan masalah (satu baris lambda seperti ini tidak dapat berisi satu untuk loop saja, evaluasi mengelak dari ini).
sumber
||0
->|0
;~~(k/3)
->(k>2)
;*128
-><<7
(mengganti+
-s dengan|
-s)Mathematica,
1261109790Solusi ini mengambil keuntungan dari
ListCorrelate
untuk membelit sebuah (terbalik) kernel lebih matriks , yang pada dasarnya adalah perkalian matriks geser (atau dot produk). Lihat penjelasan visual di sini . Padding dilakukan dengan menggunakan0
argumen keempat. Dalam contoh berikut, kami berharap hasilnya sesuai dengan petunjuk di atas:Perhatikan bahwa
ListConvolve
tidak ada yang lebih pendek, karena argumen ketiga adalah-1
.Karena ini menerapkan kernel pada setiap posisi matriks, kita hanya perlu mengekstrak elemen di setiap baris keempat dan kolom kedua. Kami menggunakan singkatan untuk
Span
danPart
:[[;;;;4,;;;;2]]
.Bermanfaat,
FromCharacterCode
dapat mengambil matriks kode karakter dan mengembalikan daftar string.Solusi ini mengembalikan daftar string, yang merupakan salah satu format output yang diizinkan. Cukup tambahkan
Column@
untuk output agar "terlihat seperti matriks."Anda dapat bermain-main dengan ini di buku catatan Mathematica online gratis. Buka di sini , klik Buat Notebook Baru, tunggu sebentar, rekatkan kode ini, lalu tekan shift+enter.
Maka Anda harus melihat ini:
sumber
Dyalog APL,
13312211411210110098959493908886 byteDiasumsikan
⎕IO←0
-
8912 byte berkat @ Adám dalam obrolan-2 byte terima kasih kepada @ngn
Cobalah online!
Bagaimana (inputnya
⍵
)?A←4 2
, simpan vektor4 2
dalam variabelA
(⍴⍵)÷
, dimensi⍵
dibagi denganA
⌈
, langit-langitC←
, disimpan diC
A×
, dikalikan denganA
⍵↑⍨
, cocok⍵
dengan dimensi tersebutS←
, disimpan diS
⍳⍴
, indeksS
{0 0≡A|⍵}¨
, di1
mana bagian kiri atas sel berada, di0
tempat lain(,b)/,⍳⍴b←
, indeks kebenaran{⎕UCS 10240+2⊥(∊S⌷⍨⍵+⍳¨A)[⍎¨⍕76531420]}¨
, ubah setiap elemen menjadi brailleC⍴
, membentuk kembali dimensi keC
sumber
+/(2*0 3 1,A,4+⍳3)×something
→2⊥something[⍎¨⍕76524130]
⎕IO←0
?⎕IO←0
:)⎕IO
) di APL. Karena⎕IO←1
, tentu saja Anda harus menambahkan 1 untuk setiap digit 76524130.JavaScript, 136 byte
Berkat ngn , menggunakan bit shift menghemat 4 byte.
sumber
i/4|0
->i>>2
c*2**
sedikit bergeser juga :)Python 2 + drawille ,
141125120116 byteDisimpan 16 byte berkat ngn dan L3viathan
Disimpan 5 byte berkat L3viathan
Disimpan 4 byte berkat ngn
Cobalah online!
tio tidak memiliki drawille yang terpasang sehingga tidak berfungsi
sumber
enumerate()
dan pemahaman daftar.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
triknya - pemahamannya bisa berupa pernyataan sendiri diikuti oleh;print c.frame()
APL (Dyalog) ,
5754 byte *-3 terima kasih kepada OP. Anjuran untuk matriks Boolean. Mencetak matriks karakter.
Cobalah online!
⎕,0
tambahkan nol di sebelah kanan (diabaikan jika jumlah kolom genap)⊢
hasilkan itu (untuk memisahkan3
dan⎕
)⍪∘0⍣3
tambahkan nol di bagian bawah tiga (karena⌺
menjatuhkan sebagian windows)0⍪⍣3
tumpukan nol di atas tiga (karena⌺
dimulai di sudut kiri atas)⊢
menghasilkan yang (memisahkan tanda kurung dan0
){
...}⌺(2 2⍴4 2)
pada setiap jendela 2-kolom 4-baris, dengan langkah vertikal 4-baris dan 2 baris:⊢⌿⍵
baris terakhir (lit. pengurangan kanan vertikal);[b6,b7]
(
...),
tambahkan:3↑
ambil tiga baris;[[b0,b3],[b1,b4],[b2,b5]]
⍉
mengubah urutan;[[b0,b1,b2],[b3,b4,b5]]
,
berlepasan;[b0,b1,b2,b3,b4,b5]
sekarang kita punya
[b0,b1,b2,b3,b4,b5,b6,b7]
⌽
membalikkan;[b7,b6,b5,b4,b3,b2,b1,b0]
40,
prepend 40 (untuk 40 × 2 9 = 10240);[40,b7,b6,b5,b4,b3,b2,b1,b0]
2⊥
mengevaluasi sebagai basis-2 (biner)⎕UCS
konversi ke karakter1↓
jatuhkan baris pertama (semuanya nol karena⌺
bantalan)* Dalam Klasik, menghitung
⌺
sebagai⎕U233A
.sumber
0⍪⍣3⍪∘0⍣3⊢⎕,0
vs0⍪∘0⍣3⊢⎕,0
⍪∘0⍣3
dan,0
hanya diperlukan karena ada bug⌺
, dan yang pertama tidak diperlukan untuk kasus uji Anda.0⍪⍣3⍪∘0⍣3⊢⍵,0
menjadi0(⊖⍪)⍣6⊢⍵,0
.Python 3 ,
168165161 byteCobalah online!
sumber
[*zip(*m[:4])]
alih - alih meneleponlist
.Haskell , 145 byte
Cobalah online!
sumber
Python 3 , 169 byte
Cobalah online!
sumber
if y%4<1:a+=-~len(l)//2*[10240],
sebagaia+=(y%4<1)*[-~len(l)//2*[10240]]
dan cocokx=0;y+=1
pada baris yang sama. Saya pikir itu menghemat satu byte.Perl 5 , 164 byte
163 byte kode + 1 bendera
-p
Cobalah online!
Membawa setiap baris koma dipisahkan pada satu baris.
sumber
APL (Dyalog) , 53 byte
Cobalah online!
sumber