Tantangan
Tulis kalkulator yang mengambil input dalam bentuk verbal (seperti orang mungkin berbicara persamaan) dan juga output dalam bentuk verbal (seperti orang berbicara angka).
Aturan
Kalkulator harus dapat:
- tambah, kurangi, gandakan, dan bagi
- menangani operan antara negatif satu juta dan satu juta
- menangani keluaran antara negatif satu miliar dan satu miliar
- menangani titik desimal pada inputnya dan menempatkannya dengan benar di outputnya
- menangani output desimal ke tempat seratus, pembulatan di mana diperlukan
Semua operasi yang menghasilkan hasil fraksional harus membulatkan ke tempat seperseratus terdekat (identik dengan format output).
Laporkan dengan output "E" (untuk kesalahan) ketika input akan menyebabkan program gagal karena salah diformat atau dibagi dengan 0; pada dasarnya, program tidak boleh crash pada input yang buruk, karena itu akan menjadi kalkulator yang buruk.
Kalkulator diperbolehkan , tetapi tidak diharuskan untuk melaporkan kesalahan saat operan atau output keluar dari batasannya. Ini dimaksudkan untuk menyederhanakan masalah, tetapi jika Anda tidak setuju dengan saya, jangan ragu untuk membuat kalkulator yang mampu menangani operan dan output yang lebih besar tanpa melaporkan kesalahan.
Keluarkan "E" jika operan untuk operasi melebihi batas yang ditentukan untuk operan.
Output "E" dalam hal output melebihi batas yang dijelaskan untuk output
Bagaimana program menangani sensitivitas kasus dan ruang kosong diserahkan kepada pegolf, seperti pilihan bahasa Inggris Inggris atau Amerika. 1
Program yang memintas implementasi kalkulator dengan menggunakan bahasa atau perpustakaan yang telah mengimplementasikan fungsi yang dijelaskan di atas tidak akan memenuhi syarat untuk kemenangan.
Pemenang
Program dengan jumlah karakter terendah akan menang.
Contohnya
Input: dua tambah dua
Output: empat
Input: dua puluh satu koma lima minus satu koma lima
Output: dua puluh
Input: satu dikurangi dua
Output: satu negatif
Input: lima kali lima
Output: dua puluh lima
Input: dua puluh lima dibagi lima
Output: lima
Input: dua tambah dua minus lima kali lima dibagi negatif nol koma lima
Output: sepuluh
Input satu juta kali seribu
Output: satu miliar
Input: satu juta kali seribu plus satu
Output: E
Input: dua juta plus satu juta
Output: E
Input: satu juta plus satu juta plus satu juta
Output: E
two plus two minus five times five divided by negative zero point five
->2 + 2 - 5 * 5 / -0.5
->54
.one million one
pada input atauone billion one
pada output? Juga, apakah batas 1e6 atau batas 1e9 juga berlaku untuk hasil antara?one hundred divided by three point nought
? (Juga, mengapa output dari contoh terakhirE
daripadathree million
?)Jawaban:
Pertama-tama, ini benar-benar curang, dan tidak lengkap dengan spesifikasi.
membutuhkan
--disable-web-security
bendera di chrome, +22Javascript 509 + 22 = 531
Pertama off spec adalah juga contoh keluaran
input
two plus two minus five times five divided by negative zero point five
outputKasus lain harus ditangani dengan baik (sekarang), ini belum cukup ungolfed, saya hanya ingin itu diperbaiki.
Oh, dan jika Anda benar-benar akan mengujinya, mungkin perlu beberapa detik, karena memuat halaman Wolfram Alpha lengkap hingga dua kali.
Yah, mungkin ada banyak yang harus ditingkatkan.
sumber
Python, 982
Saya pikir ini berfungsi sebagaimana mestinya sesuai dengan spesifikasi, tetapi mungkin ada beberapa bug lagi. Ini mungkin bertindak aneh untuk input> = satu miliar atau kata-kata tak terduga yang ditafsirkan secara salah.
Ini versi yang sedikit lebih mudah dibaca dengan beberapa perubahan:
sumber
Itu dia. Golf versi sebelum memecahkannya, tapi sekarang kami kembali online. Saya yakin itu bisa golf lebih lanjut. Saya akan mengerjakannya lebih banyak besok. Itu cukup sulit untuk membuatnya bekerja dengan benar TANPA bermain golf, dan mataku lelah menatapnya. Ha ha
Jawa - 3220
Dengan jeda baris dan tab
sumber