Golf a Purple Interpreter
Ungu adalah esolang yang dirancang dengan dua tujuan utama:
- Untuk menjadi minimalisasi terong , karena tidak ada cukup bahasa satu instruksi yang memodifikasi sendiri sekitar.
- Untuk mengakui kemungkinan penerjemah golf yang sangat kecil . Pass pertama saya pada interpreter Python 2 dengan fitur cukup lengkap hanya 702 byte, dan saya yakin pegolf yang lebih berpengalaman bisa mencukur sedikit dari itu.
Tujuan Anda adalah menulis penerjemah untuk bahasa ini.
Informasi tentang Ungu:
Program Ungu adalah urutan karakter yang ditempatkan ke dalam array memori yang tak terbatas dan dapat dialamatkan sehingga karakter pertama dari program ditempatkan pada alamat nol. Sisa array (baik sebelum dan sesudah di mana program Ungu disimpan) diinisialisasi ke nol.
Ada tiga register dalam warna Ungu, disebut a dan b dan i , yang masing-masing dapat menyimpan bilangan bulat yang ditandatangani dan diinisialisasi ke nol. i juga penunjuk instruksi, dan selalu menunjuk ke instruksi Ungu yang sedang dijalankan.
Setiap siklus, juru bahasa akan membaca urutan tiga karakter yang berdekatan mulai dari lokasi memori yang ditunjukkan oleh penunjuk instruksi dan mencoba untuk mengeksekusi urutan ini sebagai instruksi Ungu. Setelah itu, penunjuk instruksi selalu bertambah 3.
Secara sintaksis, instruksi Ungu terdiri dari tiga karakter (atau penyandiannya) berturut-turut, seperti " xyz ".
Karakter pertama x dapat berupa salah satu dari yang berikut:
abABio
Simbol-simbol ini memiliki arti sebagai berikut:
a - Place the result in register a.
b - Place the result in register b.
A - Place the result in the location in memory referred to by register a.
B - Place the result in the location in memory referred to by register b.
i - Set the instruction pointer to the result.
o - Output the result to stdout.
Dua byte lain y dan z dapat berupa salah satu dari yang berikut:
abABio1
Masing-masing simbol ini memiliki arti sebagai berikut:
a - Return the contents of register a.
b - Return the contents of register b.
A - Return the contents of the memory array at the address stored in register a.
B - Return the contents of the memory array at the address stored in register b.
i - Return the contents of register i (the instruction pointer).
o - Return the value of a single character read from stdin.
1 - Return the literal numeric value 1.
Setelah mengambil instruksi, penerjemah Ungu akan mengevaluasi y dan kemudian z , kurangi hasil z dari hasil y , dan kemudian lakukan tindakan yang ditunjukkan oleh x pada perbedaan.
Jika urutan tiga karakter (atau penyandiannya) bukan instruksi Ungu yang valid, penerjemah segera berhenti tanpa memberikan kesalahan apa pun.
Penerjemah Anda harus:
- Jadilah program yang lengkap, bukan fungsi.
- Jangan pernah output ke stderr, kecuali EOF dibaca .
- Berperilaku identik dengan implementasi referensi pada semua input yang terbentuk dengan baik yang tidak melibatkan jumlah yang sangat besar, termasuk program pengujian yang diberikan di bawah ini. (Yah, identik dengan waktu - itu bisa berjalan lebih lambat, tetapi tidak terlalu banyak!)
Anda dapat memberikan program kepada penerjemah dalam bentuk apa pun yang Anda inginkan: membacanya dari file, menanamkannya dalam program sebagai string, atau membacanya dari stdin.
Kasus uji:
Program
ooo
saat dijalankan dengan input
z!
harus menghasilkan
Y
Program
bbboobiii
saat dijalankan dengan input
It's a cat program.
(atau input lainnya) harus menghasilkan
It's a cat program.
(atau input apa pun yang diterima) dan kemudian mulai lagi dan lakukan hal yang sama lagi .
Program
Aoab11bi1bABoAaiba
saat dijalankan dengan input
0
harus menghasilkan
0
dan kemudian berhenti, tetapi ketika dijalankan dengan input
1
harus melanjutkan keluaran
1
selama-lamanya.
Program
b1bbb1oAbabaa1ab1Ab1Bi1b
harus menghasilkan
b1bbb1oAbabaa1ab1Ab1Bi1b
Program
aA1aa1bb1oAbbi1bb1bbAb1Bi1b Purple is the awesomest! Why haven't you tried it yet?
!dlroW ,olleG
harus menghasilkan
Hello, World!
Mencetak:
Ini adalah kode-golf , jadi sumber terpendek dalam byte, yang berpotensi dimodifikasi oleh bonus berikut, menang.
Bonus:
- -10% jika penerjemah Anda membaca nama file dari stdin atau dari argumen baris perintah dan memuat program dari file.
uint32
untuk karakter dan MAXINT untuk ints