Tantangannya sebenarnya sangat sederhana. Pilih 5 huruf berbeda (Anda hanya dapat memilih 5 yang memungkinkan Anda mendapatkan kode terpendek jika diinginkan) dan mengeluarkannya ke konsol. Namun, twistnya adalah mereka harus dari daftar berikut:
AAA BBBB CCCC DDDD EEEEE FFFFF GGG H H
A A B B C D D E F G H H
AAAAA BBBB C D D EEEE FFFF G GG HHHHH
A A B B C D D E F G G H H
A A BBBB CCCC DDDD EEEEE F GGG H H
IIIII J K K L M M N N OOO
I J K K L MM MM NN N O O
I J KKK L M M M N N N O O
I J J K K L M M N NN O O
IIIII JJJ K K LLLLL M M N N OOO
PPPP QQQ RRRR SSSS TTTTT U U V V W W
P P Q Q R R S T U U V V W W
PPPP Q Q RRRR SSS T U U V V W W
P Q QQ R R S T U U V V W W W
P QQQQ R R SSSS T UUU V W W
X X Y Y ZZZZZ
X X Y Y Z
X Y Z
X X Y Z
X X Y ZZZZZ
Aturan tambahan:
- 5 dari surat yang sama tidak diperbolehkan, tidak ada pilihan berulang.
- Setiap huruf harus menggunakan modal sendiri sebagai karakter ascii untuk menggambarnya.
- Setiap keluaran huruf harus berada pada "baris yang sama" dan memiliki 5 spasi di antara setiap huruf.
- Anda dapat memilih setiap 5 huruf yang Anda inginkan, ini akan memungkinkan Anda untuk menggunakan kembali beberapa kode dan menurunkan jumlah byte Anda. Mencari tahu huruf mana yang memungkinkan Anda melakukan ini dengan efisien adalah bagian dari tantangan.
- Ruang tambahan dapat diterima.
- Sebuah single trailing newline dapat diterima, tidak lebih dari satu trailing newline sekalipun.
- Ini adalah kode-golf, kemenangan byte-count terendah.
Contoh:
ABCDE
AAA BBBB CCCC DDDD EEEEE
A A B B C D D E
AAAAA BBBB C D D EEEE
A A B B C D D E
A A BBBB CCCC DDDD EEEEE
EFLIP
EEEEE FFFFF L IIIII PPPP
E F L I P P
EEEE FFFF L I PPPP
E F L I P
EEEEE F LLLLL IIIII P
GILA
CCCC RRRR AAA ZZZZZ Y Y
C R R A A Z Y Y
C RRRR AAAAA Z Y
C R R A A Z Y
CCCC R R A A ZZZZZ Y
Jangan takut untuk mengirimkan lebih dari satu jawaban dengan huruf yang berbeda atau strategi yang berbeda setiap kali, ini dapat dilakukan dengan berbagai cara.
code-golf
ascii-art
kolmogorov-complexity
Guci Gurita Ajaib
sumber
sumber
J
s.\n
, saya akan mengizinkannya.Jawaban:
Jelly , 41 byte
LICTE
TryItOnline!
Ide
Gunakan decode panjang run dengan huruf yang memiliki nilai tengah sedekat mungkin dengan hanya satu panjang run dari setiap "nilai piksel" per baris per huruf.
Letakkan start datar seperti "L" untuk menghindari nilai dekode panjang run yang berbeda untuk baris.
Tempatkan satu huruf yang berbeda (tidak dapat menemukan 5) dari tiga baris tengah di akhir sehingga perbedaan terkecil dapat ditambahkan secara hitung.
Output yang diinginkan; panjang lari; dan ini dikonversi dari basis 11:
Tiga nilai
399633415
,431646160
dan1179122455
dalam basis250
sebagai halaman kode indeks Jelly kemudianðƁ ƥ
,ȷɓSɠ
danJrŀṘ
yang dapat digunakan untuk merangkum informasi run-length.Kode
sumber
Arang ,
5149 byte (ECXKI)Keluaran
Cobalah online!
Dengan menggunakan karakter yang simetris secara vertikal, gambarlah bagian atas dan kemudian pantulkan. Sebagian besar menggunakan Polygon (
G
) dan PolygonHollow (GH
) untuk menggambar serangkaian segmen garis yang terhubung dengan karakter tertentu.I
bisa lebih mudah dilakukan dengan MultiPrint (P
), menggunakanT
sebagai arah.Catatan: PolygonHollow hanya menggambar segmen yang ditentukan, tanpa menyelesaikan poligon atau mengisinya. Poligon akan melengkapi dan mengisi (bukan apa yang kita inginkan) jika poligon dapat dilengkapi dengan garis sederhana di salah satu dari delapan arah mata angin atau antar arah. Kalau tidak, itu berperilaku seperti PolygonHollow, untuk penghematan satu byte.
Urutan karakter dipilih untuk hanya membutuhkan gerakan horisontal dari titik akhir ke awal berikutnya. Begini cara kursor berlangsung:
sumber
GH
dokumen]PowerShell v2 +,
138128114112106105 byte (LICTD)Idenya adalah untuk memaksimalkan jarak antar huruf sehingga kita bisa mendapatkan kompresi berulang.
Pinjam trik deduplikasi baris tengah dari jawaban Florent . Disimpan 6 byte berkat Ben Owen dengan menggunakan perkalian string untuk tiga baris tengah, dan satu byte tambahan berkat Matt .
Output seperti berikut pada 227 byte, untuk pengurangan 53,7% -
sumber
$("L11 I1 C11 T1 D D`n"*3)
alih - alih 3 garis tengahJavaScript,
110109 byte (CLOUD)Tampilkan cuplikan kode
Output adalah 227 byte:
sumber
ES6 (Javascript),
194, 181 byte (IGOLF / ANY)Yang ini panjang, dan belum benar-benar dioptimalkan (setidaknya belum), tetapi dapat dimodifikasi untuk mencetak pesan tertentu, dengan hanya mengubah data bitmap.
SUNTING: Pengganti bagian dalam dikurangi dengan peta , gunakan pergeseran bit untuk bantalan
Golf
Demo
Teori
Ambil surat:
mengubahnya menjadi matriks biner (bitmap)
lakukan hal yang sama untuk 4 huruf lainnya, pindai baris, dengan mengambil "top" 5 bit masing-masing
11111 01110 01110 10000 11111
konversikan ke string heksadesimal (harus menggunakan base36 atau bahkan ASCII yang dapat dicetak di sini)
0x1f73a1f
menerapkan algoritma yang sama ke 4 baris lainnya, untuk mendapatkan bitmap.
Jadikan dalam urutan terbalik.
sumber
[32979487,4736528,4834846,4769296,32979952]
lebih pendek dari representasi heksadesimalnya/(1|0)/g
dengan/\d/g
untuk menyimpan beberapa byte. Juga\n
bisa diganti dengan baris baru yang sebenarnya.PHP,
1071041029486 byteOk saya yakin saya memiliki sumber sekecil mungkin dengan metode ini sekarang. Saya menulis skrip untuk menghasilkan dan kemudian gzip setiap kemungkinan kombinasi lima huruf. Ada dua solusi yang cocok untuk kompresi terpendek - LODIC dan LDOIC. Saya pergi dengan yang pertama karena lebih menyenangkan untuk mengatakan.
Sumber:
Keluaran:
sumber
'
s: string akan diperlakukan sebagai konstanta dengan nilai itu sendiri.05AB1E , 44 byte
Ini menyenangkan.
Saya merasa perlu kembali dan mencoba bermain golf lagi ketika ada waktu.
Menggunakan pengodean CP-1252 .
Terinspirasi oleh jawaban carusocomputing .
ECOIH
Cobalah online!
Penjelasan
‘ÓÑOIHH‘
mendorong tali"ECOOIHH"
.SðýJ3×S
bergabung string dengan spasi, ulangi tiga kali dan mengubahnya menjadi daftar.Daftar yang dihasilkan adalah
['E', ' ', 'C', ' ', 'O', ' ', 'O', ' ', 'I', ' ', 'H', ' ', 'H', 'E', ' ', 'C', ' ', 'O', ' ', 'O', ' ', 'I', ' ', 'H', ' ', 'H', 'E', ' ', 'C', ' ', 'O', ' ', 'O', ' ', 'I', ' ', 'H', ' ', 'H']
.•Td<UÕ‘áÓ?¢tWvkÔÚ•
mendorong nomor itu564631055513119191317171314619131717500
.S)ø
zip daftar dan nomor bersamaan.ü×J
melakukan pengulangan string berpasangan dan bergabung bersama-sama.Hasilnya adalah string
EEEEE CCCC OOO IIIII H HE C O O I H HEEEE C O O I HHHHH
.3äû»
membaginya menjadi 3 bagian, menambahkan potongan pertama dan kedua dalam urutan terbalik dan bergabung dengan baris baru.sumber
•Td<UÕ‘áÓ?¢tWvkÔÚ•
push the number564631055513119191317171314619131717500
" karena mengapa tidak ...JavaScript (ES6), 96 byte (DIOCL)
Idenya di sini adalah tidak hanya membuat tiga garis tengah identik, tetapi juga membuat garis pertama hampir identik dengan yang terakhir. Karena hanya ada 4 huruf yang sangat cocok dengan deskripsi ini
CDIO
,L
adalah pilihan terbaik berikutnya, karena hanya membutuhkan 4 karakter tambahan di akhir string.Seperti halnya jawaban Florent , ini adalah cuplikan yang mengembalikan hasilnya. Tambahkan 3 byte jika perlu fungsi.
Cuplikan tes
Tampilkan cuplikan kode
sumber
D
pertama.C
laluI
danO
jugaI
segera setelah ituC
, meskipun melakukan hal yang menarik meningkatkan solusi Batch saya, untuk alasan yang sama.Bash + coreutils dengan figlet, solusi 55440, masing-masing
112106 byteKeluaran:
Hei, kami sudah memiliki program untuk seni ASCII! The spanduk font yang hampir melakukan pekerjaan, kecuali itu output huruf 7x7. Hmm, mari kita hapus kolom ke-3 dan ke-5, dan baris ke-2 dan ke-5, dan lihat apa yang memberi ...
Ternyata banyak surat akan ditampilkan dengan cara yang diperlukan, yaitu, BDEFHJLPTU Z.
Cukuplah untuk mengganti argumen dari perintah set pertama dengan kombinasi huruf-huruf tersebut untuk tetap mendapatkan hasil yang benar! Karenanya, ini memberi kita 11 * 10 * 9 * 8 * 7 = 55440 solusi, masing-masing panjangnya 106 byte.
sumber
05AB1E ,
102908969 byte (EOIXC)Cobalah online!
Output (230 byte):
Penjelasan:
Teorinya adalah untuk memilih huruf simetris secara vertikal, kemudian mengkodekan 3 baris pertama dan palindromize mereka. Pada dasarnya, saya dikodekan sebagai {#} dari {Letter} dalam 2 byte pasangan. Saya yakin ada cara yang lebih baik untuk melakukan ini.
-20 byte terima kasih kepada Emigna, saya akan segera mengobrol untuk menanyakan beberapa pertanyaan;).
sumber
•Cv¶ÉH&9;´ß{ø‰¿šq3d$µ_©Û¶«K>Ò±sÒ9ÍÊC4ÊÚîòvÅr葾)jM•34B2ð:
. Ikuti obrolan 05AB1E jika Anda memiliki pertanyaan tentang penyandian.45ô
bisa3ä
.A
tidak simetris secara vertikal, dan begitu juga tidakF
. Akan menebak bahwa sekali Anda mulai menggunakanG
atau lebih tinggi itu akan merusak apa yang Anda bicarakan, kan? Juga, dengan metodologi kompresi saya, saya ingin menghindari huruf yang memiliki lebih dari 1 kemunculan per baris. Jika Anda ingin golf solusi itu dan mengalahkan saya, saya akan menyambut contohnya :).0
diO
(baris tengah, sisi kanan)•Cv¶ÉH&9;´ß{ø‰¿šq3d$µ_©Û¶«K>Ò±sÒ9ÍÊC4ÊÚúNÏŒº9¨gÚSÞ•
perbaikanO
pada jumlah byte yang sama.JavaScript ES6, 168 byte, CHAMP
Kita bisa berhenti mencari teman, kita punya
CHAMP
di sinisumber
Brainf ***
512411 BytesLebih baik diulang:
Yang ini melakukan pekerjaan yang lebih baik dalam mengoptimalkan rekaman, mengorbankan karakter pengaturan untuk mencetak karakter. Rekaman yang satu ini terlihat seperti
'C' 'E' ' ' 'F' 'I' 'L' '\n'
, meningkatkan efisiensi. Saya memilih ini karena mereka tidak memiliki ruang internal, sehingga mereka tidak perlu bolak-balik antara karakter dan ruang lebih dari yang diperlukanJika Anda ingin membaca apa yang dilakukannya:
Keluaran:
Pengajuan sebelumnya:
Saya memilih untuk menggunakan ABCDE karena membuat pengaturan rekaman untuk output lebih mudah, tetapi waktu dan karakter yang saya buang dari huruf ke '' untuk semua ruang negatif di dalam A, B, dan D dan penempatan garis akhir di akhir rekaman itu agak membunuh saya, saya pikir.
Saya berakhir dengan kaset yang memiliki nilai
0 0 'A' 'B' 'C' 'D' 'E' ' ' \n
dan kemudian output dari sanaKeluaran:
sumber
[<]>
3 kesempatan untuk menghemat 6 byte.Vim,
116 byte99 byteELITC
Golf di bawah 100 dengan bantuan @DrMcMoylex.
Ini berisi karakter yang tidak patut dicetak, jadi saya telah menambahkannya di bawah (gaya Vim), sehingga Anda dapat melihatnya.
TryItOnline!
Ini pada dasarnya menggunakan decode run-length yang sama dengan jawaban jelly. Saya menggunakan huruf-huruf di mana saya bisa (mudah-mudahan) mengulangi bagian atas di bagian bawah, dan middle semuanya akan sama. Setelah bagian atas, bagian bawah, dan middle dibuat, saya mengedit karakter untuk membuatnya benar:
Saya harus menambahkan dua spasi ke I, karena saya tidak mengizinkan dua angka angka (jadi saya tidak perlu pemisah. Ini mengarah ke 9 ruang lari di mana saya perlu 11.
sumber
Y
bukanVy
,FI
bukan?I<cr>
,{
bukangg
,w
bukanfl
. 3) Jika Anda menggunakanr
alih-alihR
, Anda dapat menghapus<esc>
.MATL , 49 byte
Cobalah online!
Ini menghasilkan surat-surat
TIHZN
:Penjelasan
T
relatif mudah dibuat dari awal.I
dapat diperoleh pada dasarnya sebagaiT
plus refleksi vertikal.H
adalahI
dialihkan.N
adalahZ
dialihkan dan vertikal tercermin.sumber
V ,
62, 53 byteCobalah online!
Output ini
C I D O Z
:sumber
Perl, 109 byte (ABCDE)
Catatan : ini mengandung karakter yang tidak patut dicetak, lolos untuk kemudahan pengujian di sini,
xxd
dibuang di bawah.Menyimpan representasi biner dari posisi huruf sebagai angka, lalu membongkar kembali ke dalam biner, mengganti
0
s dengan spasi dan1
s dengan huruf yang sesuai, menggunakan pencarian. Menyimpan representasi surat itu cukup mudah, tetapi menggantinya ternyata lebih rumit dari yang saya harapkan. Saya yakin ada cara yang lebih baik untuk melakukan ini sehingga saya mungkin terus bermain dengan ini.Untuk membuat ulang file, jalankan
xxd -r > favourite-letter.pl
, rekatkan di bawah ini dan tekan Ctrl+ D:Pemakaian
sumber
Python 2, 124 byte
Mirip dengan jawaban saya yang lain , tetapi dengan pilihan surat yang lebih baik. Output ini:
sumber
Befunge, 120 byte (CKYTF)
Sumber
Keluaran
Cobalah online!
Dalam hal ini penting, saya harus menunjukkan bahwa output saya memiliki ruang terkemuka di setiap baris. Aturan tidak secara eksplisit melarang itu, jadi saya berharap tidak apa-apa. Jika tidak, harap anggap ini entri yang tidak bersaing.
Penjelasan
Huruf-huruf kata dikodekan sebagai urutan sederhana dari 25 bilangan bulat, setiap bilangan bulat menjadi representasi biner dari 5 piksel. Karena Befunge mengharuskan Anda melakukan kalkulasi untuk membuat instantiate integer mana pun yang lebih besar dari 9, huruf-huruf itu dipilih untuk meminimalkan jumlah kalkulasi yang diperlukan, dan dipesan sehingga nilai-nilai pengulangan yang potensial dapat digandakan daripada dihitung ulang.
Kita juga perlu menyimpan nilai ASCII dari setiap huruf, diimbangi oleh 32, dalam array yang diindeks oleh modulo 5 dari indeks penurunan (jadi 0 0 3 3 2 1 ...). Alasan untuk mengimbangi dengan 32 adalah agar nilai dapat dikalikan dengan bit piksel (1 atau 0) dan kemudian ditambahkan ke 32 untuk menghasilkan spasi atau karakter yang diperlukan.
Array nilai huruf ini disimpan dalam 5 byte pertama kode, sehingga mudah diakses. Ini juga kemudian mempengaruhi pilihan huruf, karena nilai-nilai itu harus bermakna ketika ditafsirkan sebagai urutan kode. Ini urutannya
#&49+
. The#
melompat di atas&
dan49+
hanya mendorong 13 ke stack yang kemudian diabaikan.sumber
&
, tetapi program Anda tidak benar-benar mengambil input ... apa yang terjadi?Ruby,
110107102 byte (DOCIL)Cetakan
EDIT: Menyimpan beberapa karakter dengan menghindari
join
dan memindahkan barang-barangsumber
Befunge-98 ,
10998 byte (FUNGE / ANY)Cobalah online!
Input (115 karakter):
Input adalah versi integer dari angka biner dengan format di
aaaaabbbbbb
manaaaaaa
adalah peta terbalik dari karakter yang akan dicetak (misalnya, baris kedua dalam N adalahNN N
, jadi mask adalah10011
), danbbbbbb
merupakan karakter ascii untuk dicetak, minus 32 .Saya juga membuat program befunge-98 untuk membuat input saya:
Cobalah online!
Output (255 karakter):
Penjelasan:
Ini mungkin cukup golf; Saya hampir tidak pernah menghabiskan waktu memikirkan potensi pengurangan.
Secara teoritis ini dapat mencetak urutan 5x5 ascii art.
Terima kasih kepada James Holderness karena membantu saya keluar dari tiga digit!
sumber
48*
dapat diganti dengan'
(karena ini adalah 98 setelah semua), dan88*
dapat diganti dengan'@
. Terima kasih telah membantu saya keluar dari tiga digit!C #,
290279267265 BytesSunting: Disimpan 12 byte berkat @milk! Dan 2 lagi berkat @TheLethalCoder
Golf:
Tidak Disatukan:
Output:
sumber
Func<string,string>j=a=>a.Replace("|",g)+"\r\n";
Stax , 33 byte "BCDEO"
Jalankan dan debug itu
Saya mengambil surat itu
Properti ini berarti bahwa setiap huruf dapat diwakili oleh kisi 3x3. Berikut adalah 9 wilayah, diwakili oleh angka.
Pertimbangkan huruf "B". Hal ini dapat diwakili oleh 3 digit oktal:
656
. Setiap digit berisi tiga bit, yang mengontrol wilayah mana yang diaktifkan untuk huruf itu. Teknik ini juga berfungsi untuk "CDEO".Dibongkar, tidak diserang, dan dikomentari, programnya terlihat seperti ini.
Jalankan yang ini
sumber
Python 3,
234228227166 byte (CLOUD):Cetakan:
sumber
Python 3, 178 byte
Tidak akan menang, tetapi tidak menggunakan kompresi apa pun. Itu membuat ini:
Setiap bantuan dipersilahkan, saya mungkin melewatkan sesuatu. Saya tidak menggunakan Python 2 karena Anda tidak bisa melakukan itu
p=print
, dan itu menghemat 17 byte. Cobalah di repl.it.sumber
p=print
, Anda bisa menggunakan satuprint
pernyataan dengan argumen kwsep='\n'
.Ruby, 101 byte (TIFLE)
Saya memilih huruf yang membutuhkan satu blok huruf (panjang 1,4 atau 5 huruf) di setiap baris. F, L dan E dibenarkan, tetapi T dan saya membutuhkan spasi di mana satu huruf (bagian vertikal) dicetak. Kode untuk menambahkan ruang-ruang ini sepertinya dapat ditingkatkan.
ungolfed
sumber
C 176 byte
Jika int implisit diizinkan maka dimungkinkan untuk memotong 8 byte lainnya.
Output: EDCBA
Cara kerjanya: Makro R hanya mengulang sepotong kode 5 kali. Mengingat seberapa sering balita muncul dalam masalah ini, sangat berguna. Sekarang: inilah yang T (int) lakukan. T mengambil bilangan bulat, dan menggunakannya sebagai bidang bit untuk menentukan di mana mencetak huruf dan di mana mencetak spasi putih. Misalnya, jika diberikan
T(0b11111111100111111110011100)
, itu akan menampilkan:EEEEE DDDD CCCC BBBB AAA
. Ini semakin menghitung mundur untuk huruf apa yang dicetaknya. Pertama mencetak E, lalu D, lalu C, lalu B, lalu A. Memanggil f () akan mencetak semuanya.sumber
Batch, 135 byte (DOCILe)
Catatan: baris pertama berakhir dalam 5 spasi.
sumber
PESTA,
95, 111 byte (EBASH)Golf
Penjelasan
Base64 melalui stream byte LZMA mentah
Demo
Penolakan
Ya, saya sangat menyadari bahwa ini tidak benar-benar portabel, itu sebabnya saya telah membayar satu byte untuk menekan peringatan xz dengan -q dalam kasus pertama> :)
sumber
Python 2,
208194193 byteIni adalah golf kode pertama saya;) Menyenangkan untuk dilakukan
Keluaran:
Menggunakan kamus menghancurkan urutan huruf, tapi itu bukan keharusan
sumber
perl 94 byte.
Pertama 4 huruf (
D
,O
,I
,C
) secara khusus dipilih untuk memiliki garis atas dan bawah sama, dan yang tengah serupa. Karena tidak ada surat serupa lainnya, saya memilih "L" untuk dapat menerapkan algoritma yang sama dan menambahkan 4L yang hilang.Saya menyimpan beberapa byte tambahan dengan mengganti
\n
kode dengan baris baru yang nyata.Hasil:
sumber