pengantar
Forte adalah bahasa esoterik yang sangat aneh berdasarkan konsep memodifikasi nilai-nilai angka. Dalam Forte angka bukan konstanta tetapi variabel, Anda bisa menggunakan LET
instruksi untuk memberikan nilai baru kepada mereka.
Misalnya, setelah mengeksekusi LET 2=4-1
dari sekarang 2
mengasumsikan nilai 3
, yang berarti bahwa setiap kali nilai 2
muncul dalam ekspresi itu malah "diganti" oleh 3
. Ekspresi (1+1)*2
sekarang akan dievaluasi menjadi 9
.
Instruksi ini di Forte digunakan baik untuk menyimpan informasi dan untuk kontrol aliran (garis diberi nomor dan dengan mengubah nilai nomor mereka Anda dapat menentukan urutan pelaksanaannya). Dalam tantangan ini kita tidak akan berurusan dengan aspek kedua ini.
Tantangan
Anda diharuskan untuk menulis juru bahasa untuk subset LET
ekspresi Forte yang disederhanakan .
Anda akan menerima sebagai masukan serangkaian garis mengikuti tata bahasa ini:
<line>::= <number>=<expression>
<expression>::= <number>|<expression>+<number>
Catatan: tata bahasa ini tidak sahih Forte karena tidak memiliki nomor baris, LET, dan tanda kurung (yang selalu wajib)
Artinya, Anda hanya perlu berurusan dengan penjumlahan komputasi dan menetapkan nilai ke angka. Tanda kurung tidak akan ada dalam input, dan setiap ekspresi perlu dievaluasi dari kiri ke kanan: berhati-hatilah bahwa sebagian hasil dipengaruhi oleh redefinisi!
Angka akan selalu berupa bilangan bulat non-negatif, hingga batas jenis bilangan bulat asli bahasa Anda (atau 2 ^ 32, mana yang lebih tinggi).
Untuk setiap baris Anda harus menampilkan hasil dari ekspresi dan menetapkan hasil ini ke nilai (mungkin ditugaskan kembali) dari angka pertama, yang akan mempengaruhi bagaimana baris berikut akan ditafsirkan.
Ini adalah kode-golf , kode terpendek (dalam byte) menang!
Aturan lainnya
- Format input fleksibel, misalnya Anda dapat mengambil string tunggal dengan baris baru, daftar string, daftar daftar angka ... Hal yang sama berlaku untuk output, selama jelas apa hasil dari setiap ekspresi di input.
- Anda dapat mengirimkan fungsi, program lengkap, atau solusi untuk dijalankan dalam lingkungan REPL yang memanggilnya sekali untuk setiap baris.
- Celah standar dilarang, khususnya Anda tidak bisa memanggil juru bahasa Forte eksternal dalam kode Anda.
Contohnya
Ini semua adalah bagian dari input yang sama. Setelah setiap baris, output yang diharapkan relatif terhadap baris tersebut ditampilkan, kadang-kadang dengan komentar yang menunjukkan penugasan kembali yang relevan (bukan bagian dari output yang diperlukan).
5=4
4
6=5
4 # 5 -> 4
7=1+2+5
7
7=5+2+1
4 # Order of operations matters! 5+2 -> 4+2 -> 6 -> 4
18=5+6+7
12
5=3
3 # Remember: 5 -> 4
10=6+4
3 # 6 -> 4 -> 3, 3+3 = 6 -> 3
0
valid ("Angka akan selalu bilangan bulat non-negatif")
0
nomor itu valid?