Gambarlah berikut ini dalam byte sesedikit mungkin:
-------------------------
| | ABC | DEF |
| 1 | 2 | 3 |
-------------------------
| GHI | JKL | MNO |
| 4 | 5 | 6 |
-------------------------
| PQRS | TUV | WXYZ |
| 7 | 8 | 9 |
-------------------------
| | | |
| * | 0 | # |
-------------------------
Jawaban:
pb , 240 byte
(Program ini akan meminta input dalam versi pbi saat ini, karena ia menuju ke Y = -1 dan
B
variabel mencoba untuk memperbarui sendiri. Bahkan jika Anda memasukkan input, tidak ada yang akan pecah. Ini menjengkelkan tetapi lebih baik daripada versi yang lama yang meminta input tidak peduli apa.)pb adalah bahasa yang digunakan untuk memperlakukan terminal sebagai kanvas 2D. Untuk menghasilkan, Anda harus memindahkan "kuas" (titik yang diwakili oleh nilai saat ini dari variabel X dan Y) ke tempat Anda ingin karakter itu pergi dan meletakkannya di sana. Ini rumit untuk hal-hal seperti mencetak kata tetapi untuk seni sering kali nyaman.
Program ini sebenarnya tidak menggambarkan dengan tepat apa yang ditentukan pertanyaan. (Tunggu, jangan downvote saya dulu! Biarkan saya jelaskan!)
Menggambar kotak dengan loop cukup mudah, tetapi ada tangkapan. Jika Anda mengulangi bentuk berikut:
Anda memang mendapatkan kotak, tetapi yang kanan dan bawah akan terbuka. Anda dapat menggambar sisi tambahan secara manual, tetapi itu membutuhkan byte. Untuk menyiasati ini, program saya benar-benar menggambar ini, dengan tepi terbuka di sebelah kiri dan atas:
Sst, sst, tidak apa-apa. pb memungkinkan Anda untuk "menulis" ke titik di kanvas dengan satu atau lebih nilai negatif dalam koordinatnya. Nilai disimpan saat program berjalan, tetapi hanya titik di mana X dan Y keduanya> = 0 yang benar-benar ditulis ke layar. Program ini memposisikan sikat sehingga area yang berwarna pada gambar ini memiliki X atau Y negatif:
Meskipun garis ekstra "ditarik", mereka tidak pernah dicetak.
Setelah mengulang dan membuat kisi, program ini mengisi sembilan kotak teratas. Yang pertama adalah hardcoded, 1 ditulis dan program melanjutkan. Delapan lainnya dihasilkan secara terprogram. Mengabaikan kode untuk pindah ke kotak berikutnya, memperhatikan ketika baris kosong, dll (anggap sikat selalu dimulai di baris bawah kotak dan di kolom tengah), inilah yang dijalankan delapan kali:
Bahkan mengetahui itu
b
adalah perintah untuk menulis karakter,^v<>
pindahkan kuas danw[a!b]{}
jalankan kode dalam kurung kurawal sampaia != b
, ini sulit untuk diikuti. Hal penting pertama yang perlu diperhatikan adalah Anda tidak dapat mendefinisikan variabel di pb. Ada enam di setiap program dan Anda harus belajar untuk hidup bersama mereka. Kedua,T
adalah satu-satunya variabel yang Anda benar-benar dapat menggunakan cara Anda terbiasa menggunakan variabel; menetapkan nilai dan kemudian membacanya nanti. Setiap variabel lain tidak dapat disetel dan hanya memberi tahu Anda tentang titik di kanvas tempat Anda berada atau hanya dapat ditetapkan secara tidak langsung dan dengan efek samping (^v<>
ubahX
danY
, yang juga mengubah lokasi kuas.c
AturP
ke(P+1)%8
, yang juga mengubah warna output). Menyimpan konter untuk nomor apa yang perlu ditulis dan surat mana yang tidak mungkin. Sebagai gantinya, kode ini hanya melacak nomor dan mencari tahu huruf-huruf berdasarkan itu. Begini caranya:Ini tidak sempurna, karena hanya 3 huruf yang dimasukkan ke dalam kotak 7 dan 9. Jadi, setelah mengisi baris bawah (hardcoding sederhana), setiap huruf dalam kotak 9 bertambah 2 dan W ditempatkan secara manual. Demikian pula, setiap huruf dalam kotak 7 dan 8 bertambah 1 dan P ditempatkan secara manual.
Tidak Disatukan:
sumber
Brainfuck, 565 karakter (212 byte)
Kode polos:
sumber
Bubblegum , 103 byte
Hexdump:
Membosankan dan praktis.
sumber
Python 2, 147 byte
Draf cepat strategi dasar. Menggunakan pemformatan string untuk menyisipkan label, yang di-hardcode dalam string panjang.
sumber
C, 160 byte
Masuk akal untuk memanfaatkan fakta bahwa surat-surat itu berurutan. Kode ini berjalan melalui 325 karakter keypad, dan mencetak spasi atau huruf berikutnya sesuai kebutuhan.
Tidak disatukan
sumber
Java, 296 byte
Golf:
Tidak Disatukan:
sumber
Lua, 209 byte
Golf:
Tidak Disatukan:
sumber
JavaScript (ES6),
184182 byteDeretan tanda hubung jelas-jelas dapat dikompresi dan angka-angkanya juga tetapi saya tidak dapat melakukan apa pun dengan huruf-huruf itu. Sunting: Disimpan 1 dari 2 byte berkat @Shaggy.
sumber
replace(/-|!./g,s=>s=="-"?s.repeat(25):"| ${s[1]} ")
- mengganti tanda kutip dengan backticks. Saya mencoba beberapa hal untuk melengkapi grup surat tetapi yang terbaik yang bisa saya lakukan adalah 194 byte.CJam, 128 byte
Cobalah online.
sumber
Perl, 142 + 1 = 143 byte
Karakter yang tidak dapat dicetak, jadi versi yang uuencode di bawah ini.
sumber
-M...
harus dihitung juga?Python 3.5 - 240 byte:
Mencetak apa yang diinginkan OP, meskipun mungkin agak panjang.
sumber
Python 2, 200
Strategi penggantian yang sederhana.
sumber
Python 2, 168 byte
Metode langsung tanpa menggunakan kompresi bawaan:
sumber
/// , 154 karakter
sumber
GML (Game Maker Language) 8.0, 269 byte
Di Game Maker,
#
adalah karakter baris baru dan dapat diloloskan oleh\#
sumber
Python 2, 134 byte
Sumber ini mengandung karakter yang tidak dapat dicetak, sehingga disajikan sebagai hexdump yang dapat didekodekan
xxd -r
.sumber
05AB1E , 91 byte (tidak bersaing)
Cobalah online!
sumber
J ,
105103 byteCobalah online!
sumber