Tulis program atau fungsi yang tidak membutuhkan input selain mencetak atau mengembalikan penggambaran teks persegi panjang konstan yang terbuat dari 12 pentomino berbeda :
Persegi panjang mungkin memiliki dimensi apa pun dan berada dalam orientasi apa pun, tetapi semua 12 pentomino harus digunakan tepat sekali, sehingga akan memiliki area 60. Setiap pentomino yang berbeda harus terdiri dari karakter ASCII yang dapat dicetak yang berbeda (Anda tidak perlu menggunakan surat dari atas).
Misalnya, jika Anda memilih untuk menampilkan solusi segi empat pentomino 20x3 ini:
Output program Anda mungkin terlihat seperti ini:
00.@@@ccccF111//=---
0...@@c))FFF1//8===-
00.ttttt)))F1/8888=-
Atau, Anda mungkin lebih mudah untuk bermain golf dengan solusi 6 × 10 ini:
000111
203331
203431
22 444
2 46
57 666
57769!
58779!
58899!
5889!!
Solusi persegi panjang apa pun akan dilakukan, program Anda hanya perlu mencetaknya. (Baris baru yang tertinggal di output baik-baik saja.)
Situs web yang hebat ini memiliki banyak solusi untuk berbagai dimensi persegi panjang dan mungkin layak untuk menjelajahinya untuk memastikan solusi Anda sesingkat mungkin. Ini adalah kode-golf, jawaban terpendek dalam byte menang.
sumber
Jawaban:
Pyth, 37 byte
Demonstrasi
Menggunakan pendekatan yang sangat mudah: Gunakan hex byte sebagai angka. Konversi ke nomor hex, 256 basis encode itu. Itu memberi string ajaib di atas. Untuk mendekode, gunakan fungsi decoder 256 basis Pyth, konversi ke hex, dibagi menjadi 4 potongan, dan bergabung di baris baru.
sumber
CJam (44 byte)
Diberikan dalam format xxd karena berisi karakter kontrol (termasuk tab mentah, yang bermain sangat buruk dengan MarkDown):
yang menerjemahkan ke sesuatu di sepanjang baris
Demo online sedikit ungolfed yang tidak mengandung karakter kontrol dan bermain dengan baik dengan fungsi pustaka decoding perpustakaan URI.
Prinsip dasarnya adalah karena tidak ada bentang yang mencakup lebih dari 5 baris, kita dapat menyandikan offset dari fungsi linier nomor baris secara ringkas (pada basis 5, pada kenyataannya, meskipun saya belum mencoba menentukan apakah ini akan selalu menjadi kasus ).
sumber
Bash + utilitas Linux umum, 50
Untuk membuat ulang ini dari base64 yang disandikan:
Karena ada 12 pentomino, warnanya mudah dikodekan dalam hex nybbles.
Keluaran:
sumber
J, 49 byte
Anda dapat memilih huruf-huruf sedemikian rupa sehingga peningkatan maksimal antara huruf-huruf yang berdekatan secara vertikal adalah 2. Kami menggunakan fakta ini untuk menyandikan kenaikan vertikal di basis3. Setelah itu kami membuat jumlah berjalan dan menambahkan offset untuk mendapatkan kode ASCII dari surat-surat itu.
Jelas golf. (Saya belum menemukan cara untuk memasukkan nomor base36 presisi yang diperluas tetapi base36 sederhana harus menyimpan 3 byte saja.)
Keluaran:
Cobalah online di sini.
sumber
3#i.5
mana0 0 0 1 1 1 ... 4 4 4
) itu bisa bekerja tetapi mungkin tidak akan lebih pendek (setidaknya cara saya mencoba).Microscript II , 66 byte
Mari kita mulai dengan jawaban sederhana.
Hore pencetakan tersirat.
sumber
Rubi
Rev 3, 55bytes
Sebagai pengembangan lebih lanjut tentang ide Randomra, pertimbangkan output dan tabel perbedaan di bawah ini. Tabel perbedaan dapat dikompresi seperti sebelumnya, dan diperluas dengan mengalikan dengan 65 = binary 1000001 dan menerapkan topeng 11001100110011. Namun, Ruby tidak dapat diprediksi dengan karakter 8 bit (ia cenderung menafsirkannya sebagai Unicode.)
Anehnya, kolom terakhir seluruhnya sama. Karena itu, dalam kompresi kita dapat melakukan pengalihan hak pada data. Ini memastikan semua kode ASCII 7 bit. Dalam ekspansi, kita cukup mengalikan dengan 65 * 2 = 130 bukannya 65.
Kolom pertama juga seluruhnya genap. Karena itu kita dapat menambahkan 1 ke setiap elemen (32 ke setiap byte) jika perlu, untuk menghindari karakter kontrol. 1 yang tidak diinginkan dihapus dengan menggunakan mask 10001100110011 = 9011 sebagai gantinya 11001100110011.
Meskipun saya menggunakan 15 byte untuk tabel, saya hanya benar-benar menggunakan 6 bit setiap byte, yang merupakan total 90 bit. Sebenarnya hanya ada 36 nilai yang mungkin untuk setiap byte, yang merupakan 2.21E23 kemungkinan secara total. Itu akan cocok dengan 77 bit entropi.
Rev 2, 58 byte, menggunakan pendekatan incremental Randomra
Akhirnya, sesuatu yang lebih pendek dari solusi naif. Pendekatan incremental Randomra, dengan metode bytepacking dari Rev 1.
Rev 1, 72 byte, versi golf rev 0
Beberapa perubahan dilakukan pada baseline untuk mengakomodasi penyusunan ulang kode karena alasan bermain golf, tetapi masih masuk lebih lama daripada solusi naif.
Offset dikodekan ke dalam masing-masing karakter string sihir dalam basis 4 dalam format
BAC
, yaitu dengan 1 yang mewakili simbol tangan kanan, 16 yang mewakili simbol tengah, dan simbol kiri diseret ke posisi 4 itu. Untuk mengekstraknya, kode ascii dikalikan dengan 65 (biner 1000001) untuk diberikanBACBAC
, kemudian di-anded dengan 819 (binary 1100110011) untuk diberikan.A.B.C
.Beberapa kode ascii memiliki set bit ke-7, yaitu mereka 64 lebih tinggi dari nilai yang diperlukan, untuk menghindari karakter kontrol. Karena bit ini dihapus oleh mask 819, ini tidak penting, kecuali ketika nilai
C
3, yang menyebabkan akumulasi. Ini harus diperbaiki di satu tempat saja (bukannyag
kita harus menggunakanc
.)Rev 0, versi tidak dikoleksi
Keluaran
Penjelasan
Dari solusi berikut, saya kurangi baseline, memberikan offset yang saya simpan sebagai data. Baseline diregenerasi sebagai angka heksadesimal dalam kode dengan
i/2*273
(273 desimal = 111 hex.)sumber
3
di seluruh tabel (tepat di dekat bagian bawah) jadi saya pikir dengan meningkatkan garis dasar dengan sedikit lebih dari 0,5 setiap baris sebenarnya mungkin dimungkinkan untuk menggunakan basis 3. Jangan ragu untuk mencobanya. (Untuk alasan bermain golf, sepertinya saya harus mengubah baseline sedikit, yang memberi saya lebih banyak 3, dan sayangnya sepertinya akan lebih lama 1 byte daripada solusi naif di Ruby.)Foo, 66 Bytes
sumber