Karena kita tidak bisa mendapatkan cukup golf bahasa esoteris, bukan?
/// - slash yang diucapkan —adalah bahasa kecil yang menyenangkan berdasarkan s///
fungsi penggantian-regex dari ketenaran Perl. Ini hanya berisi dua karakter khusus, garis miring /
dan garis miring terbalik \
. Anda dapat menemukan artikel lengkapnya di esolangs wiki , tetapi saya akan mereproduksi deskripsi bahasa di bawah ini, serta beberapa contoh.
Singkatnya, ini berfungsi dengan mengidentifikasi /pattern/repl/rest
dalam program dan membuat penggantian sebanyak mungkin. Tidak ada karakter yang khusus kecuali /
dan \
: /
membatasi pola dan penggantian dalam program, sementara \
memungkinkan Anda untuk memasukkan huruf /
atau \
karakter ke dalam kode Anda. Khususnya, ini bukan ekspresi reguler, hanya penggantian string biasa.
Tantangan Anda adalah menghasilkan penerjemah untuk bahasa ///, baik sebagai program yang membaca STDIN atau fungsi yang mengambil argumen string, dalam karakter sesedikit mungkin.
Anda dapat menggunakan bahasa apa pun kecuali /// sendiri. Anda tidak boleh menggunakan pustaka yang menafsirkan ///; Anda dapat, bagaimanapun, menggunakan regex, regex librari, atau pustaka pencocokan string.
Eksekusi
Ada empat negara bagian, cetak , pola , penggantian , dan penggantian . Di setiap negara kecuali penggantian :
- Jika program kosong, eksekusi terhenti.
- Lain, jika karakter pertama
\
, lakukan sesuatu dengan karakter berikutnya (jika ada) dan hapus keduanya dari program. - Jika karakter pertama adalah
/
, hapus, dan ubah ke status berikutnya. - Lain, lakukan sesuatu dengan karakter pertama dan hapus dari program.
- Ulangi.
Status menyatakan melalui cetak , pola , penggantian , dan penggantian secara berurutan.
- Dalam mode cetak , 'lakukan sesuatu' berarti mengeluarkan karakter.
- Dalam mode pola , 'lakukan sesuatu' berarti menambahkan karakter ke Pola saat ini.
- Dalam mode penggantian , 'lakukan sesuatu' berarti menambahkan karakter ke Penggantian saat ini.
Dalam mode substitusi , Anda mengikuti serangkaian aturan yang berbeda. Ganti secara berulang kejadian pertama dari Pola saat ini dengan Penggantian saat ini dalam program, sampai tidak ada lagi penggantian yang mungkin. Pada saat itu, hapus Pola dan Penggantian dan kembali ke mode cetak .
Dalam program ini /foo/foobar/foo foo foo
, hal berikut terjadi:
/foo/foobar/foo foo foo
foo foo foo
foobar foo foo
foobarbar foo foo
foobarbarbar foo foo
...
Loop ini selamanya dan tidak pernah keluar dari mode substitusi . Demikian pula, jika Pola kosong, maka kemunculan pertama string kosong — di awal program — selalu cocok, sehingga mode substitusi berulang selamanya, tidak pernah berhenti.
Contohnya
no
Output: no
.
/ world! world!/Hello,/ world! world! world!
Output: Hello, world!
.
/foo/Hello, world!//B\/\\R/foo/B/\R
Output: Hello, world!
.
a/ab/bbaa/abb
Output: a
. Program tidak berhenti.
//
Output: tidak ada.
///
Output: tidak ada. Program tidak berhenti.
/\\/good/\/
Output: good
.
Ada juga quine di wiki yang bisa Anda coba.
\
Karakter tersebut lolos dari semua karakter yang mengikutinya, termasuk /
, yang nantinya dapat digunakan seperti biasa. Meskipun ini tidak terlihat banyak, ini membuat /// Turing-complete .
///
IDE saya yang saya buat!
/-/World//--/Hello//--W/--, w/---!
Apa yang tidak untuk dicintai? (Coba hapus tanda hubung dari akhir)