Ini sedikit mirip dengan entri tertutup debu ini tetapi saya berharap putaran saya membuatnya cukup unik. Tidak dapat menemukan apa pun yang menghalangi saya untuk memposting ini tetapi ada cukup banyak lautan di luar sana.
Bagaimanapun! Tantangan:
Kode Anda menerima serangkaian karakter; Ini mengkonversi ini menjadi versi gaya ASCII-art dari string yang sama, tetapi dengan tangkapan.
Transformasi input
- Satu-satunya karakter yang didukung adalah AZ dan 0-9
- Huruf kecil diubah menjadi huruf besar
- Ada lagi yang dihapus secara diam-diam
Menggambar karakter
- Setiap "pixel" font yang diperbesar diambil dari string input
- Pixel ke-n sama dengan karakter ke-n dalam string input. Jika n lebih besar dari panjang string input, balut kembali ke awal
- Masing-masing huruf digambar dari kiri ke kanan, atas ke bawah
- Huruf-huruf berikutnya mengambil indeks "karakter piksel" mereka dari tempat huruf terakhir ditinggalkan (misalnya dengan panjang input 10, jika huruf pertama memiliki 9 piksel, piksel pertama huruf kedua akan digambar dengan karakter input ke-10, yang kedua pixel akan ditarik dengan karakter input 1)
- Setiap huruf digambar dalam kisi 5x5, penuh dengan spasi. Anda dapat menemukan font yang akan Anda gunakan untuk terjemahan sebelumnya di pastebin ini atau sedikit lebih jauh di bawah tulisan ini
- Setiap huruf digambar pada baris yang sama, sehingga jumlah total jeda baris dalam output Anda adalah 4
- Setiap huruf dipisahkan oleh 2 kolom spasi
Font
000
0 00
0 0 0
00 0
000
111
1
1
1
11111
2222
2
222
2
22222
3333
3
333
3
3333
44
4 4
44444
4
4
55555
5
5555
5
5555
6666
6
6666
6 6
666
77777
7
7
7
7
888
8 8
888
8 8
888
999
9 9
9999
9
9999
AAA
A A
AAAAA
A A
A A
BBBB
B B
BBBB
B B
BBBB
CCCC
C
C
C
CCCC
DDDD
D D
D D
D D
DDDD
EEEEE
E
EEE
E
EEEEE
FFFFF
F
FFF
F
F
GGGG
G
G GG
G G
GGGG
H H
H H
HHHHH
H H
H H
IIIII
I
I
I
IIIII
JJJJJ
J
J
J
JJ
K K
K K
KKK
K K
K K
L
L
L
L
LLLLL
M M
MM MM
M M M
M M
M M
N N
NN N
N N N
N NN
N N
OOO
O O
O O
O O
OOO
PPPP
P P
PPPP
P
P
QQ
Q Q
Q QQ
Q Q
QQ Q
RRRR
R R
RRRR
R R
R R
SSSS
S
SSS
S
SSSS
TTTTT
T
T
T
T
U U
U U
U U
U U
UUU
V V
V V
V V
V V
V
W W
W W
W W W
WW WW
W W
X X
X X
X
X X
X X
Y Y
Y Y
Y
Y
Y
ZZZZZ
Z
Z
Z
ZZZZZ
Ya saya tahu 4 dan Q jelek
Sebuah contoh
Memasukkan
0123456789
Keluaran
012 567 6789 0123 34 45678 9012 34567 234 567
3 45 8 0 4 5 6 9 3 8 5 6 8 9
6 7 8 9 123 567 78901 0123 4567 9 789 0123
90 1 0 4 8 2 4 8 9 0 0 1 4
234 12345 56789 9012 3 5678 012 1 234 5678
Contoh lain
Memasukkan
a3 B'2
Keluaran
A3B B2A3 2A3B 2A3B
2 A B 2 A 2
3B2A3 2A3 3B2A A3B
B 2 B 3 B 2
A 3 2A3B 2A3B A3B2A
Celah standar dilarang. Kode golf sehingga tidak ada tanda centang hijau akan diberikan
[A-Z\d]
- Saya tidak berpikir menyaring karakter yang tidak valid menambah tantangan.Jawaban:
Python 2 ,
413411373364352345 byte-1 byte terima kasih kepada Kevin Cruijssen .
-9 byte terima kasih kepada Jo King .
-1 byte terima kasih kepada Lynn .
String data berisi unsintables, versi yang lolos di bawah.
Cobalah online!
Karena setiap karakter memiliki 25 piksel, maka dapat dengan mudah dikodekan dalam 25 bit. Angka dasar 126
'uM\x04<L\x10x\x14Se#ye\x0f>El4NpD@$\tgh>\x1d\x10\x15I,\x0em]a\x0e\x03B>e\x15,\x0c]\x03?kFL\x01\x0byglxV!\x18\x16\x0c\x0b\x10\x0b%w832wGj%uT{Hr*K,*[P\n6.&ED#T\x0c}^\x1c\x0fD\x17LI&p7\x17f\\d`*\x01l\x1bG\x12!Fac\x05\x08\x0eG\rz?!\x1aA'
mengkodekan semua karakter, yang0
dikodekan oleh 25 bit paling signifikan, pada 25 bit1
berikutnya danZ
dikodekan oleh 25 bit paling signifikan. Satu karakter dikodekan dalam urutan berikut:(
00
Adalah bit25
paling signifikan , yang paling signifikan)Spasi dikodekan oleh nol, bukan spasi oleh satu. Contoh :
Tidak disatukan
Cobalah online!
sumber
+' '
harus begitu+' '
. Jawaban yang bagus, jadi +1 dari saya..upper()
suatu tempat, jika tidak huruf-huruf dalam berakhir dengan huruf kecil>1
.APL (Dyalog Unicode) ,
228225224214 byteProgram lengkap. Meminta stdin untuk string. Mencetak ke stdout. Sekitar setengah dari kode hanya decoding alfabet yang dikodekan.
_
..._
mewakili string 143-byte LZ4 yang dikodekan dalam tanda kutip:"⊥\u0004pæ€}€\\⊃⌿Æ€â<Å€∧€ÀÆ€Ð┬:Ëcü\u0000≥ðè⊤õ⍨¢∧·èý\u0005þÐÕ\u001EÐ :\u001Eè⌊×ßi[B⊂ɫoãà oéìÐ⍙⊃Ý∣à)≥èB⊃\u001B\u001F⊥ä{⌿⍨ G⍺\u001B⌿Æ\u001F∇x└îR`:└è→⊂\u0000ê∧⍒\u0003ɫqè$$ÛD⊥â∊\u001B\u001Eéu|\u001B@4A|⍪┌nàkááЀ€€€€€€"
Cobalah online!
_
…_
143-byte LZ4-encoded string dalam tanda kutip⎕AV⍳
d Tuliskan itu di dalam A tomic V ector (set karakter)¯125+
tambahkan -125 untuk itu (untuk menandatangani bilangan bulat 8-bit)¯1(219⌶)
Dekompresi LZ40(220⌶)
deserialise ke 36 lapisan, 5 baris, 5 kolom array Boolean(
...)⌷
indeks ke dalam itu menggunakan indeks berikut:⎕A
huruf besar A lphabet⎕D,
tambahkan D igitsa←
simpan dia
(untuk sebuah lphabet)(
...)∩
persimpangan berikut ini dan itu (menghapus input yang tidak valid):⍞
meminta input teks dari stdin (konsol)1(819⌶)
lipat ke huruf besar (819
sepertinyaBig
, 1 untuk ya besar dan kecil)i←
simpan dii
(untuk saya nput)a⍳
d Tuliskan itu dia
⊂
terlampir (untuk mengindeks dengan masing-masing mewakili koordinat terkemuka)t←
simpan dit
(untuk t ext),
ravel (meratakan)r←
simpan dir
(untuk r avelled)+/
jumlah itu (yaitu jumlah karakter yang diperlukan untuk melukis karya seni)i⍴⍨
siklis r eshape input ke panjang yangr\
perluas itu; masukkan spasi pada 0s, konsumsi huruf pada 1s(
...) ⍴` membentuk kembali ke bentuk berikut:⍴t
bentuk teks↓
pisahkan array N-by-5-by5 menjadi matriks garis seni N-by-5⍉
transpos ke dalam matriks garis seni 5-by-N (ini menyelaraskan garis karakter yang sesuai)Secara default, APL memisahkan elemen sederhana dari array bersarang dengan 2 spasi.
sumber
Python 2 , 428 byte
Cobalah online!
Huruf-huruf tersebut dikodekan sebagai berikut:
Setiap bagian unik (ada 23) dikonversi ke biner, dan 1 ditambahkan di depan. Kemudian dikonversi ke basis 36.
Nomor base-36 yang dihasilkan adalah:
Inisial
1
dihapus, jadi kami memiliki satu karakter:Setiap huruf (
A-Z0-9
) kemudian dikodekan ke lima karakter baru ini.Ke dalam lima daftar:
Untuk memetakan input ke indeks dalam daftar ini, ordinal dimodifikasi:
Karena ordinal tidak 0-35, tetapi sedikit dicampur, 5 daftar disusun ulang, dan digabungkan:
Untuk setiap karakter dalam input, ditemukan 5 huruf, dan dikonversi menjadi int (base36):
Jika angkanya di bawah
30
,36
ditambahkan (yang hilang1
kami hapus sebelumnya)Kemudian nomor tersebut dikonversi kembali ke biner, dan
0
s dan1
s dikonversi kedan
.
. Dua spasi ditambahkan di akhir selama konversi.Misalnya.
Untuk masing-masing
.
dalam hasil, itu digantikan oleh karakter berikutnya dari input (iterated olehx
)sumber
Java 8,
917907 byteAkan golf itu turun dari sini untuk setidaknya membagi dua byte-count saat ini semoga ..
Cobalah online.
Penjelasan:
sumber
i=-1
dalam lambda. Tapi mungkin saya salah dan tidak diizinkan menurut meta? EDIT: Sesuatu yang serupa dilakukan cukup sering dalam jawaban C.int i;f->{for(;i++<10;)print(i);}
lebih pendek 1 byte darif->{for(int i=0;i++<10;)print(i);}
.i=-1
ada di dalam fungsi lambda. Contoh Anda tidak berfungsi jika Anda menjalankan lambda yang sama dua kali, milik saya, yang merupakan perbedaan utama di sini.int i;f->{for(i=0;i++<10;)print(i);}
akan diizinkan misalnya (meskipun tidak terlalu pendek).Japt v2.0a0
-R
,213211210209206193191190 byteTermasuk ruang terdepan di setiap baris.
Cobalah atau uji semua karakter (byte tambahan disebabkan TIO belum mendukung Japt v2)
Penjelasan
Tabel Pencarian
Setiap grup yang terdiri dari 4 karakter dalam string (diwakili oleh
...
sini untuk menghemat ruang dan karena mengandung banyak karakter yang tidak dimasukkan) adalah representasi biner dari setiap karakter (0
untuk spasi,1
untuk karakter) dengan baris baru dihapus dan dikonversi ke basis-100.Contoh
Kode
sumber
Ruby , 366 byte
Cobalah online!
Ini bisa bermain golf banyak, tapi sekarang saya sudah kehabisan waktu dan ide. Itu lebih sulit daripada yang saya pikirkan hanya untuk membuatnya bekerja.
Bagaimana itu bekerja:
Tidak terlalu sulit untuk dipahami, saya hanya akan menjelaskan bagaimana alfabet dikodekan dengan contoh. Setiap baris dari setiap karakter dikonversi ke biner dan kemudian ke base-36.
Langkah pertama adalah membuang semua karakter non-alfanumerik dari string input.
Kemudian saya membuat tabel pencarian untuk rendering akhir, karena saya ingin mencetak baris demi baris.
Setelah itu, iterasi pada baris alfabet, saya membuat pola biner dari huruf-huruf itu.
Akhirnya saya mengganti 0 dengan spasi dan 1 dengan karakter dari tabel pencarian.
Jangan ragu untuk bermain golf lebih lanjut, saya tahu ini bisa lebih pendek 20-30 byte (menggunakan gsub bukan tr, dan sebagainya), tapi saya tidak tertarik sekarang, kecuali saya bisa membuat tabel alfabet secara drastis lebih kecil.
sumber
Arang ,
172164 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Awali digit ke alfabet huruf besar yang telah ditentukan.
Huruf besar input dan filter semua karakter yang tidak didukung.
Ulangi karakter yang tersisa.
Ulangi setiap baris, secara implisit mencetak setiap hasil pada barisnya sendiri.
String yang dikompresi adalah konstanta integer besar @ ovs, dikonversi ke biner dan dibalik. Ini kemudian diiris menjadi 180 substring dari 5 karakter, dan substring yang relevan untuk karakter dan baris saat ini kemudian diulang.
Jika bit disetel maka cetak secara siklik karakter input yang disaring selanjutnya cetak spasi.
Posisikan kursor siap untuk mencetak karakter berikutnya.
sumber
Perl 5 dengan
-nlaF/[^A-Za-z0-9]+|/
, 247 byteCobalah online!
Penjelasan
Pertama tabel pencarian dibuat
%l
menggunakanpack
data ed. Data ini adalah string biner 900-bit dari masing-masing char yang dikemas sebagai string biner 25-bit (disimpan sebagai 113 byte - hanya 1 byte lebih banyak dari arang!), Mirip dengan beberapa jawaban lain, demikianA
juga:yang, gunakan
0
untuk ruang dan1
untukA
adalah:dan tanpa jeda baris adalah:
Setelah pencarian diinisialisasi, kita beralih ke setiap karakter yang valid di
@F
(yang diisi menggunakan-a
opsi utosplit Perl ) menambahkan ke masing-masing dari 5 elemen daftar@;
untuk setiap baris dalam array dari pencarian, mengganti semua1
denganuc$F[$i++%@F]
yang merupakan bagian$i
dari karakter (modulo@F
yang panjangnya@F
) dikonversikan menjadiu
pperc
ase, dan semua0
s$"
yang defaultnya adalah spasi. Setelah setiap indeks masuk@;
diisi untuk setiap karakter dalam@F
,say
cetak setiap baris dengan baris baru.Catatan : string sesudahnya
unpack
berisi unsintables yang lolos menggunakan\xXX
notasi. Verifikasi untuk skor 247 .sumber
SOGL V0.12 ,
165164163 byteCoba Di Sini!
Penjelasan:
sumber
JavaScript (Node.js) ,
365347 byteDisimpan 1 byte berkat @Scoots
Mengembalikan array 5 string. Termasuk ruang terdepan di setiap baris.
3736 byte hilang dalam mengonversi semuanya menjadi huruf besar dan cocok[A-Z0-9]
: - /Cobalah online!
Pengkodean karakter
Karakter dikodekan terbalik dan dikonversi ke basis kustom-80 dengan offset 4 , menggunakan rentang ASCII [35..114] .
Nilai 35 hingga 79 secara langsung dipetakan ke karakter ASCII yang sesuai, sedangkan nilai 0 hingga 34 dipetakan ke karakter 80 hingga 114 . Ini memungkinkan untuk mendekode dengan hanya mengambil kode ASCII modulo 80 .
Misalnya, 'F' dikodekan sebagai
"RZW["
:Dimulai dengan i = v = 4 , itu diterjemahkan kembali ke integer 25-bit dengan melakukan:
Dalam kode lengkap, kami benar-benar memproses irisan tak terbatas () dari aliran yang disandikan, yang berarti bahwa kami cenderung untuk mengulangi secara signifikan lebih dari 4 kali. Ini bukan masalah karena semua iterasi dengan i <0 hanya akan mempengaruhi bagian desimal dari hasil, yang tetap diabaikan oleh operasi bitwise yang segera mengikuti.
Cobalah online!
sumber
toUpperCase
dengani
bendera di RegEx?[A-Z\d]
bukan[A-Z0-9]
?C (gcc) ,
792690 byteCobalah online!
Berhasil memeras ini di bawah 800 dengan beberapa penggunaan kembali variabel. Memilih untuk menyimpan font sebagai arrayint
s, seolah-olah menyimpannya sebagai satu string panjang tampak seperti ide yang menarik sehingga banyak dari potongan 8-bit font itu bukan karakter ASCII nyaman yang bagus bahwa kode melarikan diri mengambil lebih banyak karakter daripadaint
array.Sunting: Naik di bawah 700 dengan beralih ke pengkodean string setelah semua - agak terinspirasi oleh banyak tanggapan lain di sini saya dirakit bersama representasi basis-92 menggunakan (sebagian besar) karakter ASCII yang dapat dicetak. Representasi tidak termasuk garis miring terbalik yang perlu ekstra untuk melarikan diri tetapi itu hanya terjadi sekali dalam font.
Selain itu tidak ada banyak hal yang terlalu mencolok terjadi - input (terdiri dari argumen baris perintah pertama) disalin ke dalam susunan tumpukan, dikurangi karakter yang tidak ada dalam font dan dengan huruf kecil diganti dengan huruf mereka versi huruf besar, karakter "piksel" yang digunakan untuk setiap huruf mulai dihitung (menggunakan
__builtin_popcount
memiliki nama yang sangat panjang tetapi masih lebih baik daripada metode penghitungan bit yang dapat saya pikirkan), dan kemudian pencetakan dilakukan baris demi baris. Compiler tentu saja menampilkan beberapa kali panjang program dalam peringatan.Agak merosot di bawah untuk kesenangan menonton Anda:
sumber
Excel VBA, 816 byte
Fungsi jendela langsung VBE anonim yang mengambil input dari jangkauan
[A1]
dan keluaran ke konsol.Sejauh yang saya ketahui, ini adalah jawaban VBA pertama yang menggunakan
base64
kompresi.Catatan: Jawaban ini tergantung pada
Microsoft XML, v3.0
referensi VBAContoh I / O
Tidak Dijelaskan dan Dijelaskan
Bagian utama dari solusi ini menyimpan font besar sebagai basis 64 string. Ini dilakukan dengan terlebih dahulu mengubah font menjadi biner, di mana
1
merepresentasikan piksel on dan0
merepresentasikan pixel off. Misalnya, untuk0
, ini direpresentasikan sebagaiDengan pendekatan ini, alfanumerik kemudian dapat direpresentasikan sebagai
Segmen ini digabung dan dikonversi menjadi MSXML base 64, rendering
Subrutin di bawah ini mengambil ini, kembali mengkonversi ke biner, dan menggunakan ini referensi dari mana untuk membangun string output, baris demi baris, meraih pertama 5 piksel teratas dari setiap karakter, kemudian baris kedua dan seterusnya sampai string dibangun .
Subrutin kemudian beralih ke string output dan menggantikan piksel 'on' dengan karakter dari string input.
sumber
K (ngn / k) ,
230231 byte(+1 byte setelah perubahan imp bahasa)
Cobalah online!
dimana
a
string literal dikutip yang mengkode font. K melihat string sebagai urutan byte, sehingga sebuah program yang mengandung literal seperti itu valid, tetapi tidak dapat dijalankan pada TIO, karena bentuk HTML-nya mencoba menafsirkannya sebagai UTF-8 dan mengacaukannya.Hitungan byte dihitung sebagai:
119 dilaporkan oleh TIO
-2 untuk penamaan fungsi
f:
-1 untuk pengganti
a
2 untuk sepasang kutipan
""
113 untuk panjang string literal
a
yang tidak mengandung karakter apa pun yang membutuhkan pelariansumber