Ada tantangan untuk mengubah angka menjadi angka dalam bahasa Inggris , tetapi itu terlalu mudah. Diberi angka 0–100, tugas Anda adalah menampilkan angka yang sesuai dalam bahasa Prancis. Sistem angka Perancis memiliki logika yang lebih kompleks di belakangnya dibandingkan dengan sistem bahasa Inggris:
Angka --------------- 0 zéro (perhatikan aksennya) 1 un 2 deux 3 trois 4 quatre 5 cinq 6 enam 7 sept 8 huit 9 neuf 10 dix 11 kali 12 kali lipat 13 treize 14 quatorze 15 quinze 16 rebut 17 dix-sept (harfiah sepuluh tujuh) 18 dix-huit 19 dix-neuf 20 vingt 21 vingt et un (tanpa tanda hubung) 22 vingt-deux ... 30 trente ... 40 quarante ... 50 cinquante ... 60 soixante ... 70 soixante-dix (harfiah enam puluh sepuluh) 71 soixante et onze ... 80 quatre-vingts (perhatikan huruf s; harfiah empat puluhan) 81 quatre-vingt-un (perhatikan tanda hubungnya) ... 90 quatre-vingt-dix 91 quatre-vingt-onze ... 99 quatre-vingt-dix-neuf (4 * 20 + 10 + 9) 100 sen
Untuk daftar lengkap, ikuti http://quizlet.com/996950/ ( http://www.webcitation.org/6RNppaJx0 ).
Aturan / penjelasan lebih lanjut
- Akan selalu ada tanda hubung antara kata-kata KECUALI ketika angka berakhir dengan 1.
- Ketika angka berakhir pada 1, kata et (makna dan ) ditambahkan sebelum un atau onze . (31 = trente et un)
- Namun, 81 dan 91 diformat sama dengan angka lainnya. (81 = quatre-vingt-un)
- Pada usia 60, sistem beralih dari basis 10 ke basis 20.
- Ada beberapa perbedaan kecil di web tentang ini; lihat daftar yang ditautkan di atas untuk pertanyaan.
- Celah yang dilarang secara default tidak diizinkan.
- Dilarang menggunakan sumber eksternal seperti situs web, serta perpustakaan, API, fungsi, atau sejenisnya yang mengubah angka menjadi angka atau menerjemahkan ke bahasa Prancis.
- Ini adalah kode-golf , jadi jawabannya dengan byte paling sedikit menang.
- Jika tersedia, harap tautkan ke kompiler online untuk memudahkan pengujian kode Anda.
Memasukkan
- Input harus diambil dari bahasa yang Anda gunakan. (STDIN, baris perintah, dll.)
- Input akan berupa string tunggal, yang terdiri dari seluruh angka antara 0 dan 100 inklusif (memimpin nol opsional).
- Anda dapat berasumsi bahwa input akan selalu terbentuk dengan baik.
Keluaran
- Hasilnya harus berupa output ke metode yang paling nyaman untuk bahasa Anda. (STDOUT, kotak dialog, dll.)
- Kasus tidak menjadi masalah dalam output.
Contohnya
Uji kode Anda terhadap ini:
Input output ------------- 0 zéro 18 dix-huit 51 cinquante et un 80 quatre-vingts 91 quatre-vingt-onze 99 quatre-vingt-dix-neuf
code-golf
number
kolmogorov-complexity
NinjaBearMonkey
sumber
sumber
Jawaban:
JavaScript (ES6) 318
321Edit perbaikan Bug (mengelola 0s terkemuka) dan pegolf lainnya
Penghargaan untuk trik kasus unta @ Core1024
Dengan input / output melalui popup
Sebagai fungsi yang dapat diuji
Untuk menguji In FireFox console atau FireBug
Output Uji
sumber
Haskell, 390 byte
Tidak disatukan
Bahasa pemrograman fungsional cukup cocok untuk pekerjaan ini.
sumber
main=interact$f.read
dan menyimpan beberapa karakter.interact
. Diperbarui.Ruby, 333 byte
Sebagian besar hanya dua tabel pencarian dan sekelompok operator ternary yang menyandikan semua aturan aneh dan memberi tahu Anda tabel pencarian yang harus digunakan kapan. Beri tahu saya jika Anda ingin tahu lebih banyak. ;)
sumber
80
harus menampilkan quatre-vingts, dengan huruf s pada akhirnya.Python - 344
(348) (380) (445) (537)byteTerima kasih kepada grc, Ray dan isaacg atas bantuan mereka dalam proses bermain golf.
Kode terdiri dari definisi kamus awal dan pemahaman daftar yang mengisi kekosongan dengan persimpangan elemen kamus.
Anda dapat memeriksa kode secara online di repl.it
Upaya terakhir saya untuk bermain golf kode ini adalah untuk mengabaikan proses pembuatan dan dengan pengurangan itu memperbaiki fungsi untuk hanya menghasilkan nomor yang diminta di tempat. Namun, karena angka 60 dan 80-an membutuhkan elemen yang tidak dihitung, perjuangannya adalah menciptakan fungsi seperti itu sambil mengurangi kode.
sumber
r=range
, trik ini untuk baris 2 & 3, dan hanya satu ruang untuk lekukan. Dan Anda dapat menghemat 65 byte dengand=dict(zip(r(17)+r(20,70,10)+[80,100],'zéro un deux ... quatre-vingt cent'.split()))
r=range
trick aku menyadari, tapi lupa untuk menambahkannya ketika saya menulis revisi 1. Segala sesuatu yang lain relatif baru bagi saya, jadi terima kasih sudah teratur. Namun catatan, kode tersebut tidak berfungsi pada Python 3.x kecualiprint
pernyataan tersebut diubah menjadi fungsi danr
fungsi dalam dict diubah menjadi daftar.int(input())
,input()
sudah cukup.b=a/60*10+10
dif(a)
maka Anda bisa menggunakana-a%b
dana%b
untuk kunci kamus Anda. Juga, Anda tidak perlu ruang dalam1 or
, dan baris ke-4 dapat disingkat[f(v)for v in r(100)if v not in d]
. Saya belum mencoba semua ini.if v not in d
->if(v in d)<1
menyimpan karakter. Jika Anda titik koma memisahkan dua bagian dari fungsi Anda, Anda bisa meletakkan semuanya pada satu baris.Python - 392 byte
Ini memiliki daftar dengan angka dasar yang digunakan untuk menghasilkan angka lainnya. Sebagian besar logika generasi ada dalam pemahaman daftar pada baris 2, menggunakan pengindeksan daftar untuk persyaratan. Setelah daftar dihasilkan, kemudian mencari nomor yang dimasukkan dan mencetaknya.
Sunting: Dipendekkan dari 426 byte menggunakan ujung grc.
sumber
a='_un_deux_trois ... quinze_seize'.split('_')
Python 3, (503 bytes)
Kompres tabel menggunakan bzip2 dan kemudian gunakan pengkodean ascii85 untuk menyimpan hasilnya. Tabelnya adalah:
Metode yang sangat naif, tetapi tidak seburuk itu.
Golf
Tidak disatukan
Bonus
Bisakah Anda menemukan kata "Vim" di string yang dikompresi?
sumber
Sh0W
. Tidak dapat menemukan Vim, juga tidak bisa.Pesta,
456 440 421408Mengasumsikan input yang valid (bilangan bulat dari 0 hingga 100 dengan angka nol terkemuka mana pun).
sumber
JavaScript 459 (Tanpa Casing Unta)
@ edc65 tidak dapat mengambilnya dari Anda ...;)
A="0un0deux0trois0quatre0cinq0six0sept0huit0neuf0dix0onze0douze0treize0quatorze0quinze0seize0dix-sept0dix-huit0dix-neuf".split(0);S="soixante";Q=A[4]+"-vingt";T=10;V=20;N=59;for(b=5;1<b--;)for(c=V;c--;)X=b*V+c,A[X]=[,["vingt","trente"],["quarante","cinquante"],[S,S],[Q,Q]][b][c/T|0]+(X%T?X>N?X%V==T?"-dix":"":"":"")+(1>X%T?"":(1==X%(X>N?V:T)|71==X)&81!=X?" et ":"-")+(X>N&X%V==T?"-dix":A[c%(X>N?V:T)]);A[0]="zéro";A[80]+="s";A[100]="cent";alert(A[prompt()])
sumber