Dalam bahasa Cina, angka ditulis sebagai berikut:
1 一
2 二
3 三
4 四
5 五
6 六
7 七
8 八
9 九
10 十
Untuk angka di atas 10, dinyatakan sebagai jumlah puluhan dan jumlah. Jika hanya ada satu, Anda tidak perlu mengatakannya secara eksplisit, dan jika tidak ada, Anda tidak perlu menuliskan apa pun setelah:
11 十一
24 二十四
83 八十三
90 九十
Untuk angka di atas 100, Anda menggunakan logika yang sama, tetapi dengan karakter 百
. Namun kali ini, jika hanya ada seratus, Anda masih perlu menuliskannya, dan jika tidak ada puluhan, Anda perlu mengatakannya 零
.
100 一百
231 二百三十一
803 八百零三
999 九百九十九
Tugas Anda adalah mengubah angka-angka Cina ini menjadi angka-angka Arab. Diberi angka N dalam bahasa Cina ( 一
(1) <= N <= 九百九十九
(999)), ubah menjadi angka Arab.
Ingat, ini adalah kode-golf , jadi kode dengan jumlah byte terkecil menang.
503
dan380
?503 -> 五百三
dan380 -> 三百八十
. Juga, Anda mengatakan untuk puluhan ituyou do not need to explicitly say one
. Apakah itu berarti tidak masalah jika kita melakukannya?五百零三
karena tidak ada puluhan (saya pikir)Jawaban:
JavaScript (ES6), 112 byte
Digit 一 - 九 dikonversi menjadi desimal dan disimpan
d
, sementara 十 dan 百 gandakan digit terakhir dengan masing-masing 10 atau 100 dan akumulasikan dalamn
.零
diabaikan secara efektif, karenad
sudah nol ketika ditemui.sumber
Perl, 110 byte
Kode 98 byte + 12 untuk
-plC -Mutf8
.Perl tidak membenci unicode. Mudah-mudahan saya tidak melewatkan kasus tepi, saya punya masalah dengan angka seperti
二百十
tetapi saya sudah mengatasinya sekarang!Pemakaian
sumber
PHP, 225 Bytes
sumber
strtr
tidak aman multibyte. Ini bisa menghemat 23 byte. Tapi Anda bisa menggunakan0+
alih-alih00?
, menyimpan satu byte atau Anda dapat a) ganti dengana
danaa
bukannya10
dan100
, b) gunakana+
bukan100?
di regex dan c)a
bukan0
untuksubstr_count
(-4).Java 7,
236233229 byteTidak digabungkan & kode uji:
Coba di sini.
Keluaran:
sumber
C #,
197210 byteHitungan byte salah sebelumnya karena penyandian diabaikan ...
Pengkodean Big5
Solusi rekursif yang mengisi input jika 10-19 untuk pemrosesan yang lebih mudah, kemudian memproses dari kiri 2 karakter sekaligus.
Tidak disatukan
sumber
Python 3, 128 byte
Menyimpan 2 + 3 byte berkat peristiwa dan 2 untuk mengganti
(d>9)+(d>10)
denganmax(d-9,0)
Tidak Disatukan:
Jawaban awal
n
akan menjadi angka terakhir dana
merupakan angka sebelumnya.sumber
find
mengembalikan -1 dan itu lebih kecil dari9
itun
dana
tidak tersentuh.[1,a][a>0]*10 -> 10*a**(a>0)
menghemat dua byte :)[0,d][d<=9] -> d*(d<10)
menghemat tiga byte juga!