Baru-baru ini saya telah menulis bahasa baru , untuk menghindari keharusan menangani urutan operasi , saya cukup menyisipkan setiap ekspresi dengan benar untuk menghindari ini sepenuhnya.
Karena tanda kurung ada di kode char 40-41, kode Anda harus sesingkat mungkin.
Contohnya
1+2*3
(1+(2*3))
2*(3+4)
(2*(3+4))
2*3/4+3
(((2*3)/4)+3)
342*32/8
((342*32)/8)
Aturan
Satu-satunya operasi yang perlu Anda tangani adalah: *
(penggandaan), /
(pembagian), +
(penjumlahan), dan -
(pengurangan).
- The urutan operasi adalah:
- Kurung
- Perkalian, Divisi
- Adition, Subtraction
- Anda sebaiknya memilih ke kiri-kanan
- Nomor input akan selalu berupa bilangan bulat positif (lihat bonus)
Bonus
-20% jika Anda menangani negasi:
3+-5
(3+(-5))
-5% jika Anda membiarkan spasi ditempatkan di dalam input:
3 + 4
(3+4)
-10% jika Anda dapat menangani desimal dalam input:
1+.12
(1+.12)
1+0.21/3
(1+(0.21/3))
500 bounty: jika Anda berhasil menulis jawaban dalam Unnamed / Blocks
code-golf
arithmetic
balanced-string
Downgoat
sumber
sumber
1+2+3+4
(solusi mana yang mungkin sebagai kurung((1+2)+(3+4))
)Jawaban:
Python, 153 * 0,9 = 137,7 byte
Program ini menangani input desimal.
Baris kedua dimulai dengan spasi, yang kedua dimulai dengan tab, yang ketiga dengan dua tab dan yang ketiga dengan spasi. Ini menyimpan satu byte. Ini hexdump (
xxd
pp):Berikut adalah program yang saya gunakan untuk pengujian: (Simpan program di atas sebagai
paren.py
)Pastikan terminal Anda menggunakan
\033[38;5;<COL>m
kode pelarian untuk warna.sumber
prefer to go left-right
. Coba test case 3 di OP, hasil Anda tidak benar. Ini bisa menjadi masalah nyata misalnya dengan aritmatika integer((2*(3/4))+3)
(((2*3)/4)+3)
JavaScript (ES6) 179 (263 -20% -5% -10%)
Karena dua jawaban lainnya saat ini keduanya salah, saya akan memposting milik saya. Ini adalah variasi dari pengurai ekspresi yang saya gunakan di sini dan di sini dan di tempat lain. Lihat di sana untuk penjelasan algoritma yang lebih rinci.
Cukup besar tetapi harus bekerja.
Cuplikan tes
sumber
Python, 241 * 0.8 * 0.95 * 0.9 = 164.84 karakter
Saya menggunakan perpustakaan ast (Abstract Syntax Trees) , dan dict pengganti string homebrew. Penggantian string banyak biaya, tetapi bonus membantu menjaga skor agak rendah. Mungkin (bagian pengganti dawai) bisa di mainkan lebih jauh.
Perhatikan bahwa solusi ini menambahkan seperangkat tanda kurung tambahan di sekitar setiap angka, tapi saya pikir itu sesuai dengan semangat pertanyaan
Test suite:
Output dari suite tes:
sumber
import ast
dalam kode Anda