Saya ingin mengambil nomor dan tahu berapa banyak suku kata di dalamnya, ketika berbicara dalam bahasa Inggris.
Mari kita batasi ini pada bilangan bulat positif yang kurang dari seribu.
Saya orang Inggris, jadi kami akan mengikuti ratusan kolom dengan tanda 'dan' ketika ada angka yang tidak nol setelahnya.
Tantangan
- Tulis beberapa kode yang akan menerima bilangan bulat positif lebih rendah dari 1000 dan menampilkan jumlah suku kata dengan kata-kata yang mewakili angka itu dalam bahasa Inggris Inggris.
- Ini TIDAK perlu menghasilkan kata-kata untuk mewakili angka, hanya jumlah suku kata yang dikandungnya.
- Ini kode golf, upaya untuk mencapai ini dalam byte paling sedikit.
- Gunakan bahasa apa pun yang Anda suka.
- Celah standar dilarang.
Uji Kasus
| N | In words | Syllables |
| 1 | one | 1 |
| 2 | two | 1 |
| 3 | three | 1 |
| 4 | four | 1 |
| 5 | five | 1 |
| 6 | six | 1 |
| 7 | sev-en | 2 |
| 8 | eight | 1 |
| 9 | nine | 1 |
| 10 | ten | 1 |
| 11 | el-ev-en | 3 |
| 12 | twelve | 1 |
| 13 | thir-teen | 2 |
| 14 | four-teen | 2 |
| 17 | se-ven-teen | 3 |
| 20 | twen-ty | 2 |
| 21 | twen-ty one | 3 |
| 42 | four-ty two | 3 |
| 73 | sev-en-ty three | 4 |
| 77 | sev-en-ty sev-en | 5 |
| 100 | one hund-red | 3 |
| 110 | one hund-red and ten | 5 |
| 111 | one hund-red and el-ev-en | 7 |
| 555 | five hund-red and fif-ty five | 7 |
| 700 | sev-en hund-red | 4 |
| 770 | sev-en hund-red and sev-en-ty | 8 |
| 777 | sev-en hund-red and sev-en-ty sev-en | 10 |
| 999 | nine hund-red and nine-ty nine | 7 |
code-golf
natural-language
AJFaraday
sumber
sumber
Jawaban:
Python 2 ,
84837467 byteTerima kasih kepada @xnor untuk bermain golf
916 byte!Cobalah online!
Python 2 , 79 byte
Mudah, tetapi lebih lama.
Cobalah online!
sumber
-10
ke~9
dan beralih sekitar bit terakhir untuk+(0<n%100!=12)-(n%100!=11)
, tapi itu masih lebih lama dari solusi baru Anda.lambda n:4*(n>99)+`n`.count('7')+cmp(n/10%10,1)-n%~9/9-min(n%100,13)%12/~9
min(n%100,13)%12/~9
sebenarnya bisa membantu dengan pendekatan yang saya coba untuk jawaban Jelly saya juga.Perl 5
-p
, 53 byteCobalah online!
Bagaimana
sumber
JavaScript (ES6), 89 byte
Cobalah online!
sumber
Python 2 ,
112108 byteCobalah online!
-4 byte, terima kasih untuk Shaggy
sumber
[2]*7
bagian Anda akan gagal17
, karena seharusnya 3 bukannya 2 (sev-en-teen
).JavaScript,
8684 bytePort tweak dari solusi Python TFeld .
Cobalah online
2 byte disimpan berkat Arnauld
sumber
Bahasa Wolfram
101115 BytesPenjelasan
(mengganti
StringSplit
untuks
)IntegerName
membuat angka dalam bahasa Inggris Amerika (yaitu tanpa "dan" termasuk dalam angka lebih besar dari 100.) Misalnya777-> "seven hundred seventy-seven
.StringSplit[IntegerName@#,"-"]
menghapus tanda hubung dalam rendering.StringSplit/@
membagi rendering menjadi kata-kata.Join@@
meninggalkan daftar kata-kata sederhana, tanpa daftar yang disematkan (dalam hal tanda hubung muncul).WordData[#,"Hyphenation"]
memecah satu kata menjadi suku kata.Join@@
meninggalkan daftar suku kata sederhana di semua kata.Length
menghitung suku kata+Boole[#>100&&#~Mod~100!=0]
menambah1
jumlah suku kata untuk angka-angka yang lebih besar dari 100 (karena penambahan "dan" yang digunakan dalam render Inggris Inggris), tidak termasuk kelipatan integral dari 100.sumber
Java 11,
105102 byteBerisi banyak karakter yang tidak patut dicetak.
-3 byte terima kasih @ OlivierGrégoire .
Cobalah online.
Penjelasan:
sumber
.split("7",-1)
ke.split("7",9)
, dan-6+(n>99?4:0)
ke-(n>99?2:6)
.-(n>99?2:6)
, tetapi sekarang sudah sangat jelas bahwa Anda telah menunjukkannya. Dan-1
untuk9
karena keterbatasan input-ukuran saya tidak akan memikirkan, jadi terima kasih!05AB1E ,
3431 byteCobalah secara online atau verifikasi semua
[1,999]
kasus uji .Penjelasan:
Dengan semua cek yang disebutkan akan menghasilkan 1 untuk kebenaran dan 0 untuk falsey.
sumber
I
(input) alih-alihX
(input mod 100) ketika memeriksa apakah lebih besar dari 20 untuk +1ty
.>
(periksa apakah input lebih besar dari 100) telah diganti dengan@
(periksa apakah input lebih besar atau sama dengan 100). Mungkin saya harus memeriksa beberapa test case lebih hati-hati sebelum memposting .. Maaf tentang itu ..Arang ,
3931 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Hitung penyesuaian jumlah suku kata dan hasilkan sebagai string.
Mulailah dengan mengubah setiap digit bukan nol ke 1 dan kemudian mendekodekan sebagai basis 2. Ini memberikan jawaban yang benar untuk sebagian besar input.
Tambahkan 1 untuk masing-masing
7
.Ambil string literal
10000000001021111111
dan tambahkan 80 nol, kemudian secara siklikal indeks dengan input, dan kurangi angka itu.sumber
Jelly ,
282523 byteCobalah online!
Bagaimana itu bekerja
sumber
PHP ,
190158145141137 byteCobalah online!
Port solusi Kevin Cruijssen (sayangnya ia tidak memiliki keringkasan yang sama dalam PHP :))
-
3245 terima kasih untuk Shaggy!-3 Terima kasih kepada Kevin Crujissen!
sumber
>99
dan>19
bukannya>=100
dan>=20
.05AB1E , 24 byte
Jawaban jeli Port of Dennis
Cobalah online! atau sebagai Test suite
Penjelasan
sumber
05AB1E , 26 byte
Port of @Neil 's Charcoal answer , jadi pastikan untuk menghapusnya juga jika Anda suka jawaban ini!
Cobalah secara online atau verifikasi semua kasus uji .
Bilangan bulat terkompresi
•Ž¢Γ}Þ±6u•
dapat juga•8JA•b2TÌǝ
untuk byte-count yang sama.Penjelasan:
Lihat ini 05AB1E jawaban saya (bagian Cara kompres bilangan bulat besar? ) Untuk memahami mengapa
•Ž¢Γ}Þ±6u•
adalah10000000001021111111
.sumber