Tantangannya: tampilkan seni ASCII yang tepat dari sarang laba-laba di jendela:
_______________________________
|\_____________________________/|
|| \ | / ||
|| \ /|\ / ||
|| /\'.__.' : '.__.'/\ ||
|| __.' \ | / '.__ ||
||'. /\'---':'---'/\ .'||
||\ '. /' \__ _|_ __/ '\ .' /||
|| | /. /\ ' : ' /\ .\ | ||
|| | | './ \ _|_ / \.' | | ||
||/ '/. /'. // : \\ .'\ .\' \||
||__/___/___/_\(+)/_\___\___\__||
|| \ \ \ /(O)\ / / / ||
||\ .\' \.' \\_:_// './ '/. /||
|| | | .'\ / | \ /'. | | ||
|| | \' \/_._:_._\/ '/ | ||
||/ .' \ / | \ / '. \||
||.'_ '\/.---.:.---.\/' _'.||
|| '. / __ | __ \ .' ||
|| \/.' '. : .' '.\/ ||
|| / \|/ \ ||
||____/_________|_________\____||
|/_____________________________\|
Sumber: Joan Stark (laba-laba dan bingkai sedikit dimodifikasi, dan menghapus inisial demi tantangan).
Karakter yang diperlukan: _|\/'.:-(+)O
(12) + spasi & baris baru (2)
Aturan tantangan:
- Satu atau beberapa spasi tambahan dan / atau baris baru diizinkan.
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat, program lengkap. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, silakan tambahkan penjelasan jika perlu.
code-golf
ascii-art
kolmogorov-complexity
Kevin Cruijssen
sumber
sumber
.
7 karakter sebelumO
. Apakah seharusnya ada satu 7 karakter setelahnya juga?Jawaban:
SOGL V0.12 , 141 byte
Penjelasan:
Coba Di Sini! (program berisi tab jadi di sini adalah representasi program yang lebih baik)
sumber
Arnold C,
1257 1261 12561233 byteIni adalah percobaan pertama saya pemrograman dalam bahasa tertinggi, jadi saya akan makan downvotes saya karena saya tidak menawarkan solusi cerdas untuk masalah ini meskipun pemrograman dalam bahasa turun dari surga.
Berikut ini adalah kompilator jika ada yang mempertanyakan algoritma ini.
Tetap di sana.
sumber
TALK TO THE HAND
!vim,
373371 byte<ESC>
adalah standar untuk 0x1B.Tidak disatukan
Cobalah online!
Dan untuk memperjelas penjelasan Anda diberi sebagai seorang anak: Meskipun benar bahwa satu-satunya laba-laba emosi merasa secara pribadi adalah kebencian, mereka yang mampu merasakan ketakutan pada jarak lebih dari 50 meter.
sumber
<CR>
tetapi apakah baris yang diakhiri dengan<CR>
rata - rata menekan tombol dua kali? Jawaban tampaknya tidak dalam dua contoh di atas, tetapi kemudian, baris dengans/ /_/g
dantr
tidak berakhir dengan<CR>
tetapi saya tidak bisa membuatnya bekerja tanpa menekan Enter.<CR>
s adalah kesalahan, dan umpan baris juga berfungsi. (Saya telah memasukkan baris menggunakan<C-v><ENTER>
, yang menghasilkan<CR>
; itu sebabnya muncul sebagai^M
ganti baris baru.) Saya telah memodifikasi kode untuk menghilangkan dua duplikat dan mengganti carriage return dengan baris baru / umpan baris. Semua baris baru yang tersisa harus dimasukkan tepat satu kali. (Versi ungolfed masih memiliki beberapa baris kosong ekstra; yang tidak sesuai dengan penekanan tombol yang sebenarnya. Versi golf persis apa yang perlu diketik, kecuali untuk<ESC>
s.){ cat foo.vim; echo ':wq'; } | vim a.txt
sehingga Anda tidak terjebak dalam vim tanpa keyboard yang terpasang ke stdin. Keuntungannya adalah saya benar-benar dapat menjalankan program langsung dari suatu file alih-alih mencoba mengetiknya persis setiap kali saya melakukan perubahan. Untuk program ini, byte dan penekanan tombol sama, tetapi tidak selalu demikian. mis.<C-v><ENTER>
adalah tiga penekanan tombol, tetapi menghasilkan satu byte\r
,.Jelly ,
206205 byteTautan niladik yang mengembalikan daftar karakter, atau program lengkap mencetak karya seni.
Cobalah online!
Bisakah simetri kasar-vertikal digunakan?
Bagaimana?
158 byte pertama adalah angka yang sangat besar yang ditulis dalam bijective base 250 menggunakan 250 byte pertama dari halaman kode Jelly:
Jumlah ini (dari urutan 10 372 dikonversi menjadi daftar digit dalam basis-9 (391 angka antara 0 dan 8) dan kemudian tiga ditambahkan ke 203 rd , 204 th , 220 th , dan 221 st digit ( yang akan menjadi tubuh laba-laba):
Hasilnya kemudian dikonversi ke 12 karakter dari sisi kiri (hingga dan termasuk kolom tengah) dari karya seni:
Baris penuh kemudian dibangun dengan memantulkan setiap kiri sisi baris (yang mencerminkan seolah-olah karakter terakhir yang berada cermin), mengubah semua itu
(
untuk)
, yang\
untuk/
dan/
untuk\
, dan kemudian hanya menggunakan nilai-nilai baru di sebelah kanan -tangan sisi dengan menggunakan vektorand
dengan sisi kiri dari sebelumnya. Hasilnya akhirnya bergabung dengan baris baru untuk menciptakan seni:sumber
Arang ,
239238 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Sebagian besar dari ini hanya mencetak string terkompresi besar, tetapi bagian yang berulang telah dikodekan secara terpisah untuk mengurangi panjang string; khususnya
Rectangle
menyimpan sejumlah byte dengan menghindari bantalan ruang untuk mencapai kolom ke-17 dan bahkan garis diagonal masing-masing menghemat satu byte.Sunting: Arang tampaknya tidak lagi mengenali string yang dikompresi, dan kompresi saat ini menghasilkan string yang lebih pendek yang menghemat 51 byte, dan memungkinkan salah satu garis diagonal dipindahkan kembali ke string untuk menghemat 2 byte lebih lanjut. (Perhatikan bahwa ini bukan penghitungan yang ditampilkan oleh
-sl
; memang bahkan penghitungan asli tampaknya dimatikan oleh 1.) Namun ada tiga penghematan tambahan yang juga akan diterapkan pada kode asli: Coba online!B
(Box
) alih-alihUR
(Rectangle
).↙P×_¹⁶←/
bukan↓P×_¹⁵←_/
.×_¹⁶J⁵¦¹
bukanP×_¹⁶M⁵¦²
.sumber
PHP , 380 byte
Cobalah online!
PHP , 494 byte
Cobalah online!
sumber
brainfuck , 4086 byte
Cobalah online!
Ini hanyalah metode berburu dan mengambil string.
Menambahkan baris baru untuk lebih mudah dibaca:
sumber
---------------------------------------------------------------
bukannya sesuatu seperti>++++++++[-<-------->]<+
?>
dan<
muncul kemudian dalam kode. Saya tidak tahu berapa banyak (jika ada) byte yang disimpan oleh pendekatan saya. Saya akan melihat menggunakan lebih banyak sel.>>>
urutannya nanti, karena mereka hanya digunakan sebagai ruang sementara untuk faktorisasi. Secara khusus, jika Anda mengisi sel dari kiri ke kanan, Anda dapat menggunakan, misalnya sel 5 sebagai ruang sementara untuk menyiapkan sel 4, dan kemudian (karena sel 5 memusatkan perhatian pada proses pengaturan sel 4), simpan yang baru nilai dalam sel 5 saat menggunakan sel 6 sebagai ruang sementara. Selama nilai akhir sel tidak berubah, Anda dapat mengubah apa pun sebelum yang pertama.
tanpa perlu mengubah kode nanti.JavaScript (ES6), 471 byte
Dikemas dengan varian ES6 dari RegPack .
sumber
Java (JDK) , 494 byte
Cobalah online!
Terima kasih Kevin Cruijssen untuk bermain golf beberapa byte, ditambah 6 byte dengan mengubah
Windows-1252
kecp1252
, dan ke ASCII-hanya untuk kompres string sedikit :)Catatan: file harus dikodekan sebagai Windows-1252 untuk byte-count, tetapi dapat dengan aman disalin / ditempelkan di UTF-8 untuk pengujian!
Rantai panjang sebenarnya adalah string, seperti halnya, dengan karakternya yang dipetakan ke encoder karakter yang fleksibel (untuk sekali ini, saya senang menggunakan CP-1252). Sisanya hanya metode unmapping.
Pemetaan ditemukan menggunakan permutasi, pertama kali diinisialisasi dengan frekuensi masing-masing karakter dalam seni ascii. Pemetaan yang menghasilkan karakter
'"'
dan'\\'
secara eksplisit dibuang sebagai string valid sesingkat mungkin.Tidak disatukan
Memetakan penemuan
sumber
()
ke karakter acak. Saya tidak pernah mengatakan apa pun tentang tidak ada input, sehingga Anda dapat menggunakan inputObject
yang tidak digunakannull
. Meta-post yang relevan. . Oh, dan Anda dapat menyimpan byte lain dengan mengubahbyte
keint
dalam untuk setiap loop.r+=a;
setara denganr = r + (a)
dan dengan karakter, itu berarti mereka ditambahkan satu sama lain sebelum digabungkan sehingga mereka sekarang dianggap sebagaiint
s, dan string yang dihasilkan mirip dengan127190190190190190190190190190...
. Saya menulis sebuah komentar tentang hal itu dalam kode versi ungolfed;)Windows-1252
bisa bermain golfcp1252
. Penjelasan di sini.b>>4
tidak perlu parens, ingat bitwise sangat, prioritas sangat rendahRetina ,
465463425 byteCobalah online!
sumber
C # (.NET Core) ,
935 676 636627 byteCobalah online!
Saya ingin mencoba pendekatan lain dan MEMILIH gambarnya. Berakhir dengan kode yang memiliki lebih banyak byte daripada gambar itu sendiri (782 byte). Kemudian saya mengompres string RLE'd dengan membuat kamus dengan grup yang paling banyak digunakan, dan setelah mengompresnya saya membuat lebih banyak kamus dan mengompres lagi hingga string tidak lagi berkurang. Oleh karena itu, gambar dibuat dengan memperluas kelompok-kelompok tersebut dan kemudian tidak melakukan kompresi dengan RLE.
sumber
Python 2.7,
414 405401 byteCukup dekompres string dan cetaklah. :)
sumber
Z_FILTERED
) yang menghindari header dan checksum. Drops ke 401 byte.print zlib.decompress('fY9BauhADEP3OcXbueUz1j6X6AUEuogP/xeTpCmUGgxK5iFZ5O85xn++a44ZAHPPPEoAcxMPovEbeBFyddLFyRbyi0i6Hpd5HKqTTVTfLmutOmutdTt0zRwzphoVOCETEkGZLrRTBtSATHFSyEAbhocYqgUmEwTu2r9njhlRalA1Eic2XYZ24ZljJlHu9ce/T8XJvTsFc68+vj6Ndl0EV5d27Wg7Z6R9VKlfXWZHC7alql+XMuACrHTOdCyg9OrSha9ohusoUX116QpQVq+1+uy1VlsFpPrqQjWI5PJIMHRxdQHA6oJqTraw4Aexv8HzqG8iSZR75lFOkpljvh9/G89/'.decode('base64'),-9)
compress[obj]() takes no keyword arguments
compress
tidak, tetapicompressobj
mengambil argumen tambahan (meskipun bukan sebagai kata kunci sebelum 3.3, Anda harus melewati argumen secara posisi). Membuat kompresor, meneleponcompressor.compress(thedata)
, lalu melakukancompresseddata = compressor.flush()
adalah setara dengan tiga langkahzlib.compress
, tetapi Anda dapat mengonfigurasicompressobj
lebih halus. Satu-satunya downside adalah bahwa menggunakanwbits=-9
alat Anda harus lulus-9
untukdecompress
(sehingga tahu tidak untuk mencari header atau checksum).Python 3 ,
404398 byteCobalah online!
Cheat yang sama dengan versi Python 2.7 , hanya mengubah untuk Py3 diperlukan konversi
bytes
<->str
. Masih lebih kecil dari kode 2,7 meskipun impor tambahan dan decoding yang diperlukan berdasarkan Python 3 menyediakan pengkodean base85 sebagai built-in, mengurangi ukuran yang diperlukan untuk mewakili data terkompresi dalam format ASCII yang dapat dicetak hingga 28 byte.Sunting: Mencukur enam byte lagi dengan mengkompres ulang dengan
wbits=-9
begitu tidak ada header atau checksum yang dimasukkan pada data (sebagai ganti karena perlu menambahkan,-9
arg kezlib.decompress
).sumber
Java 8, 719 byte
Pasti bisa bermain golf, tapi ini hanya permulaan dan sesuatu yang bisa dikalahkan pegolf Java lainnya. ;)
Penjelasan:
Coba di sini.
sumber
brainfuck , 5173 byte
Cobalah online!
Bagaimana itu bekerja
Singkatnya: temukan indeks ascii setiap karakter di baris; lalu cetak itu. Kemudian cari indeks ascii untuk baris baru dan cetak itu. Bilas dan ulangi anakku.
sumber
256 byte, kode mesin (16-bit x86)
Saya berharap saya bisa mengalahkan setidaknya solusi Arang, tapi saya belum berhasil memeras lebih banyak dari ini (sejauh ini).
Berjalan: simpan ke codegolf.com, dosbox untuk melihat hasil yang Anda butuhkan untuk mengatur breakpoint di
cs:200
dan membuang memori padads:400
legth30e
... atau Anda dapat menambahkan bagian berikut, yang akan membuangnya ke stdoutIni adalah entri golf kode ketiga saya. Yang sebelumnya adalah enkripsi xor .
Sekali lagi: selesai menggunakan HT hexeditor , tanpa compiler , tetapi menggunakan Ctrl-a
assemble instruction
.Bagaimana
Yang ini butuh sedikit untuk membuatnya ...
Saya sudah mulai dengan pendekatan sederhana, dengan satu kuadran dan mencoba untuk mencerminkannya. Itu menghasilkan ~ 250 byte dan hanya memiliki 2 dari 4 kuadran. Sebagian besar dari itu adalah kuadran pertama itu sendiri, yang mengambil 204 byte.
Saya tahu ini bisa lebih baik.
Saya dengan cepat memeriksa bahwa lz4 menghasilkan file dengan 144 byte (melewatkan header). GZ menghasilkan ~ 120 byte, tetapi jelas saya tidak akan dapat membuat decompressor dalam 30 atau lebih byte.
Jadi upaya lain adalah kerajinan tangan kuadran pertama dengan menggambarnya (termasuk melompat-lompat, 4-bit encoding dan semacamnya). Itu bersama dengan kode menghasilkan 164 byte (pikiran itu hanya kuadran pertama), bagus tapi saya cukup yakin saya bisa berbuat lebih baik.
Saya datang dengan beberapa pengkodean, yang berakhir dalam 85 byte untuk data. Bersamaan dengan tabel terjemahan (yang belum digunakan) dan decoder, saya berakhir dengan 144 byte. NOICE, I'm = lz4 dan sudah memiliki decoder.
Langkah selanjutnya adalah menggabungkan mirroring awal dari ~ 250 upaya yang satu ini, ini memerlukan beberapa penyetelan data, tetapi berjalan lebih mudah dari yang diharapkan dan menghasilkan 184bytes.
Saya menyadari bahwa saya akan membutuhkan beberapa penanda tambahan untuk melakukan mirror horizontal, yang memperpanjang data ke 91b dan kode ke 190bytes (yang kemudian dibuang ke tempat sampah).
Seiring dengan mirror horizontal dan terjemahan terakhir saya telah berakhir dengan ~ 250 byte.
Saya sudah berhasil makan beberapa byte di sana-sini, tetapi harus menambahkan bahwa karakter jelek, yang salah mirror. Itu menghasilkan 259 byte ... Itu buruk, karena saya menggunakan memori mulai dari 0x200 dan tidak ingin mengulanginya.
Saya telah mengganti kondisi dalam cermin horizontal, untuk mengulang menggunakan tabel terjemahan, yang dengan sendirinya tidak menghemat banyak, tetapi dikombinasikan dengan mengubah karakter yang menyinggung ke ruang dan memperbaikinya nanti, menyelamatkan beberapa byte, menghasilkan 256 byte terakhir .
Anda dapat melihat galeri yang bagus, yang telah saya lakukan, saat membuat ini di sini
Pembedahan
Sebagai entri sebelumnya, entri ini juga bergantung pada nilai awal , meskipun tidak sebanyak yang sebelumnya:
lewati data, ada 3 tabel berikut:
Tabel terjemahan akan digunakan untuk mirroring horizontal
Tabel terjemahan akan digunakan untuk substitusi akhir, untuk mengonversi kode ke ascii aktual
Data yang disandikan, penyandiannya cukup sederhana:
isi 12 * 17 byte dengan apa yang akan menjadi ruang (8)
"Dekompresi" data seperti yang dijelaskan di bawah tabel 3. Pikiran penggunaan instruksi AAM tercinta , dan penyalahgunaan scasb untuk melewati byte.
Bagian ini cukup jelek, menetapkan tujuan pada 0x400:
Pikiran cermin itu dilakukan dengan menyalahgunakan std / cld, untuk melewati
SI
secara terbalik. Hanya\/()
karakter yang perlu dicerminkan, yang dilakukan oleh xor pada 0x1BF.Ini melakukan mirror horizontal dengan menggunakan tabel 1, dan menggunakan XLAT 1 byte yang indah
Kemudian datang bagian membosankan yang memperbaiki 4 "piksel", saya akan melewatkannya dari sini itu membosankan
Langkah terakhir menerjemahkan ke ascii.
PHEW! Itu tadi menyenangkan.
sumber
JavaScript (ES6),
517...459457456433431418409397392 byteTermasuk garis spasi tambahan dan spasi tambahan pada baris pertama. Beberapa di antaranya masih belum optimal bermain golf - Saya menghabiskan banyak waktu untuk menyelesaikan semuanya.
Awalnya didasarkan pada solusi Traktor53 sejak ditinggalkan 556 byte . Diposting dengan izin .
Daftar yang Harus Dilakukan
Temukan cara palindromising string yang lebih murah.Coba tingkatkan penggantian RLE.Lihat apakah 4 penggantian terakhir dapat diturunkan dengan cara apa pun.Selidiki apakah membangun gambar di perempat akan menghasilkan penghematan yang signifikan - Saya kira tidak!sumber
string1[string2.indexOf( char) ]|| char
adalah konstruksi yang saya coba tetapi tidak berhasil mengurangi byte. Sudah selesai dilakukan dengan baik!JavaScript
556468462448438387379 byteKurang Golf
Kompresi
Posting asli (556 bytes) menggunakan angka desimal untuk menunjukkan pengulangan karakter sebelumnya di web laba-laba. Versi yang lebih baru mengkompres bagian kiri web menjadi 7 bit karakter di mana nibble yang paling signifikan adalah indeks ke dalam set karakter, dan tiga bit urutan yang lebih tinggi menentukan jumlah karakter untuk output ditambah 1: nilai
000
dan001
tidak digunakan,010
berarti 1 karakter dan111
berarti enam. Konstruksi ini menghindari produksi karakter kontrol.Terima kasih kepada @Shaggy untuk tips dan trik yang berguna dalam penulisan ulang.
Bagaimana itu bekerja
Kuadran kiri atas ditulis ulang untuk menyertakan placeholder untuk bagian atas dan bawah web:
memberi:
yang dikompresi menggunakan
Dekompresi
Peta dekompresi mengkodekan karakter ke karakter aktual untuk setiap kuadran. Dalam kode,
X
adalah daftar karakter yang diindeks yang bervariasi antara bagian web atas dan bawah. Ini memberikan nilai untuk placeholder "suqh", dan refleksi karakter keras seperti antara '+' dan 'O'.Pengkodean
Pengkodean karakter pusat dibatasi untuk menggunakan ekspansi karakter tunggal. Urutan pengaturan karakter dibatasi sehingga tidak menghasilkan karakter DEL (0x7F), Grave (0x60) atau backslash (0x5C) selama kompresi.
Ini adalah pembaruan yang terlambat dalam menanggapi aktivitas pada pertanyaan.
sumber
.reduce
dan.map
yang saya tidak bisa. Sementara itu saya telah mengubah algoritma untuk mendapatkan 468 byte! Selamat berakhir pekan./// , 463 byte
Cobalah online!
sumber
Bash, 391 byte
Cobalah online!
Kudos kepada semua orang yang mampu mengalahkan kompresi pasak - inilah saya menyerah! Saya mengakui orang-orang Python yang masuk dengan pendekatan zlib / gzip terlebih dahulu.
sumber
Perl 5
439402 byteDaripada menggunakan base64 / gzip, pendekatan ini adalah untuk mirror dan membalik kuadran kiri atas, dengan substitusi yang sesuai
Cobalah online
Bagi yang berminat, versi komentar:
sumber
C #, 484 byte
Catatan: Saya tidak 100% tentang bagaimana mencetak ini. Dengan header dan footer itu 544 byte.
Tidak Disatukan:
Cobalah secara Online!
sumber
Ruby 1.9.3,
1102763 byteCobalah secara Online!
sumber
puts
dan string multiline harus mengambil ~ 790 byte. String besar Anda untuk memindai dan kode untuk memprosesnya ternyata lebih panjang daripada solusi naif ...C #,
401 399 397 396389 byteTulis ini sebagai alasan untuk mencoba pengkodean Huffman
Tidak Disatukan:
Versi yang lebih lama tidak dikomentari dengan komentar:
Cobalah secara Online!
sumber
while(v>0){
kefor
, dan menempatkan bilangan bulat danv/=2
di dalamnya:for(int p=0,l=0;v>0;v/=2){
while
untuk mengambil ruang yang sama denganfor
, sekarang.for(;someCondition;someAction);
vsfor(;someCondition;)someAction;
vswhile(someCondition)someAction;
. Tapi secara keseluruhanfor
memang lebih pendek dari ituwhile
, jadi saya menggunakan hampir selalufor
sendiri.Python 2 , 395 byte
Cobalah online!
sumber
Ruang putih ,
47234584 byteHuruf
S
(spasi),T
(tab), danN
(baris baru) ditambahkan hanya sebagai penyorotan.Cobalah online .
Penjelasan:
Saya menggunakan pendekatan yang dijelaskan di ujung spasi putih saya ini . Pendekatan yang dijelaskan adalah sebagai berikut:
Nilai konstan ideal adalah
94
, yang saya hasilkan dengan program Java ini . Menggunakan94
akan memberikan program Whitespace dengan total panjang 7508 byte (7481 + 27 byte untuk loop), atau 5791 byte (5764 + 27) jika kita sudah menerapkan Duplicate Top (SNS
) di mana dua karakter yang sama berdekatan.Setelah itu saya secara manual menggunakan Salin 1 (
STSSTN
), Salin 2 (STSSTSN
), dan Salin 3 (STSSTTN
) (1-diindeks) di mana pun ia akan menyimpan byte. Yang juga bisa ditemukan di tips Whitespace. Yang total menghasilkan program 4584 bytes yang Anda lihat di sini.sumber
05AB1E , 204 byte
Cobalah online.
Verifikasi bahwa itu benar.
Penjelasan:
sumber