Versi sederhana dari kalkulator angka bahasa Inggris
Tugas
Tulis program yang menggunakan string sebagai input dan output hasil dari ekspresi.
Aturan
String input akan dikata dan bukan bilangan.
Tidak akan ada tanda kurung.
Urutan perhitungan akan dibagi, dikalikan, kurangi kemudian tambahkan.
Untuk operasi yang sama, perhitungan harus dilakukan dari kiri ke kanan.
Semua angka input akan berupa bilangan bulat dari -999 hingga 999 (keduanya termasuk)
Output akan menjadi bilangan bulat dari rentang apa pun.
Pembagian akan selalu dapat dibagi dengan sempurna dan nol tidak akan pernah menjadi penyebut.
Pembatasan case untuk input adalah opsional. Anda tidak perlu memeriksa validitas input.
Format Angka
0 to 20 -> zero,one,two...nineteen,twenty
21 to 99 -> twenty one,twenty two.....ninety eight,ninety nine
100 to 999 -> one hundred, one hundred one, one hundred two...one hundred ten....two hundred fifty....nine hundred ninety eight,nine hundred ninety nine
Untuk angka negatif: Tambahkan minus
ke ekivalen positifnya
Format Operasi
Addition: one plus two
Subtraction: one minus two
Multiplication: one time two #Note that for one on the left of multiplication, it is one time and not times.
two times one hundred
Division: forty divided by two
Contoh:
o/p <- input
20 four times five
35 twenty plus fifteen
70 fifty plus five times four
-90 minus one time ninety
25 twenty one minus minus four
45 ninety divided by two
700 one time seven hundred
555 one hundred eleven times two plus three hundred thirty three
99 one hundred plus minus one
45 forty five plus two hundred times zero
4 four
-3 three minus three minus three
Ini adalah kode-golf sehingga kode terpendek menang
one times two
. Apakah menggunakantime
normal?Jawaban:
JavaScript (ES6),
257252249235 byteDisimpan 3 byte berkat @Shaggy
Cobalah online!
Bagaimana?
Angka
Operator
Penafsiran
sumber
Perl 6 ,
170 139 129 128 124122 byte-13 byte terima kasih kepada nwellnhof!
Cobalah online!
unival
untuk menyelamatkan lagi! Ini (saat ini) bahkan mengalahkan bahasa golf seperti05AB1E
!Penjelasan:
sumber
Python 2 ,
333...284277275 byteCobalah online!
sumber
Bahasa Wolfram
95 9482 byte#
mewakili input untuk fungsi murni.Jika perlu,
StringReplace
menggantikan "waktu" dengan waktu " "plus minus" dengan "minus"(melalui"me "->"mes "
,"plus m"->"m
", masing-masing). Formulir penggantian yang dipersingkat, disarankan olehlirtosiast
, disimpan 12 byte.Interpreter["SemanticExpression"]
melakukan sisanya.sumber
"time "->"times "
ke"me"->"mes"
dan"plus minus"->"minus"
ke"plus m"->"m"
?05AB1E ,
166147141139135 byteTerlalu lama .. Akan mencoba golf turun dari sini.
-4 byte terima kasih kepada @Emigna .
-2 byte terima kasih kepada @ JoKing .
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
Lihat ini 05AB1E ujung tambang (bagian Cara menggunakan kamus? , Cara string kompres bukan bagian dari kamus? , Dan Cara kompres bilangan bulat besar? ) Untuk memahami bagaimana
“¡×€µ‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿áÓÁÏ“
,'…§
,'°¡
,.•4º»Ÿć'Rþн•
,Ž9o
, dan“‰´Øè„Æ€ººß“
pekerjaan.Contoh langkah demi langkah:
two hundred twenty two divided by two times minus fifty seven plus three hundred eighteen minus minus ten
two hundred twenty two divided two times minus fifty seven plus three hundred eighteen minus minus ten
2 hundred twenty 2 divided 2 times minus fifty 7 plus 3 hundred 8een minus minus 10
2 hundred weny 2 divided 2 imes minus fify 7 plus 3 hundred 8een minus minus 10
2 hundred weny 2 divided 2 imes minus fify 7 plus 3 hundred 8+10 minus minus 10
2 *100 weny 2 divided 2 imes minus fify 7 plus 3 *100 8+10 minus minus 10
2 *100 2y 2 divided 2 imes minus 5y 7 plus 3 *100 8+10 minus minus 10
2 *100 2 *10 2 divided 2 imes minus 5 *10 7 plus 3 *100 8+10 minus minus 10
["2 *100 2 *10 2 "," 2 "," "," 5 *10 7 "," 3 *100 8+10 "," "," 10"]
[["2","","*100","2","*10","2",""],["","","2",""],["",""],["","5","*10","7",""],["","3","","*100","8+10",""],["",""],["","10"]]
[["2","*100","2","*10","2"],["2"],[],["5","*10","7"],["3","*100","8+10"],[],["10"]]
[["2*100","2*10","2"],["2"],"",["5*10","7"],["3*100","8+10"],"",["10"]]
eval
Setiap Python :[[200,20,2],[2],"",[50,7],[300,18],"",[10]]
[222,2,"",57,318,"",10]
dividedimesminusplusminusminus
[" /"," *"," -"," +"," -"," -"]
222 /2 * -57 +318 - -10
eval
string, dan output secara implisit:-5999.0
sumber
sfk ,
572449423 byteIni semua bisa menjadi satu baris, tetapi untuk tujuan membacanya saya menggunakan baris baru, bukan spasi.
Cobalah online!
sumber