Tugas Anda adalah mencetak Seni ASCII berikut:
_ _ _______ _
| | | | (_______) _ | |
| |__ | | ____ ____ ____ _ _ _____ ____ ___| |_ ____ ____| |
| __)| |/ _ | _ \| _ \| | | | | ___) / _ |/___) _)/ _ )/ ___)_|
| | | ( ( | | | | | | | | |_| | | |____( ( | |___ | |_( (/ /| | _
|_| |_|\_||_| ||_/| ||_/ \__ | |_______)_||_(___/ \___)____)_| |_|
|_| |_| (____/
Ingat, ini adalah kode-golf , jadi kode dengan jumlah byte terkecil menang. Semoga berhasil.
code-golf
string
kolmogorov-complexity
Oliver Ni
sumber
sumber
|()/\_
yang mengarah ke bentuk kompresi yang sama sekali berbeda. Kami telah memiliki tantangan seni ASCII serupa sebelumnya, tetapi saya ingin melihat pertanyaan ini berjalan untuk melihat apakah ada yang memanfaatkan geometri. Di sisi lain itu tidak terlalu luar biasa, dan Anda benar, kami tidak memerlukan tag Paskah.Jawaban:
Bubblegum, 130 byte
Cobalah online.
Terkompresi menggunakan
zopfli --deflate --i10000
.sumber
JavaScript (ES6),
377373360359345 byteTerima kasih kepada @Neil untuk penghematan satu byte, dan ke @ edc65 untuk 14 byte lainnya!
Kupikir aku akan mencobanya. Mengompres pola pengulangan yang umum dalam teks.
_____
(5 garis bawah) disimpan sebagai_5
5
| | | | |
(5|
pola) disimpan sebagai~5
sumber
=>
._
s._
dengan_
diikuti oleh berapa banyak yang ada dalam menjalankan~1
atau_2
sepertinya tidak sepadan. (Mengapa tidak menggunakan|2
misalnya?)BinaryFuck ,
565378 byteIni pada dasarnya menyimpan karakter yang digunakan dalam array, kemudian menavigasi melalui array, mencetaknya sesuai. Saat ini cukup lama, akan dipersingkat.
Berikut adalah kode yang tidak di-serigala:
EDIT: dengan mengatur ulang urutan karakter dalam sel, saya menghemat 186 byte!
sumber
1
. Harap berikan tautan ke juru bahasa dan hexdump dari kode sumber sehingga hasil Anda dapat direproduksi.JavaScript (ES6), 380 byte
Untuk kelengkapan ini adalah upaya saya untuk menggunakan metode kompresi yang berbeda, meskipun ternyata tidak seefisien run length encoding. Setiap digit menentukan bahwa N terakhir yang dihasilkan karakter diulang. Digit berikutnya dapat mengulangi karakter yang sudah diulang, misalnya
| 23
berubah menjadi| | |
. Saya hanya berharap saya bisa memampatkan menjalankan tiga karakter.sumber
C,
517427407 byteBelum Dikerjakan Coba Online
sumber
JavaScript, 297 byte
Pengkodean sederhana dari sepuluh substring paling umum (sejauh yang saya tahu). Mereka tidak beres karena tumpang tindih; encoder saya (di bawah) perlu melihat eg
'_ '
dan' _'
sebelumnya' '
.Ini membutuhkan string dan array substring untuk menyandikan dan mengembalikan a) string yang disandikan b) daftar potensi penghematan berikutnya c) jumlah byte yang disimpan sejauh ini.
sumber
𝔼𝕊𝕄𝕚𝕟, 72 karakter / 209 byte
Try it here (Firefox only).
Ya, setidaknya jumlah char bagus, tapi kami tidak bisa menggunakan halaman kode khusus. Itu hanya LZString-dekompresi. Saya juga sedang mengerjakan solusi lain - lebih lanjut tentang itu nanti.
sumber
Perl 5, 286 byte
perl -M5.01 happy.pl
, dimanahappy.pl
:Terima kasih kepada Dom Hastings (dalam komentar di sini) untuk ide yang menyelamatkan saya dua byte dan menghasilkan ide saya yang menyelamatkan empat lagi.
sumber
L
sebagai singkatan untuk|_
;-)Python 2,
343328316 byteSolusi ini tidak menggunakan fungsi dekompresi atau impor lainnya.
Versi yang dapat dibaca:
Menggunakan versi pengkodean run run dengan 3 bit untuk simbol dari set "\ n _ | () /". Sisa byte adalah panjangnya, tetapi saya telah membatasi panjangnya menjadi 10 dan memanipulasinya sehingga hasilnya adalah karakter yang dapat dicetak yang valid dalam string python tanpa melarikan diri.
Mengganti string yang terkait dengan "|" dengan satu karakter dalam data yang disandikan menghemat beberapa byte lagi.
Saya menghapus spasi tambahan pada baris 1 dan 5, yang mungkin sedikit menekuk aturan, tetapi tampaknya praktis.
Program ini menghasilkan data yang dikemas:
sumber
Python 2, 159 byte
Sumber ini mengandung karakter yang tidak dapat dicetak, sehingga disajikan sebagai hexdump yang dapat didekodekan
xxd -r
.sumber
Racket,
367364 byteTidak disatukan
Berdasarkan tantangan yang sama saya jawab .
sumber
/// ,
282279 bytePerbaikan: Saya perhatikan bahwa ada terlalu banyak
//
perintah pengganti, jadi saya memutuskan untuk mengompresnya juga (untukm
), yang menyelamatkan saya 3 byte.Kompres berulang kali pada substring yang paling sering.
Generasi ketiga belas, 282 byte
Cobalah online!
Generasi pertama, 486 byte
Tidak ada kompresi. Lolos dari
/
dan\
.Cobalah online!
Generasi kedua, 402 byte
Dikompresi dua spasi ke
a
. The/a/ /
berarti "mengganti semua kejadian daria
dua ruang".Cobalah online!
Generasi ketiga, 369 byte
Terkompresi
__
keb
. Di/b/__/
awal berarti "ganti semua kemunculanb
ke__
".Cobalah online!
Generasi keempat, 339 byte
Terkompresi
|
kec
. Di/c/ |/
awal berarti "ganti semua kemunculanc
ke|
".Cobalah online!
Sisa dari aturan kompresi
Jadi, daftar aturan kompresi:
a
.__
keb
.|
kec
.aa
ked
.bb
kee
.cc
kef
.dd
keg
.|c
keh
.\/
kei
. Baik\
dan/
di dalam aturan lebih lanjut lolos.b_
kej
.|a
kek
._
kel
.//
kem
.Seperti yang Anda lihat, ada aturan kompresi yang tumpang tindih. Misalnya,
g
mengkodekandd
yang mengkodekanaaaa
yang mengkodekan 8 spasi.sumber
Ibumu (tidak bersaing), 331 byte
Dekode string dan dekompres dengan menggunakan kompresor Jelly
sumber
Python 3, 377 byte
mirip dengan jawaban javascript, digunakan RLE plus banyak penggantian untuk substring umum.
Saya pikir saya sedikit berlebihan dengan hal-hal yang menggantikan, mungkin tidak banyak membantu tapi oh well.
sumber
JavaScript (ES6), 354 byte
Upaya lain. Sayangnya, tidak seefisien run length.
Menyimpan sekelompok nomor base-36 dalam string pertama, dibatasi oleh
, dan
!
pemisah. Kemudian ganti angka (bersama dengan!
) dengan representasi basis-4 angka. Menggantikan semua 0 ini, 1 ini, dan 2 di basis-4 nomor dengan_
,|
masing-masing, dan semua 3 ini diganti dengan unsur-unsur dalam string kedua berurutan.sumber
Python 3, 263 byte
Lulus awal menggunakan builtin.
beberapa kutipan tambahan dan linebreak ditambahkan untuk menghindari gulir horizontal hanya untuk tujuan tampilan (tidak dihitung dalam skor)
sumber
repr()
string mentah jauh lebih lama dari ascii85CJam, 229
Tidak ada karakter yang funky dan tidak ada kompresi bawaan :)
Cobalah online
sumber
Lua, 353 byte
Program:
Terima kasih kepada @jrich untuk kompresi.
sumber
Ruby,
271262248 byteCoba di sini
sumber
Vim ,
374365326319313311 penekanan tombol9 penekanan tombol berkat @D Green Eggs dan Ham DJ .
Mungkin bisa bermain golf lebih lanjut dengan menggunakan
:nn
?sumber
<number>a <esc>
banyak melakukan. Jika Anda melakukannyayl
pada spasi, Anda bisa menggantinya dengan<number>p
. Itu seharusnya menghemat sekitar 8. 2. Anda bisa menggantinyaea
denganA
. Anda mungkin bisa mengambil lebih banyak jika Anda mengubah pendekatan Anda, tetapi itu adalah tips cepat yang saya lihat._
dan|
sebagainya?:s
hanya menggantikan satu baris. Kamu ingin:% s
. Anda juga dapat menyimpan beberapa penekanan tombol dengan melakukan:im
(imap) alih-alih mencari dan mengganti. (Meskipun Anda mungkin perlu menggunakan ctrl-v atau ctrl-q untuk memetakan ke spasi):im
hanya bisa menggunakan golf beberapa byte lagi.Javascript (ES6)
464352 byteCoba di sini!
sumber
HTML,
482481475 bytesumber
05AB1E , 171 byte
Cobalah online.
Penjelasan:
Lihat tip tambang 05AB1E ini (bagian Bagaimana mengompresi bilangan bulat besar? Dan Bagaimana mengompresi daftar bilangan bulat? ) Untuk memahami bagaimana bilangan bulat terkompresi dan daftar Basis-8 bekerja.
sumber
C (gcc) ,
280279 byteCobalah online!
Kehabisan
Kami mendefinisikan alfabet 8 simbol,,
" _|/\\()\n"
dan kompres data dengan mengemas dua simbol per byte sesuai dengan indeksnya dalam alfabet, dengan simbol pertama dalam bit 0..2, dan yang kedua dalam 3..5. Bit 6 diatur untuk membawa byte yang dihasilkan ke wilayah ASCII yang dapat dicetak. RLE sederhana kemudian dijalankan pada string terkompresi. Jika simbol dalam string muncul lebih dari dua kali berturut-turut, simbol disimpan sebagai pasangan karakter, dengan yang pertama berisi run-length plus 32 (bit 5 set) dan yang kedua simbol itu sendiri.Cobalah online!
sumber
Javascript ES6, 314 byte
Berisi byte yang tidak dapat dicetak. Menggunakan beberapa sihir JS hitam untuk dijalankan. Jika
console.log()
diperlukan agar jawaban ini valid, jumlah byte akan menjadi 327.Ini sangat menyebalkan untuk diperbaiki, dan saya tidak bisa menyingkirkan
.slice(0,-2)
:(Akan mengedit dalam penjelasan besok ketika saya kurang lelah.
Ganti setiap byte tunggal dengan nilai hex yang sesuai agar snipet kode dapat dijalankan
sumber
JavaScript,
294292 byteIni ... secara harfiah hanya penyandian seni ... dengan ini ...
Jika
console.log()
diperlukan, maka jumlah byte adalah307305 byte.294-> 292, -2B untuk encoding
\n
untuk7
.sumber