Untuk Kehormatan Adam Barat


90

Adam West meninggal, dan saya ingin menghormati ingatannya di sini di PPCG, meskipun saya ragu dia tahu keberadaan kita. Walaupun ada banyak, banyak hal berbeda yang diketahui oleh pria ini, tidak ada yang lebih menonjol daripada perannya sebagai batman asli . Saya akan selalu ingat ayah tiri saya masih menonton Batman dan Robin sekolah tua sampai hari ini. Tantangan ini sifatnya sederhana, sama sekali tidak sejalan dengan lelaki rumit yang bernama Adam West. Namun, itu yang terbaik yang bisa saya dapatkan, karena ini adalah gambar paling ikonik dari karier pria itu.


Saya ingin memposting ini sebelumnya, tetapi saya sedang menunggu seseorang untuk datang dengan sesuatu yang lebih baik.


Keluarkan yang berikut (dengan atau tanpa spasi / baris baru):

           *                         *
       ****          *     *          ****
     ****            *******            ****
   ******            *******            ******
  *********         *********         *********
 ***********************************************
*************************************************
*************************************************
*************************************************
 ***********************************************
  *****       *********************       *****
    ****       ***    *****    ***       ****
       **       *      ***      *       **

Ini adalah , byte-count terendah akan menang.


7
Anda harus melarang string yang dikodekan. Ini benar-benar tidak menyenangkan!
sergiol

7
Dia bukan Batman asli. Kehormatan itu milik Lewis Wilson.
Shaggy

42
Ketika saya melihat judulnya, saya pikir outputnya adalah "na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na".
D Krueger

3
@DKrueger: buatlah itu dalam pertanyaan lain :)
Olivier Dulac

4
Mengapa ini tidak dimulai tahun lalu? Carrie Fisher, Prince, David Bowie, dan Alan Rickman!
caird coinheringaahing

Jawaban:


47

Jelly , 44 byte

“¡©İ'¹!ðkW>ṅṙẏṙlœf:ߌÆ@Ƥ’b25o99Jx$ị⁾ *s25ŒBY

Cobalah online!

Bagaimana itu bekerja

“¡©İ'¹!ðkW>ṅṙẏṙlœf:ߌÆ@Ƥ’

Ini adalah numerik literal. Semua karakter diganti dengan indeks berbasis 1 mereka di halaman kode Jelly hasilnya diinterpretasikan sebagai bilangan bulat basis-250, menghasilkan

58616171447449697510361193418481584558895594063391402

Selanjutnya, b25konversikan bilangan bulat itu ke basis 25 dan o99ganti 0 dengan 99 , menghasilkan

11 1 20 4 10 1 8 4 12 4 3 6 12 4 2 9 9 5 1 99 1 24 2 5 7 11 4 4 7 3 4 3 7 2 7 1 6 2

Jx$mengganti basis- j ke -25 digit n dengan n salinan j , menghasilkan

1 1 1 1 1 1 1 1 1 1 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 7 7 7 7 7 7 7 7 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 11 11 11 12 12 12 12 12 12 13 13 13 13 13 13 13 13 13 13 13 13 14 14 14 14 15 15 16 16 16 16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 18 18 18 18 18 19 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 23 23 24 24 24 24 24 25 25 25 25 25 25 25 26 26 26 26 26 26 26 26 26 26 26 27 27 27 27 28 28 28 28 29 29 29 29 29 29 29 30 30 30 31 31 31 31 32 32 32 33 33 33 33 33 33 33 34 34 35 35 35 35 35 35 35 36 37 37 37 37 37 37 38 38

Sekarang, ị⁾ *indeks ke dalam pasangan karakter. Pengindeksan adalah berbasis 1 dan modular, sehingga angka ganjil diganti dengan spasi, bahkan angka dengan tanda bintang. Ini menghasilkan

           *                    ****          *        ****            ****   ******            ****  *********         ***** *************************************************************************************************** ************************  *****       ***********    ****       ***    ***       **       *      **

s25potong hasilnya menjadi potongan dengan panjang 25 . Jika kita menulis setiap potongan pada barisnya sendiri, kita dapat

           *             
       ****          *   
     ****            ****
   ******            ****
  *********         *****
 ************************
*************************
*************************
*************************
 ************************
  *****       ***********
    ****       ***    ***
       **       *      **

The bounce atom ŒBpalindromizes setiap potongan dengan menambahkan salinan terbalik tanpa karakter pertama, menghasilkan

           *                         *           
       ****          *     *          ****       
     ****            *******            ****     
   ******            *******            ******   
  *********         *********         *********  
 *********************************************** 
*************************************************
*************************************************
*************************************************
 *********************************************** 
  *****       *********************       *****  
    ****       ***    *****    ***       ****    
       **       *      ***      *       **       

Akhirnya, Yperkenalkan linefeeds yang sebenarnya.


1
Dan saya pikir “QƤḣọḲ£¿ẆịµñẒṢƊ¬ƒỤ2ỴÐ,ịṁ&Ḅ<ḋsḳn.⁷ṛḃṡ⁾6bḋeṁ’ṃ⁾ *s25ŒBYcukup pendek pada 53 byte ...
Erik the Outgolfer

Saya mencoba seperti 14 hal berbeda, kemudian akhirnya melakukan ini dengan coba-coba. Tidak mengerti apa yang Anda maksud dengan "mengganti 0 dengan 99" sampai saya mencobanya sendiri.
Magic Gurita Guci

156

Wordfuck , 5761 2686 byte

Saya kira menggunakan namanya sebagai kode sumber mendapat kehormatan bagi Adam West.

adam west adam west adam_wes t_a dam_we st_a dam_ west adam west adam west adam west_ad am_west_a dam_we st ad am we st ad am we st ad am west_a dam_we st_a dam_ west_ada m_w est ada m_w est ada m_west_ adam west_a dam_west_ adam_we st_ ad am_west ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am_wes t_ adam_w est_ adam west adam west adam west adam west adam we st_adam west_ad am we st ad am we st adam_w es t_ ad am west_ad am we st ad am we st ad am we st_ada m_ west_ad am we st ad am west_a da m_west_ ad am we st ad am we st ad am west_a da m_ we st adam_w es t_adam_ west_ad am we st ad am west_a da m_ we st adam_we st ad am we st ad am we st ad am we st_ada m_ we st ad am we st adam_we st ad am we st ad am we st ad am we st_ada m_ we st ad am_wes t_ adam_we st_adam we st ad am_wes t_ ad am we st ad am_west ad am we st ad am we st ad am we st adam_w es t_ ad am we st ad am_west ad am we st ad am we st ad am we st adam_w es t_ ad am we st adam_w es t_adam_ west_ad am we st_ada m_ we st ad am we st ad am west_ad am we st ad am we st ad am west_a da m_ we st ad am we st ad am_west ad am we st ad am we st ad am_wes t_ ad am we st ad am we st adam_w es t_adam_ west_ad am west_a da m_ we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st_ada m_ west_ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am west_a da m_west_ ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am_wes t_ adam_we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st adam_w es t_adam_ west_ad am west_a da m_ we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st_ada m_ west_ad am_west ad am west_a da m_ we st ad am_west ad am we st ad am we st_ada m_ we st ad am we st ad am we st ad am we st ad am we st ad am west_ad am we st ad am we st adam_w es t_ ad am we st_ada m_ west_ad am_west ad am we st adam_w es t_ ad am west_ad am we st ad am we st adam_w es t_ ad am_west ad am we st adam_w es t_ ad am we st_adam we st ad am west_a da m_ we st_adam we st ad am we st ad am_wes t_ ad am we st_ada m_ west_ad am_west ad am we st ad am we st_ada m_ we st_adam we st ad am we st ad am_wes t_ adam_we st ad am we st ad am_wes t_ ad am west_ad am we st ad am we st_ada m_ west_ad am we st ad am we st adam_w es t!

Cobalah online! (Transfungsi brainfuck)

Adam West bernyanyi (terima kasih @carusocomputing)


69
Ini mengerikan. Aku menyukainya.
TheWanderer

25
Hmm. Iya. Cukup bagus, tapi saya pikir Anda lupa garis bawah pada saluran 1.
Mateen Ulhaq

2
Apakah ada cara kita bisa menguji ini?
Shaggy

4
@Selamat datang di PCCG! kami tidak benar - benar bersaing di situs ini, tentu saja ini bukan solusi yang menang, tetapi ini lucu dan bertema bertema, sehingga menjadi terangkat sehingga lebih banyak orang dapat menikmatinya. Berharap untuk segera memperbaiki jawaban Anda!
Uriel

3
@Shaggy, Cobalah online! (STDERR)
Adám

67

Python, 530 529 528 524 byte

import zlib as Holy
B=list("NNAAAnAAnnAnaAannnaaaaNaAAnNanAaAanNNaNNaNaanNNANanNNANaAnAaANANAAnAaANNnAanAaNnAaAANNAaAnNANAaaANNAanAaNaNNNAaNNanAAnNNnaaaNANANANnnaaaNaaAAAANaNaNaNAnNAAAAaaaaANAaNnnAaAaNAAaANNnaaNnNnaannaaAaananannNnAAAAAanAananANAnaAAnANAAaaaAaaanaaAAaanNAnanAAnnnANAnNAnnAnnnanaNNaaaNaNNaAAnNAaaANNNANAnAaaAaNaANnNNNaaAanaaaanaaaaaAaAaNnNnnaAnANaNnnANanNA")
A=dict(N='11',A='01',n='10',a='00')   
T=""
POP=BIFF=POW=OOF=lambda:A[B.pop()]
while B:T+=chr(int(POP()+POW()+BIFF()+OOF(),2))
print Holy.decompress(T)

5
Oh Tuhan, aku belum tertawa sekeras itu. NAanANANaNANaNAANnAnaNANanaNA
Magic Octopus Urn

9
Dalam golf kode, kami seharusnya membuat byte kecil, tetapi entri Anda lumayan besar . ;)
PM 2Ring

34
Kadang-kadang, seseorang harus berkorban demi kebaikan yang lebih besar.
rrauenza

1
Itu terdengar seperti sesuatu yang akan dikatakan Batman. ;) Saya harus mengakui bahwa saya merasa B.pop(0)sedikit mengganggu. Mengapa tidak membalik Bsehingga Anda dapat menggunakan yang jauh lebih efisien (dan lebih pendek) B.pop()? The pop(0)harus memindahkan semua elemen daftar tersisa turun satu slot. Tentu, itu terjadi pada kecepatan C, tetapi masih kurang efisien daripada muncul dari ujung string.
PM 2Ring

5
Alias untuk POP, BIFF, POW, OOFmembuat saya memuntahkan apa yang saya minum di monitor saya. Terima kasih lol. +1.
rayryeng

21

JavaScript (ES6), 148 146 byte

_=>`n2zh2
f8l2b2l8
b8pep8
7cpepc
5ijiji
3yyq
0
0
0
3yyq
5afy8fa
98f69a96f8
f4f2d6d2f4`.replace(/./g,c=>'* '[(n=parseInt(c,36))&1].repeat(n/2||49))

Demo


12

Python, 149 142 byte

7 byte disimpan berkat @ PM2Ring

for l in"b1d 74a13 54c4 36c4 2995 1o 0p 0p 0p 1o 257b 447343 727162".split():x=''.join(s*int(k,36)for s,k in zip(' *'*3,l));print(x+x[-2::-1])

Bagus. Anda dapat mengurangi 7 byte:x=''.join(s*int(k,36)for s,k in zip(' *'*3,l))
PM 2Ring

Jangan khawatir. Saya berhasil menulis versi Python yang lebih pendek. ;)
PM 2Ring

1
@ PM2Ring Anda dapat +1 saya
Uriel

12

MATL , 61 59 byte

' *'60:'*u9|K9j[~F9R,>ejc4Q,7;F\1l_=7sFR'F11:ZaY"13e)25ZvZ)

Cobalah online!

Bagaimana itu bekerja

Ini menggunakan teknik standar berikut:

  • Karena gambar simetris secara horizontal , hanya setengah bagian kiri (termasuk kolom tengah) yang disandikan.
  • Gambar dilinearisasi dalam urutan kolom-utama (turun, lalu melintasi) dan urutan yang dihasilkan adalah run-length encoded .
  • Panjang run yang dihasilkan mengambil nilai dari 1hingga 11, sehingga urutan panjang run dikompresi oleh konversi basis , dari basis 11ke basis 94(karakter ASCII yang dapat dicetak kecuali kutipan tunggal, yang perlu melarikan diri).

1
Ada 60 run dalam urutan kolom-utama, tetapi hanya 38 di baris-utama. Apakah itu akan menyimpan byte?
Dennis

@ Dennis Masalahnya adalah bahwa dalam hal itu panjang lari adalah [1:12 20 24 99], yang membuat kompresi lebih sulit. Upaya terbaik saya adalah 60 byte
Luis Mendo

Daripada membangun set yang tepat, sudahkah Anda mencoba menggunakan basis 25 dan mengganti 0 dengan 99 dengan, misalnya Y|,? Saya tidak cukup tahu MATL atm untuk menguji apakah itu benar-benar lebih pendek ...
Dennis

@ Dennis Itu terlihat menjanjikan. Menggunakan set [1:24 99]saya menghapus satu byte . Jika saya menggunakan [0:24](basis 25), saya tidak tahu bagaimana mengubahnya 0menjadi 99beberapa byte
Luis Mendo

1
Benar Y|tidak bekerja di MATL / Oktaf seperti di Jelly / Python. Dalam yang terakhir, 0 or 99menghasilkan 99 ...
Dennis

7

05AB1E , 47 byte

„ *19×S•«M;Ó8ζ?èYÑ?½¨/Ž´.δòÈÖ<•25вт<19ǝ×J13ä€û»

Cobalah online!


Algoritma Ported Dennis kan?
Erik the Outgolfer

@EriktheOutgolfer: Meminjam replace 99 trickdarinya (disimpan 4 byte melalui jalan lurus ke depan). Masih mencari cara yang lebih baik.
Emigna

-1 dengan menggunakan .∞alih-alih €û»(mirror secara implisit bergabung dengan daftar pada baris baru terlebih dahulu di versi lawas, sebelum menerapkan mirror). Saya juga sudah mencoba menggunakan ₂вbukan 25в, tapi sayangnya integer dikompresi kemudian 1 byte lagi juga, sehingga tidak menyimpan sesuatu: •2Ø°×á[1∊Œ)’˜Àå<тIÞ‡p5ÉQ•₂в.
Kevin Cruijssen

7

vim, 168 156 byte

:nm N a <C-v><ESC>
:nm A a*<C-v><ESC>
:nm B aY<C-v><ESC>yyp!!rev<C-v><CR>kJh4xo<C-v><ESC>
11NA13NB7N4A10NA3NB5N4A12N4AB3N6A12N4AB2N9A9N5ABN24AB25ABkyyppjN24AB2N5A7N11AB4N4A7N3A4N3AB7N2A7NA6N2ABdd

Ini mengasumsikan lingkungan Unix, untuk rev. Saya menggunakan pengkodean (hitungan, karakter) yang cukup mudah, dengan N dan A menambahkan a dan *masing - masing, dan B melakukan penyalinan dan membalikkan.

Dalam file aktual, entri yang diurung digantikan oleh byte literal yang diwakilinya. <C-v>adalah 0x16, <ESC>adalah 0x1b, dan <CR>0x0d.

Cobalah online


Saya pikir akan lebih cepat untuk tidak repot membuat macro 'b' dan 'c', dan sebagai gantinya memetakannya secara langsung. :nm N a <C-v><esc>dan:nm A a*<C-v><esc>
DJMcMayhem

@DJMcMayhem Begitu ya. Untuk beberapa alasan, saya pikir akan lebih sulit untuk menyimpan <C-v>dalam file daripada itu, jadi saya menggunakan metode bundaran sehingga saya bisa mengujinya { cat foo.vim; echo ':wq'; } | vim out.txt. Saya tidak yakin mengapa tidak terpikir oleh saya untuk mencoba <C-v><C-v>kemarin.
Ray

Saya senang mengetahui Anda membuatnya berfungsi! Cara lain Anda dapat menguji jawaban vim untuk kenyamanan adalah Coba online! , yang benar-benar menggunakan esolang yang saya tulis, tapi itu (sebagian besar) tetap kompatibel. The -vflag memungkinkan Anda menggunakan deskripsi kunci vim (seperti <C-v>dan yang lainnya)
DJMcMayhem

@DJMcMayhem Sangat bagus. Terima kasih.
Ray

Tidak bisakah Anda menulis <NL>bukan <NEWLINE>?
L3viathan

7

Arang , 69 54 52 48 byte

E⪪”|↖y{{﹪yc›o”n↗πf>T≔Y¿PN|ωπQβ” ⪫Eιק* μ⌕βλω‖O←

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Sunting: Berkat @ ASCII saja, menyimpan 4 byte dengan beralih dari bendera yang terpisah ke pengulangan indeks, 7 byte dengan menggunakan karakter (tidak terdokumentasi?) ⸿, Dan 4 byte lebih lanjut dengan menggunakan alfabet menggunakan pengodean panjang run. Menyimpan 2 byte lebih lanjut karena AtIndexsecara otomatis mengambil modulo. Menyimpan 4 byte lebih lanjut karena Mapsecara otomatis membuat variabel indeks. Penjelasan:

Print(Map(

Bagian luar Mapmengembalikan array. Printmenangani ini dengan mencetak setiap elemen pada baris sendiri, sehingga menghindari harus secara manual Joinmereka dengan \n.

Split("anb adbke eme fjj y z z z y lhf dedhe cgbhc" " "),

String mengkodekan semua setengah baris dari output. Huruf bergantian merujuk pada jumlah *s dan spasi ( a=0digunakan untuk menangani baris yang dimulai dengan spasi). Ruang adalah pilihan pembatas yang nyaman, tetapi juga ternyata kompres dengan baik (x juga kompres hingga keseluruhan 55 byte). Setiap baris diproses secara terpisah. (Catatan: deverbosifier gagal menghapus pemisah antara string terkompresi dan tidak terkompresi, jika tidak kode akan memiliki ,untuk keterbacaan.)

Join(Map(i, Times(AtIndex("* ", m), Find(b, l))), w)));

Ulangi setiap huruf, meluas ke angka *atau spasi yang sesuai. Variabel madalah indeks loop dalam untuk ini Map, sambil lmemegang surat itu. Hasilnya kemudian Joindiedit menjadi string tunggal menggunakan string kosong yang telah ditentukan w.

ReflectOverlap(:Left);

Setelah semua baris dicetak, mencerminkan semuanya ke kiri, tumpang tindih kolom tengah.

Saya mencoba menangani baris baru, spasi, dan bintang-bintang semuanya dalam satu lingkaran tetapi sebenarnya butuh dua byte lagi dengan cara ini:

Print(Join(Map("anb adbke eme fjj y z z z y lhf dedhe cgbhc", Ternary(Equals(" ", i), "\n", Times(AtIndex("* ", k), Find(b, i)))), w));
ReflectOverlap(:Left);

1
+1 Saya benar-benar perlu belajar Charcoal (juga memiliki Hexagony dan Cubix). Tiga bahasa pemrograman favorit saya, saya lihat di sini. Btw, saya kira Anda sudah merencanakannya, tetapi bisakah Anda menambahkan penjelasan?
Kevin Cruijssen

@KevinCruijssen Hmm, saya kira bahkan kode verbose perlu beberapa klarifikasi ... apakah ini cukup?
Neil

Ah, saya tidak memperhatikan TIO yang berisi versi verbose tbh. Namun demikian, penjelasan dalam jawaban itu sendiri tidak pernah sakit, jadi terima kasih telah meluangkan waktu untuk menulisnya.
Kevin Cruijssen

Saya ingin belajar arang, tetapi membutuhkan halaman seperti 05AB1E yang menjelaskan apa yang sebenarnya dilakukan oleh masing-masing karakter kode-halaman tanpa harus menyelami kode.
Magic Gurita Guci

2
@carusocomputing Ini tidak terlalu buruk: selain dari string terkompresi, Anda memiliki string normal (karakter ASCII dan pilcrow), angka (angka superskrip), panah (... panah), perintah (biasanya huruf kapital dengan lebar penuh) dan operator (semuanya) lain), sehingga Anda dapat mencarinya di halaman wiki yang sesuai.
Neil

6

Clojure, 833 437 byte

Hampir secara definisi Clojure tidak akan pernah memenangkan hadiah untuk singkatnya, tetapi ketika saya melihat ke depan SETIAP MINGGU MINGGU ke episode TWO (count 'em - TWO ) dari Batman (waktu-Bat yang sama, saluran-Bat yang sama!) Sudah jelas bahwa ada tidak ada waktu untuk kalah!

Cepat, Robin - ke Bat-REPL !!!

(defn r[c n](clojure.string/join(repeat n c)))(defn pl[col](loop[i 0 c " "](print(r c (nth col i)))(if(< i (dec (count col)))(recur (inc i) (if (= c " ") "*" " "))(println))))(defn p[](loop[lines [[11 1 25 1][7 4 10 1 5 1 10 4][5 4 12 7 12 4][3 6 12 7 12 6][2 9 9 9 9 9][1 47][0 49][0 49][0 49][1 47][2 5 7 21 7 5][4 4 7 3 4 5 4 3 7 4][7 2 7 1 6 3 6 1 7 2]] i 0] (pl (nth lines i))(if (< i (dec (count lines)))(recur lines (inc i))nil)))

Versi tidak golf:

(defn repstr [c n]
  (clojure.string/join (repeat n c)))

(defn print-bat-signal-line [col]
  (loop [i  0
         c  " "]
    (print (repstr c (nth col i)))
    (if (< i (dec (count col)))
      (recur (inc i) (if (= c " ") "*" " "))
      (println))))

(defn print-bat-signal []
  (loop [lines [[11 1 25 1]  ; spaces asterisks spaces asterisks
                [7 4 10 1 5 1 10 4]
                [5 4 12 7 12 4]
                [3 6 12 7 12 6]
                [2 9 9 9 9 9]
                [1 47]
                [0 49]
                [0 49]
                [0 49]
                [1 47]
                [2 5 7 21 7 5]
                [4 4 7 3 4 5 4 3 7 4]
                [7 2 7 1 6 3 6 1 7 2]]
        i      0]
    (print-bat-signal-line (nth lines i))
    (if (< i (dec (count lines)))
      (recur lines (inc i))
      nil)))

RIP Adam West. Tidak peduli betapa konyolnya pertunjukkan itu, kami yang masih anak-anak memberi hormat kepada Anda.


Meskipun tidak bermain golf, kucing itu masih berdetak menjawab, heh.
Magic Octopus Urn

Versi golf ditambahkan. Saya akan memutar ke samping agar terlihat seperti memanjat dinding jika saya bisa. :-)
Bob Jarvis

6

C (gcc) , 191 byte

#define x 16777215
char*b,*c,a[50];l[]={4096,122888,491535,2064399,4186143,x/2,x,x,x,x/2,4064255,983495,98435,0},*p=l;main(){for(;*p;p++,puts(a))for(b=c=a+23;b>=a;*p/=2)*b--=*c++=" *"[*p&1];}

Cobalah online!


6

Berbagai solusi, semuanya menggunakan Run Length Encoding, dengan berbagai teknik untuk menyandikan data RLE.

Python 3, 125 121 byte

Versi ini menggunakan bytesstring untuk menyimpan data.

s=''
for c in b'<)@4/:),0/>/,3>/*981(WYYY(W*14=./4-.-4+4)2+':s+=' *'[c%2]*(c//2-19);s*=len(s)<25or print(s+s[-2::-1])or 0

Membiarkan smenjadi string bintang atau spasi. Kemudian npengkodean byte sdiberikan oleh

n = 38 + 2*len(s) + (s[0]=='*')

Python 2, 133 126 byte

Versi ini menggunakan kode alfabet. Nilai huruf menentukan panjang string output, huruf huruf menentukan apakah itu terdiri dari spasi atau bintang.

s=''
for c in'kAmgDjAceDlDcFlDbIiEaXYYYaXbEgKdDgCdCgBgAfB':
 s+=' *'[c<'a']*(int(c,36)-9)
 if len(s)>24:print s+s[-2::-1];s='' 

Solusi Python 2 133 byte asli saya.

Versi ini menggunakan string dengan panjang nol sehingga dapat dengan mudah berganti-ganti antara string bintang dan spasi.

s=''
for c,n in zip(24*' *','b1d074a13054c436c429951o0p0p0p1o257b447343727162'):
 s+=c*int(n,36)
 if len(s)>24:print s+s[-2::-1];s=''

Hanya untuk bersenang-senang, ini adalah one-liner menggunakan kode alfabet.

Python 2, 148 byte

print'\n'.join(''.join(s+s[-2::-1])for s in zip(*[iter(''.join(' *'[c<'a']*(int(c,36)-9)for c in'kAmgDjAceDlDcFlDbIiEaXYYYaXbEgKdDgCdCgBgAfB'))]*25))

Untuk lebih asyik lagi, inilah pola dalam Conway's Game of Life yang menghasilkan versi logo Batman. Saya harus menggandakan setiap baris untuk menjaga rasio aspek kurang lebih sama dengan versi teks. Pola ini tidak benar-benar menghitung logo (meskipun adalah mungkin untuk melakukan perhitungan dalam Kehidupan - itu Turing-lengkap), itu hanya replay dari loop memori, jadi saya kira saya tidak bisa posting sebagai entri kode golf (meskipun Saya memang membuatnya menggunakan skrip Python yang saya tulis beberapa tahun yang lalu). ;)

Ini dikodekan dalam format RLE yang cukup standar yang dapat dimuat oleh kebanyakan mesin Life. Jika Anda tidak memiliki program GoL (mis. Golly ), Anda dapat melihatnya beraksi online dengan mesin Life online ini , yang dapat mengimpor file Life RLE. Berikut adalah versi PNG dari pola Hidup itu , beberapa program Life (termasuk Golly) dapat memuat pola Kehidupan dari PNG dan berbagai format file gambar lainnya.


6

T-SQL, 283 276 222 byte

SELECT CAST(DECOMPRESS(CAST('H4sIAAAAAAAEAFNQgAMtBVxAi5cLxgICdB3IAkAAVYuqEsLHIgRWjV0KqxBIvZYWujQeEaAGLdIALxeJGuinhXSvQEMCPVSQAbIcJPJQReGSSHxU9WAeSppAqEMoBwCfudAGawIAAA=='as XML).value('.','varbinary(max)'))AS varchar(max))

Menerapkan kompresi GZIP dari string batman asli, melalui metode yang diposting di sini . Ini hanya berfungsi di SQL 2016 dan yang lebih baru.

Untuk versi SQL sebelumnya, gunakan metode saya sebelumnya ( 276 byte ):

DECLARE @ CHAR(999)=REPLACE(REPLACE(REPLACE('PRINT SPACE(11#1$25#1&$7#4$10#1$5#1$10#4&$5#4$12#7$12#4&$3#6$12#7$12#6&$2#9$9#9$9#9&$1#47&#49&#49&#49&$1#47&$2#5$7#21$7#5&$4#4$7#3$4#5$4#3$7#5&$7#2$7#1$6#3$6#1$7#2)','#',')+REPLICATE(''*'','),'$',')+SPACE('),'&',')+CHAR(13')EXEC(@)

Pada dasarnya saya secara manual menyandikan string raksasa yang menentukan apa yang akan dicetak berikutnya, menggunakan metode berikut:

  • #7 digantikan oleh +REPLICATE('*',7)
  • $4 digantikan oleh +SPACE(4)
  • & digantikan oleh +CHAR(13)

Setelah penggantian, string karakter penuh 958 tampak seperti (dengan jeda baris di setiap baris dalam simbol Batman:

PRINT 
SPACE(11)+REPLICATE('*',1)+SPACE(25)+REPLICATE('*',1)+CHAR(13)
+SPACE(7)+REPLICATE('*',4)+SPACE(10)+REPLICATE('*',1)+SPACE(5)+REPLICATE('*',1)+SPACE(10)+REPLICATE('*',4)+CHAR(13)
+SPACE(5)+REPLICATE('*',4)+SPACE(12)+REPLICATE('*',7)+SPACE(12)+REPLICATE('*',4)+CHAR(13)
+SPACE(3)+REPLICATE('*',6)+SPACE(12)+REPLICATE('*',7)+SPACE(12)+REPLICATE('*',6)+CHAR(13)
+SPACE(2)+REPLICATE('*',9)+SPACE(9)+REPLICATE('*',9)+SPACE(9)+REPLICATE('*',9)+CHAR(13)
+SPACE(1)+REPLICATE('*',47)+CHAR(13)
+REPLICATE('*',49)+CHAR(13)
+REPLICATE('*',49)+CHAR(13)
+REPLICATE('*',49)+CHAR(13)
+SPACE(1)+REPLICATE('*',47)+CHAR(13)
+SPACE(2)+REPLICATE('*',5)+SPACE(7)+REPLICATE('*',21)+SPACE(7)+REPLICATE('*',5)+CHAR(13)
+SPACE(4)+REPLICATE('*',4)+SPACE(7)+REPLICATE('*',3)+SPACE(4)+REPLICATE('*',5)+SPACE(4)+REPLICATE('*',3)+SPACE(7)+REPLICATE('*',5)+CHAR(13)
+SPACE(7)+REPLICATE('*',2)+SPACE(7)+REPLICATE('*',1)+SPACE(6)+REPLICATE('*',3)+SPACE(6)+REPLICATE('*',1)+SPACE(7)+REPLICATE('*',2)

Yang dijalankan sebagai SQL dinamis, menghasilkan output berikut:

           *                         *
       ****          *     *          ****
     ****            *******            ****
   ******            *******            ******
  *********         *********         *********
 ***********************************************
*************************************************
*************************************************
*************************************************
 ***********************************************
  *****       *********************       *****
    ****       ***    *****    ***       *****
       **       *      ***      *       **

5

PHP , 137 byte

<?=gzinflate(base64_decode(U1CAAy0FXECLC8YAAnQNyAJAwIVFIYSPRYgLLkWEYrByLS10WTwiXAgmcYCLRPV00kGyN6BhgB4eyABZjgstyqAsuDpU5YjEgJIOEKoQigE));

Cobalah online!

PHP , 177 byte

foreach(["9zojk",a2878,aa4nb,b7u9z,chbf3,eze2n,jz6rj,jz6rj,jz6rj,eze2n,cepdr,ako8z,a1pc1]as$v)echo$t=strtr(substr(base_convert($v,36,2),1),10,"* "),"* "[$k++<2],strrev($t),"\n";

Cobalah online!

PHP , 179 byte

for(;$o=ord(kAlgDjAbeDlCcFlCbIiDaWXXXaWbEgJdDgCdBgBgAfA[$i++]);($x+=$s)%24?:print$r.("* "[$k++<2]).strrev($r)."\n".$r="")$r.=strtr(str_repeat($b=+($o>96),$s=$o-64-$b*32),10," *");

Cobalah online!


Contoh pertama Anda perlu penawaran
Steven Penny

2
@ SevenPenny Tidak, tidak. Sudah memeriksa tautan coba online ?
ovs

1
@ Svenvenenny Dalam hal ini PHP menggunakan pemeran konstanta yang tidak ada untuk string. Saya hanya melempar Kesalahan Pemberitahuan yang diizinkan di Codegolf. Dan "=" yang hilang pada akhir string yang disandikan base64 akan ditambahkan secara otomatis
Jörg Hülsermann

4

Java, 296 214 byte

Golf:

()->{String r="";boolean b=1<0;for(int a:";1I1074:151:4054<7<4036<7<6029999901_10a10a10a01_0257E570447345437407271636172".toCharArray()){for(int i=0;i<a-48;++i)r+=(b?'*':' ');if(a<49)r+='\n';else b=!b;}return r;}

Tidak Disatukan:

public class InHonorOfAdamWest {

  public static void main(String[] args) {
    System.out.println(f(() -> {
      String r = "";
      boolean b = 1 < 0;
      for (int a : ";1I1074:151:4054<7<4036<7<6029999901_10a10a10a01_0257E570447345437407271636172".toCharArray()) {
        for (int i = 0; i < a - 48; ++i) {
          r += (b ? '*' : ' ');
        }
        if (a < 49) {
          r += '\n';
        }
        else {
          b = !b;
        }
      }
      return r;
    }));
  }

  private static String f(java.util.function.Supplier<String> f) {
    return f.get();
  }
}

Dapat digunakan ";1I1074:151:4054<7<4036<7<6029999901_10a10a10a01_0257E570447345437407271636172"untuk data, dan for(char a:x){a=(int)a-48; [...]pada dasarnya menambahkan 48 ke masing-masing angka dan mengubahnya menjadi setara dengan ascii char mereka. Saya percaya ini akan menghemat 70-80 byte. Juga saya percaya hardcoding data ke dalam lamba akan mengurangi byte juga.
Magic Gurita Guci

Juga boolean b=false;dapat boolean b=1<0, atau bahkan lebih baik, Anda dapat menggunakan intdan juga menggabungkan deklarasi untuk ipada baris yang sama;).
Magic Gurita Guci

1
@caruscomputing terima kasih, saya tidak berpikir tentang mengemasnya dalam sebuah string. Anda memiliki beberapa nilai Unicode buruk di dalamnya, saya harus membuat ulang dan menampilkan output dengan benar sekarang.

Karena Anda tidak menggunakan idalam for for loop saya pikir Anda dapat menggunakan for(int i=0;i++<a-48;)sebagai for-head.
Roman Gräf

3

Bubblegum , 75

xxd dump:

00000000: cd92 b501 8050 1043 fb4c 91fa efbf 1f0e  .....P.C.L......
00000010: 2f87 d371 5814 37d3 7c35 4d2b 1826 64f6  /..qX.7.|5M+.&d.
00000020: d8aa 419c 2a11 3e75 ce25 6d1e ee9d 22e0  ..A.*.>u.%m...".
00000030: bb11 f04f 0d7f 2e38 dfc8 6926 3dad 0871  ...O...8..i&=..q
00000040: f316 1071 6db8 fc07 a408 f7              ...qm......

Cobalah online .


3

Coffeescript (282 Bytes)

t=['6bk','59mw','l2j3','2ghsf','4zg2n','9zldr','jz6rj','4u7zz','165qf','47wj']
[0,1,2,3,4,5,6,6,6,5,7,8,9].map((d)->parseInt(t[d], 36).toString(2).padStart 25, '0').forEach (d)->console.log (d+d.split('').reverse().join('').substring(1)).replace(/0/g, ' ').replace(/1/g,'*')

Penjelasan (menggunakan plain-ol ES6)

  • Seperti yang disebutkan di atas, gambarnya simetris, jadi kita bisa membuang setengahnya dalam penyandian
  • Beberapa baris juga diulang, sehingga kita bisa melemparkan setiap baris dalam tabel pencarian untuk menghemat beberapa byte
  • Kami mengkonversi setiap setengah baris menjadi biner (menggunakan 0 sebagai ruang dan 1 sebagai *), dan menyandikannya pada radix tertinggi dalam Javascript (36), menghasilkan array pengkodean.
  • Peta pertama mengambil setiap baris dan mengkonversinya kembali menjadi setengah-garis keluaran akhir, diisi dengan 0s
  • Peta kedua menggabungkan setiap baris dengan separuhnya terbalik (melemparkan kolom tengah untuk yang kedua kalinya), dan mengganti 0s dan 1s dengan spasi dan * s

var t = [
    '6bk',
    '59mw',
    'l2j3',
    '2ghsf',
    '4zg2n',
    '9zldr',
    'jz6rj',
    '4u7zz',
    '165qf',
    '47wj'
];
[0,1,2,3,4,5,6,6,6,5,7,8,9].map((d) => {
    return parseInt(t[d], 36).toString(2).padStart(25, '0');
})
.forEach((d) => {
    console.log((d + d.split('').reverse().join('').substring(1))
        .replace(/0/g, ' ')
        .replace(/1/g, '*'));
});


Jawaban keren! Selamat datang di situs ini! :)
DJMcMayhem

2

V , 102 byte

i±³ *±± 
³ *± ´*· 
´*±² ´*µ 
´*±² ¶*³ 
µ*¹ ¹*  
²´* Ä3o²µ*jo±±*· µ*  
³*´ ³*· ´*´ 
**¶ *· **· Îæ$vp

Cobalah online!

Hexdump:

00000000: 69b1 b320 2ab1 b120 0ab3 202a b120 b42a  i.. *.. .. *. .*
00000010: b720 0ab4 2ab1 b220 b42a b520 0ab4 2ab1  . ..*.. .*. ..*.
00000020: b220 b62a b320 0ab5 2ab9 20b9 2a20 200a  . .*. ..*. .*  .
00000030: b2b4 2a20 1bc4 336f b2b5 2a1b 6a6f b1b1  ..* ..3o..*.jo..
00000040: 2ab7 20b5 2a20 200a b32a b420 b32a b720  *. .*  ..*. .*. 
00000050: b42a b420 0a2a 2ab6 202a b720 2a2a b720  .*. .**. *. **. 
00000060: 1bce e624 7670                           ...$vp

Ini menggunakan pengkodean run-length untuk menghasilkan setengah batman berikut:

             *           
   *          ****       
****            ****     
****            ******   
*****         *********  
************************ 
*************************
*************************
*************************
************************ 
***********       *****  
***    ***       ****    
**      *       **      

Dan kemudian membalikkan dan menduplikasi setiap baris.


2

Python 2 , 134 byte

for w in'1D 4A13 4C4 6C4 995 O P P P O 57B 47343 27162'.split():r=''.join(c*int(k,36)for c,k in zip(3*'* ',w));print'%25s'%r+r[-2::-1]

Cobalah online!

Run-length mengkodekan setiap baris dari setengah kiri di dasar 36. Mirror untuk membuat garis penuh, yang dicetak. Spasi utama tidak dikodekan; sebagai gantinya, setengah kiri diisi hingga panjang 25.


Saya berharap saya bisa menggunakan trik padding dalam versi saya ...
PM 2Ring

2

Mathematica 151 Bytes

Uncompress@"1:eJxTTMoPCm5iYmBQQAAtBVxAK8bA0AjGBgJ0PcgCQABXjaoWwsciBFWPXRKrEESHlha6AjwiYC1apAGQHhK10FsTOV6Chgp6CCEDZDlYdKKKw6WR+OjxD+KiJBSEQoR6AC49ZiI="

Murah dan tidak kreatif. String hanya dari Compressperintah bawaan yang digunakan pada output yang diperlukan.

Memperbarui:

Saya pikir saya bisa melakukan yang lebih baik dengan fungsi- fungsi ImportString\ built-in ExportStringtetapi saya tidak bisa menyalin dan menempelkan string yang dihasilkan dari ExportStringdengan benar. Misalnya

b = "           *                         *\n       ****          *     *          ****\n     ****            *******            ****\n   ******            *******            ******\n  *********         *********         *********\n ***********************************************\n*************************************************\n*************************************************\n*************************************************\n ***********************************************\n  *****       *********************       *****\n    ****       ***    *****    ***       ****\n       **       *      ***      *       **"
ExportString[b,"GZIP"]
ImportString[%,"GZIP"]

Saya tidak bisa menyalin output teks dari baris kedua untuk menggantikan %baris ketiga.


2

Bash ,407 322 byte

w=`yes 1|head -30|tr -d '\n'`
for i in B1C000 74A120 54C003 36C003 299004 1C0506 0D0506 0D0506 0D0506 1C0506 257505 447342 727161
{ read a b c d e f <<<$(echo $i| fold -1| xargs)
x=`printf "%.$[0x${a}]d%.$[0x${b}]s%.$[0x${c}]d%.$[0x${d}]s%.$[0x${e}]d%.$[0x${f}]s" 0 $w 0 $w 0 $w`
echo -n $x$[f<1?0:1]
rev<<<$x
}|tr 01 \ \*

Cobalah online!

benar-benar mengerikan, butuh lebih banyak waktu atau bantuan untuk golf itu. itu menghasilkan output dengan 0 dan 1 dan transliterasi pada akhirnya. Dikodekan dalam hexa digit jumlah 0 dan 1, berhati-hatilah untuk membuat angka 0 terakhir untuk dua baris pertama sebagai flag untuk menampilkan kolom tengah. Menggunakan cetakan untuk digit atau string ke output 0 dan 1. berpikir %.$[0x${X}]Cpola dapat digunakan untuk golf itu.

w=`yes 1|head -30|tr -d '\n'`  # w=111111111111111111111111111111   
for i in B1C000 74A120 54C003 36C003 299004 1C0506 0D0506 0D0506 0D0506 1C0506 257505 447342 727161
{ read a b c d e f <<<$(echo $i| fold -1| xargs)
printf "%.$[0x${a}]d
%.$[0x${b}]s
%.$[0x${c}]d
%.$[0x${d}]s
%.$[0x${e}]d
%.$[0x${f}]s" 0 $w 0 $w 0 $w
echo -n $[f<1?0:1]
printf "%.$[0x${f}]s
%.$[0x${e}]d
%.$[0x${d}]s
%.$[0x${c}]d
%.$[0x${b}]s
%.$[0x${a}]d\n" $w 0 $w 0 $w 0 
}|tr 01 \ \*

2

Python 3, 232 197 183 164 byte

Namun Jawaban Python Lain. Tidak ada kode kompresi yang membosankan. Kode kompresi yang menarik.

for s in map(lambda x:x+x[-2::-1],b".$; *',$' ('.* &).* %,+, $R #T #T #T $R %()8 '')&&( *%)$(&".split()):print(*((u-35)*" "+(v-35)*"*"for u,v in zip(*[iter(s)]*2)))

Saya menggunakan angka ajaib 35 karena dengan begitu, tidak ada karakter kontrol, spasi, atau hal-hal yang perlu diloloskan terjadi. Sedih karena saya harus memproses ruang dan bintang secara terpisah, itu membuat saya sedikit biaya.

Tidak Disatukan:

for s in map(lambda x:x+x[-2::-1],   # map a list to the list and itself reversed,
                                     # minus the last (center) element
# magic string:
".$; *',$' ('.* &).* %,+, $R #T #T #T $R %()8 '')&&( *%)$(&"
.split()):                           # split on whitespace to divide into lines
 print(*(                            # unpack generator expression
(ord(s[i])-35)*" "                   # convert character to int, -25, times space
+(ord(s[i+1])-35)*"*"                # same thing with "*"
for i in range(0,len(s)-1,2)))       # for every pair in the list

Metode pengkodean itu lebih baik daripada basis 36. Saya harap Anda tidak keberatan bahwa saya telah mengadaptasinya untuk solusi terbaru saya. ;) Ada beberapa hal yang dapat Anda lakukan untuk mengurangi jumlah byte Anda. 1 Anda dapat menyimpan satu byte dengan meletakkan printpanggilan pada baris yang sama dengan for. 2 Jika Anda menggunakan bytesstring, Anda dapat menyingkirkan ordpanggilan - panggilan itu. 3 Anda dapat menggantinya rangedengan melompati sepasang iterator. Berikut generator yang menggabungkan kedua ide-ide: ((u-35)*" "+(v-35)*"*"for u,v in zip(*[iter(s)]*2)). Perubahan itu akan menurunkan jumlah Anda menjadi 164.
PM 2Ring

@ PM2Ring Saya tidak keberatan sama sekali. Pergi berlibur selama beberapa minggu, jadi silakan mengedit perubahan Anda.
L3viathan

Oh oke. Tapi saya akan membiarkan Anda melakukan versi un-golfed baru.
PM 2Ring

@ PM2Ring di bus sudah, jadi saya hanya berharap orang lain akan menyetujuinya
L3viathan

2

PowerShell, 305 byte, 307 byte , 316 byte

[IO.StreamReader]::new(([IO.Compression.GZipStream]::new([IO.MemoryStream]::new(([Convert]::FromBase64String('H4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbuHBUsBqAgAA')),0,102),[IO.Compression.CompressionMode]::Decompress))).ReadToEnd()

Mungkin orang lain dapat membantu saya mempersingkat lebih jauh, meskipun saya tidak tahu bagaimana kecuali ada cara yang lebih ringkas untuk mendefinisikan akselerator tipe khusus.

Sunting: Versi singkat (terima kasih @root). String yang dikodekan (pengkodean pra base64) dapat dipangkas dengan delapan posisi array dan rentangnya dapat dikurangi. Tidak yakin mengapa StreamWriter memperkenalkan mengasapi ini ke dalam MemoryStream. Wawasan tentang perilaku yang mendasarinya akan dihargai.

[IO.StreamReader]::new(([IO.Compression.GZipStream]::new([IO.MemoryStream]::new(([Convert]::FromBase64String('H4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbg')),0,94),[IO.Compression.CompressionMode]::Decompress))).ReadToEnd()

Tidak Disatukan:

#Read decoded stream 
[IO.StreamReader]::new(
    (
        #Reverse GZip encoding
        [IO.Compression.GZipStream]::new(
            #Load GZip encoded string into a memory stream
            [IO.MemoryStream]::new(
                (
                    # Convert Base64 back to GZip encoded string
                    [Convert]::FromBase64String('H4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbuHBUsBqAgAA')
                ),
                #Start of range
                0,
                #End of range. Stick the Memory Stream into a variable and use .Length here for non golf code
                102
            ),
            #Specify that we are decompressing
            [IO.Compression.CompressionMode]::Decompress
        )
    )
).ReadToEnd()

Kode kompresi:

$s = '           *                         *
       ****          *     *          ****
     ****            *******            ****
   ******            *******            ******
  *********         *********         *********
 ***********************************************
*************************************************
*************************************************
*************************************************
 ***********************************************
  *****       *********************       *****
    ****       ***    *****    ***       ****
       **       *      ***      *       **'

#Create Memory Stream
$ms = [IO.MemoryStream]::new()
#Initialize a stream
$sw = [IO.StreamWriter]::new(
    #Create GZip Compression stream
    [IO.Compression.GZipStream]::new(
        #Reference Memory Stream
        $ms,
        #Set mode to compress
        [IO.Compression.CompressionMode]::Compress
    )
)
#Write input into stream
$sw.Write($s)
#Close the stream
$sw.Close()

#Convert Array to Base64 string
[Convert]::ToBase64String(
    #Retrieve Memory Stream as an array
    ($ms.ToArray() | select -SkipLast 8)
)

1
Kenapa harus 102? 99 bekerja sama,[IO.StreamReader]::new(([IO.Compression.GZipStream]::new([IO.MemoryStream]::new(([Convert]::FromBase64String('H4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbuHBUsBqAgAA')),0,102),[IO.Compression.CompressionMode]::Decompress))).ReadToEnd()
root

@ root tidak, kurasa tapi aku tidak yakin mengapa itu berhasil. Anda benar-benar dapat menguranginya menjadi delapan hingga 94 dan menjatuhkan delapan karakter terakhir dari string input yang disandikan. Saya mengalami kesulitan mencari tahu mengapa ini berhasil dan saya tidak ingin menambahkannya ke jawaban saya sampai saya melakukannya. Apakah fungsi kompresi saya keliru menambahkan padding luar entah bagaimana?
Chirishman

1
Dari kode kompresi Anda, dua nilai terakhir dari $ms.ToArray()keduanya adalah 0. Apakah perlu?
root

Tidak. Dan mencoba string input yang berbeda, tampaknya konsisten bahwa itu persis dua posisi array yang tidak dibutuhkan pada akhirnya. Saya akan menambahkan klausa untuk melewati dua terakhir ke skrip kompres saya. Masih berharap saya tahu mengapa penulis streaming menambahkan nol ke akhir
Chirishman

1
Anda benar, ini lebih dari sekedar 2 karakter ekor, itu 8. 8 posisi terakhir dalam array ('225','193','82','192','106','2','0','0'),, dapat dihapus untuk dibuat H4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbg==. Saya tidak mengerti dari mana mereka berasal.
root

2

Perl 5, 168 byte

$_="11 *25 
7 4*10 *5 *10 4
5 4*12 7*12 4
3 6*12 7*12 6
2 9*9 9*9 9
 47
49
49
49
 47
  5*7 21*7 5
4 4*7 3*4 5*4 3*7 4
7 **7 *6 3*6 *7 *";s/$/*/gm;say s/\d+(.)/$1x$&/ger

Perhatikan ruang trailing di ujung hanya baris pertama. Membutuhkan -M5.01, yang gratis.

Mungkin bisa bermain golf sedikit lebih.


2

LaTeX, 314 byte

\documentclass{book}\begin{document}\def\r#1#2{\ifnum#2>64#1\r#1{\numexpr#2-1}\fi}\catcode`.13\catcode`!13\catcode`-13\def!#1{\r*{`#1}}\def-#1{\r~{`#1}}\let.\par\tt-K!A-Y!A.-G!D-J!A-E!A-J!D.-E!D-L!G-L!D.-C!F-L!G-L!F.-B!I-I!I-I!I.-A!o.!q.!q.!q.-A!o.-B!E-G!U-G!E.-D!D-G!C-D!E-D!C-G!D.-G!B-G!A-F!C-F!A-G!B\enddocument

Versi ungolfed dengan penjelasan:

\documentclass{book}
\begin{document}
% Macro for repeating #1 (#2-64) times
\def\r#1#2{\ifnum#2>64#1\r#1{\numexpr#2-1}\fi}
% Prepare '.', '!' and '-' for usage as macro names
\catcode`.13\catcode`!13\catcode`-13
% The ASCII code of #1 (a character) is used as the number of how often '*' will be printed with \r
\def!#1{\r*{`#1}}
% Same as ! but for spaces
\def-#1{\r~{`#1}}
% . becomes a line break
\let.\par
% Set monospace font
\tt
% And finally print the whole thing
-K!A-Y!A.-G!D-J!A-E!A-J!D.-E!D-L!G-L!D.-C!F-L!G-L!F.-B!I-I!I-I!I.-A!o.
!q.!q.!q.-A!o.-B!E-G!U-G!E.-D!D-G!C-D!E-D!C-G!D.-G!B-G!A-F!C-F!A-G!B
\enddocument

2

C # (.NET Core) , 342 333 328 185 175 byte

_=>{var r="";for(int i=0,j,k=0;i<63;i++)for(j=0;j++<"-#;#4&,#'#,&.&.).&*(.).('+++++%Q#µ#Q%')7)'(&)%&'&%)&-$)#(%(#)$)"[i]-34;){r+=i%2<1?' ':'*';if(++k%49<1)r+='\n';}return r;}

Cobalah online!

Banyak byte yang disimpan setelah mengubah pendekatan. Mengambil gambar sebagai array 2D, saya menghitung pengkodean RLE oleh file:

{ 11, 1, 25, 1, 18, 4, 10, 1, 5, 1, 10, 4, 12, 4, 12, 7, 12, 4, 8, 6, 12, 7, 12, 6, 5, 9, 9, 9, 9, 9, 3, 47, 1, 147, 1, 47, 3, 5, 7, 21, 7, 5, 6, 4, 7, 3, 4, 5, 4, 3, 7, 4, 11, 2, 7, 1, 6, 3, 6, 1, 7, 2, 7 }

Indeks ganjil berarti s dan bahkan indeks adalah *s. Lalu saya mengganti setiap angka untuk representasi ASCII yang dapat dicetak (mengambil karakter '#' sebagai 1), dan saya mendapat:

-#;#4&,#'#,&.&.).&*(.).('+++++%Q#µ#Q%')7)'(&)%&'&%)&-$)#(%(#)$)

Jadi algoritma hanya menghitung gambar dengan mendekompresi string ini dan menambahkan baris baru di tempat yang tepat.


1
Tidak perlu diatur lke variabel, gunakan saja dalam loop secara langsung. .ToString(i, 2)-> .ToString(i,2)Yaitu menghapus spasi.
TheLethalCoder

Bisakah Anda menyimpan byte dengan 1e10representasi desimal atau ilmiah ( ) untuk angka-angka itu? Tantangan ini sebenarnya sangat membantu di sini.
TheLethalCoder

@TheLethalCoder nggak. Saya baru saja memeriksa (tantangan yang mengesankan, omong-omong) dan saya sudah menggunakan representasi terkecil, jadi tidak beruntung di sana. Saya bahkan mencoba menemukan pembagi umum terbesar di antara mereka untuk melihat apakah saya dapat membagi angka dengan konstanta, tetapi jelas 1.
Charlie

2

PowerShell , 129 128 byte

-join('5+C+<.4+/+4.6.616.206160/33333-Y+s*t+Y-/1?1/0.1-./.-1.5,1+0-0+1,'|% t*y|%{(' ','*')[$i++%2]*($_-42)})-split'(.{49})'-ne''

Cobalah online!

Tidak Disatukan:

-join(
    '5+C+<.4+/+4.6.616.206160/33333-Y+s*t+Y-/1?1/0.1-./.-1.5,1+0-0+1,'|% toCharArray|%{
        (' ','*')[$i++%2]*($_-42)
    }
)-split'(.{49})'-ne''

Keluaran:

           *                         *           
       ****          *     *          ****       
     ****            *******            ****     
   ******            *******            ******   
  *********         *********         *********  
 *********************************************** 
*************************************************
*************************************************
*************************************************
 *********************************************** 
  *****       *********************       *****  
    ****       ***    *****    ***       ****    
       **       *      ***      *       **

Gagasan utama sangat sederhana

Pengodean Emblem:

  1. Gabungkan semua garis emblem menjadi satu string
  2. Hitung spasi dan tanda bintang
  3. Encode panjang masing-masing segmen + 42 sebagai char

Decoding (skrip ini):

  1. Dapatkan kode char minus 42 untuk setiap char dari cripto-string. Ini adalah panjang segmen
  2. Tambahkan segmen, terdiri dari spasi atau tanda bintang berulang Lengthkali
  3. Masukkan baris baru masing-masing 49 simbol untuk membagi garis

Beberapa hal cerdas

  1. Algoritma pengkodean menyarankan simbol dengan kode 189 untuk menampilkan 3 garis tanda bintang tengah. Simbol ini bukan ASCII. Ini berfungsi normal dengan lingkungan modern, tetapi ada ambiguitas dengan panjang skrip. Jadi, saya mengganti simbol non-ascii ½ke s*t(73 tanda bintang, 0 spasi, 74 tanda bintang).
  2. Saya memotong spasi tepat di baris terakhir untuk menghemat 1 byte. Maaf, Batman.
  3. Mengapa offset-nya adalah 42? Hanya ingin :) Dan cripto-string terlihat bagus.

Ekstra: Skrip untuk pengkodean Emblem

(@"
           *                         *           
       ****          *     *          ****       
     ****            *******            ****     
   ******            *******            ******   
  *********         *********         *********  
 *********************************************** 
*************************************************
*************************************************
*************************************************
 *********************************************** 
  *****       *********************       *****  
    ****       ***    *****    ***       ****    
       **       *      ***      *       **       
"@ -replace"`n"-split'( +|\*+)'-ne''|%{[char]($_.Length+42)})-join''

1

Mathematica, 271 byte

T=Table;f[x_]:=""<>T["*",x];m={f@49};n={f@47};g[y_]:=""<>T[" ",y];k[a_,b_,c_,d_,e_]:={(s=f@a<>g@b<>f@c<>g@d<>f@e)<>StringDrop[StringReverse@s,1]};Grid@{k[1,13,0,0,0],k[4,10,1,3,0],k[4,12,0,0,4],k[6,12,0,0,4],k[9,9,0,0,5],n,m,m,m,n,k[5,7,0,0,11],k[4,7,3,4,3],k[2,7,1,6,2]}

1

Braingolf , 590 580 579 577 428 423 312 byte

-111 byte karena LeakyNun adalah dewa golf

14#
46*6394943[92+.6,5][8]#.[# ]#*[# ]#*#
[# ][#*][# ]#*[# ]#*[# ]#*...#
[# ][#*][# ][#*][# ]#*...#
# ..[#*][# ][#*][# ][#*]#
# .[#*][# ][#*][# ][#*]#
# [#*]#
&@#0[#*]#
!&@!&@# &@#.[#*]"
  "&@4645*643646366556[#*][# ][#*][# ][#*]"
    "[#*][# ]#*..# ...[#*]# ...#*..[# ][#*]#
[# ]#*.[# ]#*[# ]#*..[# ]#*[# ]#*.&@

Cobalah online!

Braingolf tidak pandai seni ASCII, tetapi saya mencoba.

Tidak mungkin saya menjelaskan gugus ini ** k


1

/// , 171 166 byte

5 byte disimpan karena saya menggunakan \r\ndi sumbernya, lol.

/-/  //,/!!//'/**//&/*"//%/--//#/,,,,,!*//"/%-//!/''/"% &""" *
" !"%*% &%!
% !""!'&"!
- !*&"!'&"!'
-,&- ,&- ,*
 #'
!#
!#
!#
 #'
-!& ,,!& !*
%!" '*%!*%'& !
" *& &'&& '

Cobalah online!

Dikompresi dengan menggunakan iterasi berturut-turut untuk mengganti substring "paling ekonomis" dengan satu karakter. Ini hampir optimal, meskipun salah satu dari dua hal ini dapat terjadi:

  1. Saya bisa lolos dengan menggunakan beberapa penggantian meta (misalnya memasukkan regex secara dinamis)
  2. Entah bagaimana lebih menguntungkan untuk mengganti substring yang kurang ekonomis terlebih dahulu (tidak mungkin).
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.