Apa tip umum yang Anda miliki untuk bermain golf dalam bahasa pemrograman 2 dimensi? Saya mencari kiat yang dapat diterapkan untuk masalah kode-golf dan khusus untuk bahasa pemrograman 2D, tetapi tidak khusus untuk satu bahasa (Respons seperti "hapus komentar" dan "gunakan M
operasi" bukan jawaban).
Silakan kirim satu tip per jawaban.
Jawaban:
Hindari celah horisontal
Seringkali, kode akan meninggalkan banyak ruang kosong ke sisi kiri program, seperti itu.
Ini menambahkan 4 byte, ketika ini bisa dihindari dengan menyelaraskan ke kiri.
Jika Anda perlu menggunakan celah besar spasi putih, cobalah membuatnya vertikal, bukan horizontal.
vs.
sumber
Gunakan satu dimensi bila memungkinkan
Biasanya, program yang lebih sederhana dapat ditulis dalam satu baris. Misalnya, program kucing klasik bisa berupa:
Tetapi orang dapat menyalahgunakan perilaku membungkus dan membuat ini:
Atau, dalam bahasa tanpa perilaku pembungkusan seperti itu:
(Dengan asumsi
?
tidak muncul.) Dalam kasus bahasa non-pembungkus, loop eksplisit seringkali lebih baik.Dengan perintah lompat
Dalam bahasa 2D dengan lompatan dan perintah lompatan bersyarat, sebuah program bisa terlihat seperti ini:
Ini juga bisa:
(Jika
!
trampolin, dan&
melompat ke posisi)sumber
ioiioiioi
dll?io;
harus dilakukan, dan yang saya tahu adalah itu?
tidak muncul. Sepertinya ini adalah perintah ikan, tetapi saya tidak berpikir mereka sangat standar.Pengembalian Carriage Apakah Juga Bytes
Semakin sedikit 2D yang dapat Anda buat, semakin baik. Pengembalian carriage adalah larangan lain. Tanpa mengabaikan tips dari @ATaco dan @ ASCII saja, coba dan jaga dimensi Y sekecil mungkin.
Ini
lebih baik dari
sumber
\n
(umpan baris) adalah akhir baris yang secara teratur digunakan dalam teks rata kiri pada sistem POSIX, meskipun Windows dan Mac OS (pra-macOS) menggunakan kombinasi\n
(umpan baris) dan\r
(carriage-return).KERING (Jangan Ulangi Diri Sendiri)
Walaupun abstrak dengan fungsi biasanya lebih lama di Code Golf, itu bisa sangat membantu untuk bahasa 2D. Coba ulang kode Anda sehingga dapat menggunakan kembali potongan yang sama, memasukkan / keluar dengan dua cabang eksekusi yang berbeda.
sumber
Jalur interleave
Biasanya dalam bahasa 2D ada IP yang bergerak sesuai dengan perintah arah. Karena spasi adalah byte yang terbuang, hampir selalu lebih efisien untuk mengatur ulang program sehingga bergerak lebih dekat ke kiri sesering mungkin, menghemat kebutuhan ruang pengisi yang tidak perlu.
sumber
Gunakan cermin
Cermin kadang-kadang dapat digunakan dalam dua jalur pada saat yang sama (setiap jalur memantul dari satu sisi cermin). Ini mungkin tampaknya tidak membantu, tetapi mungkin memungkinkan Anda untuk mengatur ulang program Anda, atau jika Anda memiliki banyak jika perubahan arah mereka mungkin dapat diganti dengan mirror yang lebih sedikit.
sumber
Hafalkan idiom
Berikut adalah beberapa "idiom" yang melakukan hal-hal tertentu, tergantung pada sifat bahasa.
Kode pseudo-linear
Jika pembuatan kode dinamis diperlukan, mungkin berguna untuk menggunakan model kode pseudo-linear:
Dengan asumsi
\
danv
maksud apa yang biasanya mereka lakukan.Loop tak terbatas
Di hampir semua bahasa 2D,
><
adalah loop tak terbatas dan tidak dapat dipecahkan. Jika, karena alasan tertentu, Anda perlu melakukan ini, ini adalah cara terbaik, meskipun betapa baiknya ini terlihat:Bahkan, jika Anda membuat kode Anda 1-liner , Anda bisa menggunakan
^
atauv
, dengan demikian:Ini
v
akan mengirim IP ke dirinya sendiri, membungkus. Anda mungkin masih dapat menggunakan pendekatan ini dalam keadaan apa pun di mana perintah arah menunjuk ke serangkaian no-op (relatif).Kerangka quine
Biasanya, bahasa dengan kerangka string / kutipan dapat memiliki quine seperti ini:
Untuk> <>, ini akan terlihat seperti:
Kecuali yang ini keluar dengan kesalahan sebagai penghentian. Ini mungkin yang terpendek > <> quine , atau, paling tidak, yang terpendek yang saya temukan.
sumber
<
quine di> <>?"
ujung - ujungnya berada di sisi yang salah. Kiatnya bagus jika tidak, saya telah menggunakan kerangka umum itu dalam banyak jawaban saya