Ringkasan
Seorang guru disuruh menyiapkan soal kata untuk para siswa. Dia diberi daftar persamaan dan diminta untuk menuliskannya sebagai kata yang sesuai. Namun, dia sangat malas, jadi dia tidak menaruh banyak kreativitas di dalamnya. Sebaliknya, ia hanya menulisnya secara harfiah. Misalnya, ketika dia membaca 1+1
, dia menulis one plus one
, 47 * 2
akan berubah menjadi forty seven times two
, dan 56.2 / 7.4
akan menjadi fifty six point two divided by seven point four
.
Tulis beberapa kode untuk membantu guru malas ini.
Detail
- Angka mungkin termasuk titik desimal dan tanda negatif.
- Angka harus ditulis dalam skala pendek. (yaitu,
1,000,000,000
adalahone billion
) - Angka bisa mencapai 999.999.999.999.999.999 (
nine hundred ninety nine quadrillion...nine hundred ninety nine
). - Grup nol harus ditinggalkan. misalnya
1,000,000
adalahone million
tidakone million zero thousand zero hundred
. - Dapat ada banyak digit yang melewati titik desimal.
- Digit setelah titik desimal harus dicantumkan digit demi digit. misalnya
12.34
adalahtwelve point three four
tidaktwelve point thirty four
. - Dua angka selalu dipisahkan oleh operator.
- Operator yang valid adalah plus (
+
), minus (-
), times (*
), dan dibagi dengan (/
). - Tidak ada tanda kurung.
- Angka-angka seperti
1234
opsional dapat termasukand
dalam output mereka, seperti dalamone thousand two hundred *and* thirty four
. - Koma dan spasi putih pada input mungkin diabaikan.
Contohnya
Input: 24 + 65
Keluaran:twenty four plus sixty five
Input: 3.33333 - 0
Keluaran:three point three three three three three minus zero
Input: 3.6 * 18.18 / 999.0
Keluaran:three point six times eighteen point one eight divided by nine hundred ninety nine point zero
Input: 1-1
Keluaran:one minus one
Input: 1+-1
Keluaran:one plus negative one
Input: 1,000,000,000 + 0.2
Keluaran:one billion plus zero point two
Input: 123,000,456,789,012,345.6789
Keluaran:one hundred twenty three quadrillion four hundred fifty six billion seven hundred eighty nine million twelve thousand three hundred forty five point six seven eight nine
Input: -4.3 * 7
Keluaran:negative four point three times seven
Input: -1-1--1
Keluaran:negative one minus one minus negative one
123,456,789,012,345.6789
pada contoh? Itu harus mencakup banyak kasus uji.minus
bukannegative
?/
adaover
dan angka negatif adalahminus
, sehingga perlu manipulasi.Jawaban:
JavaScript (ES6),
552532 byteMonster kotor ini datang langsung dari kedalaman neraka golf-kode.
Mengharapkan string input tanpa spasi.
Cobalah online!
sumber
btoa`ÍêèÒ‰ÞÒÜ(ÒØkyí¢êô~+ÞÒȱÒǯz}ŠmÒx§{K^ŸG¥z÷§ÒÜ–÷´¶«ÓGâM4z(!ÓKpz}-†*ô~Šô~'ôÓG¢‚4¶.±©ÝÒmÒÚôªæ�¯IÞ�«b½í)–ë4š)î³Kb™ë4v+âuçu×Vò`.replace(111,' ')
.Perl 6 ,
434 401 387359 byteCobalah online!
Pasti ruang untuk perbaikan di sini. Saya mengatakan itu, tetapi saya terus memperhatikan kasus tepi yang belum saya tangani
:(
. Mengasumsikan bahwa input memiliki operator yang dipisahkan oleh spasi dan negatif dari angka tidak dipisahkan.Penjelasan:
sumber
Ruby + Swift 4,
283279270 bytesCobalah online!
Saya pasti tergila-gila untuk mengusulkan solusi Frankenstein seperti itu, tetapi di satu sisi, sangat menggoda untuk menggunakan fungsi bawaan Swift untuk tugas ini, dan di sisi lain, memproses string dengan Regexes di Swift tampaknya menjadi bencana golf.
Oleh karena itu, saya memutuskan untuk melakukan pemrosesan string dasar di Ruby, tetapi untuk menjabarkan angka, saya menyimpannya dalam file sumber Swift, menjalankan Swift dalam perintah shell, dan mengumpulkan hasilnya.
Saya ternyata formatter angka "spellOut" Swift melakukan hampir semua yang kita butuhkan, kecuali memasukkan tanda hubung yang tidak perlu untuk angka dua digit, seperti pada
twenty-two
. Bahkan, bahkan output floating point dalam formatinteger part point digit digit...
yang baik, tetapi inilah peringatan - tidak ada ketepatan tak terbatas, dan dengan angka yang cukup besar atau banyak angka desimal, hasilnya salah. Karena itu, saya harus memisahkan bagian bilangan bulat dan pecahan dan untuk memberi makan fraksi digit demi digit.sumber
sfk , 853 byte
Cobalah online!
Membutuhkan operator dan angka dipisahkan oleh setidaknya satu karakter spasi.
sumber
Bersih ,
766... 687 byteCobalah online!
Mengharapkan string tanpa spasi putih.
sumber
05AB1E ,
315295282276 byteMengambil input tanpa spasi.
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 mengapa:
'¢…
is"negative"
;'¡×
adalah"zero"
;“†ìˆÈŒšï¿Ÿ¯¥Š“
adalah"four five six seven eight nine"
;'…§
adalah"teen"
;…€µ‚•„í
adalah"one two three"
;…—¿áÓÁÏ
adalah"ten eleven twelve"
;'°¡
adalah"hundred"
;'¾ß
adalah"ion"
;…¡›‡È±°
adalah"billion million thousand"
;'…®
adalah"point"
; dan“‰´Øè„ƺߓ
adalah"plus minus times divided"
..•6b©•
adalah"thir"
;.•4º»Ÿć'Rþн•
adalah"twenthirforfif"
; dan.•cG3₅¦„¥F•
adalah"quadrilltrill"
.ŽH$
adalah4433
.sumber
Python 2 ,
790774 byteCobalah online!
Begitu banyak praktik buruk. Ini hampir menyakitkan untuk menulis ....
Mengharapkan string non-unicode tanpa spasi sebagai input.
Penjelasan:
Saya mengurangi sekitar 150 byte saat menulis penjelasan. Jangan pernah mengatakan bahwa mengomentari / meninjau kode Anda tidak membantu!
sumber