Apa tips umum yang Anda miliki untuk bermain golf di The Shakespeare Programming Language? Saya mencari ide yang dapat diterapkan untuk masalah kode-golf dan yang juga setidaknya agak spesifik untuk SPL (mis. "Hapus komentar" bukan jawaban).
Silakan kirim satu tip per jawaban.
Jawaban:
(Yah ... karena ini adalah bahasa adopsi saya 1 , saya merasa seperti saya wajib menambahkan sesuatu di sini)
Gunakan nama variabel pendek
Ya, ya, ya, itu cukup standar untuk kode-golf, Anda hanya menggunakan nama variabel panjang satu huruf, tidak ada berita di sini. Atau ada? Karena bab yang menciptakan SPL cukup aneh untuk tidak mengizinkan nama apa pun untuk variabel bahasa mereka: mereka harus berasal dari drama Shakesperian yang, dalam hal panjang karakter, adalah masalah di royal tush - tetapi, jika Anda menulis dalam SPL , kamu sudah tahu itu. Jadi, saran saya adalah menggunakan karakter dengan nama pendek, seperti Ajax , Ford , Page atau Puck , bukan The Archbishop of Canterbury , misalnya.
Hanya itu yang saya dapatkan, saya khawatir.
1 - karena keterampilan Java saya sama dengan keterampilan bayi yang baru lahir.
sumber
(setelah melakukan yang sebelumnya, saya baru ingat beberapa hal)
Pilih kode Anda dengan hati-hati
Contoh, untuk mencoba dan menjelaskan apa artinya ini.
dan
menghasilkan hasil yang sama persis, yang membuat karakter diucapkan untuk mengasumsikan nilai 64 (karena, dengan asumsi Anda membaca pertarungan panjang saya dengan SPL , Anda tahu bahwa kedua baris setara dengan 2 * 2 * 2 * 2 * 2 * 2 * 2 * 1); namun, yang pertama memiliki 59 byte, sedangkan yang kedua memiliki bytecount sebesar 107.
Namun, tidak ada yang akan cukup gila untuk memasuki tantangan kode-golf dengan SPL, jadi ...
sumber
a big big big big big big cat
, menghemat 4 byte lagi? Saya tahu itu merusak kesenian ... tapi ini kode golf. ;)Setiap angka Romawi adalah nomor adegan yang valid
Itu berarti, bahwa alih-alih:
Anda dapat melakukan:
sumber
D
angka Romawi yang valid? IIRC, ini 500 (tapi saya tidak yakin apakah itu valid di SPL)Hapus kata-kata yang tidak dibutuhkan
Lihat ini (menyisipkan baris baru dan spasi putih untuk dibaca):
Terlihat cukup golf ya? Berikut ini adalah bentuk yang lebih tidak terpahami:
Untuk referensi, berikut adalah daftar kata-kata yang mudah dilepas dari kode:
big cat
, jika tidak, Anda masih perlu 'adalah'Legenda:
X
danY
apakah konstanta sukacat
,I
atauyou
[op]
adalah operasi sepertinicer
,the sum of
Jika saya menemukan orang lain saya akan menambahkannya ke daftar.
Untuk referensi tambahan, inilah tajuk terpendek untuk memulai program:
Cobalah online!
Tambahkan Page dan Ford sebagai karakter tambahan yang diperlukan.
sumber
Gunakan kata-kata pendek
Jadi inilah mereka:
a
sebagai gantian
atauthe
, kecuali ekspresithe sum of
dan sejenisnya, karena mereka tidak akan bekerja dengana
.am
,be
atauis
bukannyaare
atauart
.I
sebagai gantime
ataumyself
.you
bukanthee
,thou
,thyself
atauyourself
.big
untuk kata sifat.cat
untuk angka positif.pig
untuk angka negatif.zero
untuk nol.worse
untukA < B
(bukansmaller
ataupunier
).nicer
untukA > B
(bukanbetter
,bigger
,fresher
,friendlier
ataujollier
).sumber
"Mari kita kembali ke adegan X" dapat digunakan bahkan jika karakter yang diajak bicara berada di luar panggung. Jadi alih-alih:
Anda dapat melakukan:
sumber
Hapus ruang yang berlebihan
Terlepas dari yang sepele (dua ruang yang berdekatan, berdekatan dengan tanda baca, berdekatan dengan baris baru, di akhir) (dengan beberapa pengecualian), ruang setelah token berikut dapat dihapus:
the sum of
let us
the ghost
( seperti ini ) (tapi siapa yang akan menggunakan karakter ini)if so
danif not
(menghapus,
setelah ini, dan tidak perlu menambah ruang apapun Contoh:.if solet usact I
)listen to
(begitulisten tothy
berhasil, seperti ini )Catatan: Ini tidak bekerja dengan penerjemah Perl . Ini mungkin hanya efek yang tidak diinginkan yang disebabkan oleh perilaku parsing Flex. The "bahasa baku" tidak jelas tentang itu.
sumber
Anda tidak perlu mengubah orang dalam kondisi.
Sebagai contoh,
lebih panjang dari
sumber
Alih-alih mengurangi, tambahkan konstanta
lebih panjang dari
sumber
Lompatan bisa lebih pendek
Anda dapat menggunakan
return to
bahkan jika adegan di depan, dan sebaliknya. Bahkan, penerjemah bahkan tidak peduli jika Anda menghilangkannya sepenuhnya. Ini berarti ketiga pernyataan ini setara 100%:sumber
Let usscene X
sudah cukup .Gunakan hanya satu adegan
Biasanya, Anda tidak dapat menggunakan kembali adegan pertama suatu tindakan, karena selalu ada
[Enter Ajax and Puck]
hal pertama. Namun, Anda dapat mengawali dengan ini[Exeunt]
agar dapat menggunakan kembali adegan pertama dari sebuah drama.[Exeunt]
adalah satu byte lebih pendek dari mendeklarasikan adegan baru, dan melompat ke Act adalah dua byte kurang dari melompat ke Scene.Contoh: Program kucing sederhana
Cobalah online!
Untuk:
Cobalah online!
sumber
Gunakan kata-kata yang lebih pendek
Contoh:
Thy
danthyself
lebih pendek dariyour
danyourself
.Is
lebih pendek dariare
.dan banyak lagi ...
sumber
Gunakan persyaratan cerdas
Misalnya, jangan gunakan
Melainkan,
sumber
If (so|not)
tidak harus segera mengikuti perbandingan.sumber
If so
s. Ini bisa membantu dalam menghindari perbandingan berulang!Gunakan konstanta untuk menyimpan jumlah besar
Misalnya, jika sudah
Anda bisa mendeklarasikan orang lain di atas
dan ubah kode Anda menjadi
sumber
Gotos bukan satu-satunya perintah yang dapat digunakan
If (so|not)
sumber
Semua baris baru diabaikan
sumber
Gunakan
<
atau>
bukan==
Tidak berlaku untuk setiap situasi, tetapi ini sedikit lebih pendek:
Keping == Ajax
Puck <Ajax atau Puck> Ajax
4 byte lebih pendek untuk keduanya!
sumber
Anda tidak perlu bagian akhir
.
atau!
.Cobalah online!
Ini juga dapat digunakan sebelum a
[
. (terima kasih jimmy23013)Contoh:
,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:You cat
,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Open mind[Exeunt]
Tidak berfungsi di:
,.Ajax,.Page,.Act I:.Scene I:[Enter Ajax]
(tepat setelahScene {number}:
) (namun ini berhasil, saya tidak tahu mengapa),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Listen to your heart
(dan varian yang lebih pendek),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Let us return to scene I
(dan varian yang lebih pendek),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Recall
(hanya setelah kosongRecall
,Recall x
atauRecall@
lain - lain berfungsi),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Speak thy
(tanpamind
)sumber
Speak thy
atauLet us Scene I
Gunakan 'dua kali' dan properti distributif
Dari pada:
Menggunakan:
Ini menghemat 2 byte per
twice
karena 2 penggunaanbig
adalah 8 byte (dengan spasi) dantwice
hanya 6 byte.sumber