สะกดตัวเลขในภาษาฝรั่งเศส


23

มีความท้าทายในการแปลงตัวเลขเป็นตัวเลขในภาษาอังกฤษแต่นั่นก็ตรงไปตรงมาเกินไป รับตัวเลข 0-100 งานของคุณคือส่งออกตัวเลขที่เกี่ยวข้องในภาษาฝรั่งเศส ระบบตัวเลขของฝรั่งเศสมีตรรกะที่ซับซ้อนกว่าเมื่อเทียบกับภาษาอังกฤษ:

ตัวเลขจำนวน
---------------
 0 zéro (สังเกตสำเนียง)
 1 อัน
 2 deux
 3 ทรอยส์
 4 ห้อง
 5 cinq
 6 หก
 7 กันยายน
 8 ชั่วโมง
 9 neuf
10 dix
11 ครั้ง
12 douze
13 Treize
14 quatorze
15 quinze
16 ยึด
17 dix-sept (ตัวอักษรสิบเจ็ด)
18 dix-huit
19 dix-neuf
20 vingt
21 vingt et un (ไม่มีเครื่องหมายขีดคั่น)
22 vingt-deux
...
30 trente
...
40 การกักกัน
...
50 วินาที
...
60 soixante
...
70 soixante-dix (แท้จริงหกสิบสิบ)
71 soixante et onze
...
80 quatre-vingts (หมายเหตุ s; แท้จริงสี่ยี่สิบ)
81 quatre-vingt-un (สังเกตเครื่องหมายยัติภังค์)
...
90 quatre-vingt-dix
91 quatre-vingt-onze
...
99 quatre-vingt-dix-neuf (4 * 20 + 10 + 9)
ร้อยละ

สำหรับรายการทั้งหมดให้ทำตามhttp://quizlet.com/996950/ ( http://www.webcitation.org/6RNppaJx0 )

กฎ / คำอธิบายเพิ่มเติม

  • จะมีเครื่องหมายขีดคั่นระหว่างคำยกเว้นทุกครั้งเมื่อตัวเลขลงท้ายด้วย 1
  • เมื่อจำนวนปลายใน 1, คำet (ความหมายและ ) จะถูกเพิ่มก่อนที่จะยกเลิกหรือOnze (31 = ต่อไป)
  • อย่างไรก็ตาม 81 และ 91 ถูกจัดรูปแบบเหมือนกับตัวเลขอื่น ๆ (81 = quatre-vingt-un)
  • ที่ 60 ระบบจะเปลี่ยนจากฐาน 10 เป็นฐาน 20
  • มีความคลาดเคลื่อนเล็กน้อยทั่วทั้งเว็บเกี่ยวกับเรื่องนี้ อ้างถึงรายการที่ลิงก์ด้านบนสำหรับคำถาม
  • ช่องโหว่ที่ถูกห้ามโดยค่าเริ่มต้นจะไม่ได้รับอนุญาต
  • ไม่อนุญาตให้ใช้แหล่งข้อมูลภายนอกเช่นเว็บไซต์รวมถึงไลบรารี APIs ฟังก์ชั่นหรือสิ่งอื่นใดที่แปลงตัวเลขเป็นตัวเลขหรือแปลเป็นภาษาฝรั่งเศส
  • นี่คือดังนั้นคำตอบที่มีจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ
  • หากมีโปรดเชื่อมโยงไปยังคอมไพเลอร์ออนไลน์เพื่อให้ง่ายต่อการทดสอบรหัสของคุณ

อินพุต

  • การป้อนข้อมูลจะต้องนำมาจากอย่างไรก็ตามภาษาของคุณใช้การป้อนข้อมูล (STDIN, บรรทัดคำสั่ง ฯลฯ )
  • ข้อมูลที่ป้อนจะเป็นสตริงเดียวซึ่งประกอบด้วยตัวเลขจำนวนเต็มตั้งแต่ 0 ถึง 100 ที่ครอบคลุม (เป็นศูนย์ตัวเลือกนำหน้า)
  • คุณสามารถสันนิษฐานได้ว่าอินพุตจะมีรูปแบบที่ถูกต้องเสมอ

เอาท์พุต

  • ผลลัพธ์จะถูกส่งออกไปยังวิธีที่สะดวกที่สุดสำหรับภาษาของคุณ (STDOUT, กล่องโต้ตอบ, ฯลฯ )
  • เคสไม่สำคัญในเอาต์พุต

ตัวอย่าง

ทดสอบรหัสของคุณกับสิ่งเหล่านี้:

อินพุตเอาต์พุต
-------------
0 ซีโร่
18 dix-huit
51 ปีขึ้นไป
80 quatre-vingts
91 quatre-vingt-onze
99 quatre-vingt-dix-neuf

3
โปรดทราบว่าชาวเบลเยียมที่พูดภาษาฝรั่งเศสใช้ "septante", "octante" และ "nonante" แทน soixante-dix, quatre-vingts, quatre-vingt-dix มันควรจะใช้ในอาณานิคมเบลเยียมโบราณ
Emmanuel

8
+1 สำหรับอัจฉริยะการทำสิ่งนี้ในภาษาฝรั่งเศส ในฐานะที่เป็นเพื่อนร่วมงานชาวเยอรมันของฉันกล่าวว่า: "ชาวเยอรมันพูดตัวเลขไปข้างหลัง แต่เพื่อให้เข้าใจภาษาฝรั่งเศสได้คุณต้องมีเครื่องคิดเลข"
เลเวลริเวอร์เซนต์

1
ดูเหมือนว่าเซโรเป็นเพียงตัวเลขที่เน้นเสียงในช่วง 0-100 เท่านั้น นี่ไม่ใช่อักขระ ASCII มาตรฐาน ฉันคิดว่ารูปแบบใด ๆ (รหัสหน้า 437, UTF-8, ฯลฯ ) ที่สามารถส่งออกตัวละครนี้เป็นที่ยอมรับ
เลเวลริเวอร์เซนต์

1
@ มาร์ตินกฎของรัฐ "คุณสามารถสันนิษฐานว่าอินพุตจะมีรูปแบบที่ดีอยู่เสมอ" ดังนั้นอินพุต> 100 อาจส่งผลให้เกิดพฤติกรรมใด ๆ
NinjaBearMonkey

3
ไม่มีเหตุผลใดที่อยู่เบื้องหลังระบบฝรั่งเศส ฉันแน่ใจว่ามีข้อผิดพลาดใน 99% ของเช็คฝรั่งเศสซึ่งมีความซับซ้อนมากยิ่งขึ้นหลังจาก 100 เช็คอิน conjugaison ก็เป็นฝันร้ายเช่นกัน เชื่อฉันสิฉันเป็นคนฝรั่งเศส
Michael M.

คำตอบ:


7

JavaScript (ES6) 318 321

แก้ไขข้อผิดพลาด (จัดการ 0s นำ) และเล่นกอล์ฟมากขึ้น

เครดิตสำหรับเคล็ดลับกรณีอูฐ @ Core1024

ด้วยอินพุต / เอาต์พุตผ่านป๊อปอัพ

alert((n=prompt(),w='ZéroUnDeuxTroisQuatreCinqSixSeptHuitNeufDixOnzeDouzeTreizeQuatorzeQuinzeSeizeDix-septDix-huitDix-neufVingtTrenteQuaranteCinquanteSoixante'.match(/[A-Z][^A-Z]+/g),
u=n%10,s=u-1|n>80?d='-':' et ',n>99?'Cent':n<21?w[n|0]:n<70?w[18+n/10|0]+(u?s+w[u]:''):(n<80?w[24]:w[4]+d+w[20])+(n-80?s+w[n%20]:'s')))

เป็นฟังก์ชั่นที่ทดสอบได้

F=n=>(
  w='ZéroUnDeuxTroisQuatreCinqSixSeptHuitNeufDixOnzeDouzeTreizeQuatorzeQuinzeSeizeDix-septDix-huitDix-neufVingtTrenteQuaranteCinquanteSoixante'
  .match(/[A-Z][^A-Z]+/g),
  u=n%10,s=u-1|n>80?d='-':' et ',
  n>99?'Cent':
  n<21?w[n|0]:
  n<70?w[18+n/10|0]+(u?s+w[u]:''):
  (n<80?w[24]:w[4]+d+w[20])+(n-80?s+w[n%20]:'s')
)

ในการทดสอบในคอนโซล FireFox หรือ FireBug

for (i = 0; i < 100; console.log(r),i+= 10) 
  for (j=0, r=''; j < 10; j++)
    r+=(i+j)+':'+F(i+j+'')+", "; // specific: input is a string
F('100')

ทดสอบผลลัพธ์

0: Zéro, 1: Un, 2: Deux, 3: Trois, 4: Quatre, 5: Cinq, 6: หก, 7: Sept, 8: Huit, 9: Neuf,
10: Dix, 11: Onze, 12: Douze, 13: Treize, 14: Quatorze, 15: Quinze, 16: คว้า, 17: Dix-sept, 18: Dix-huit, 19: Dix-neuf,
20: Vingt, 21: Vingt et Un, 22: Vingt-Deux, 23: Vingt-Trois, 24: Vingt-Quatre, 25: Vingt-Cinat, 26: Vingt-Six, 27: Vingt-Sept, 28: Vingt- 28 กันยายน Huit, 29: Vingt-Neuf,
30: Trente, 31: Trente et Un, 32: Trente-Deux, 33: Trente-Trois, 34: Trente-Quatre, 35: Trente-Cinq, 36: Trente-Six, 37: Trente-Sept, 38: Trente-Sept, 38: Trente- Huit, 39: Trente-Neuf,
40: Quarante, 41: Quarante et Un, 42: Quarante-Deux, 43: Quarante-Trois, 44: Quarante-Quatre, 45: Quarante-Cinq, 46: Quarante-Six, 47: Quarante-Sept, 48: Quarante-Sept, 48: Quarante-Sept Huit, 49: Quarante-Neuf,
50: Cinquante, 51: Cinquante et Un, 52: Cinquante-Deux, 53: Cinquante-Trois, 54: Cinquante-Quatre, 55: Cinquante-Cinq, 56: Cinquante-Six, 57: Cinquante-Sept, 58: Cinquante- กันยายน Huit, 59: Cinquante-Neuf,
60: Soixante, 61: Soixante และ Un, 62: Soixante-Deux, 63: Soixante-Trois, 64: Soixante-Quatre, 65: Soixante-Cinq, 66: Soixante-Six, 67: Soixante-Sept, 68: Soixante-Sept, 68: Soixante- Huit, 69: Soixante-Neuf,
70: Soixante-Dix, 71: Soixante และ Onze, 72: Soixante-Douze, 73: Soixante-Treize, 74: Soixante-Quatorze, 75: Soixante-Quinze, 76: Soixante-Dix-sept, 77 78: Soixante-Dix-huit, 79: Soixante-Dix-neuf,
80: Quatre-Vingts, 81: Quatre-Vingt-Un, 82: Quatre-Vingt-Deux, 83: Quatre-Vingt-Trois, 84: Quatre-Vingt-Quq, 86: Quatre-Vingt-Unq Vingt-Six, 87: Quatre-Vingt-Sept, 88: Quatre-Vingt-Huit, 89: Quatre-Vingt-Neuf,
90: Quatre-Vingt-Dix, 91: Quatre-Vingt-Onze, 92: Quatre-Vingt-Douze, 93: Quatre-Vingt-Treize, 94: Quatre-Vingt-Quinze, 95: Quatre-Vingt-Seize, 97: Quatre-Vingt-Dix-sept, 98: Quatre-Vingt-Seize, 99: Quatre-Vingt-Seize, 99: Quatre-Vingt-Seize, 99: Quatre-Vingt-Seize, 99: Quatre-Vingt-Seize, 99: Quatre-Vingt-Seize, 99: Quatre-Vingt-Seize, 99: Quatre-Vingt-Seize, 99: Quatre-Vingt-Seize 
"เปอร์เซ็นต์"

2
เคล็ดลับเด็ด ๆ กับเคสอูฐ!
tomsmeding

@tomsmeding เจ๋งจริง ๆ เห็นได้ชัดว่าไม่ได้คิดค้นโดยฉัน (เพิ่มเครดิตในโพสต์)
edc65

@ edc65 คุณสนใจไหมถ้าฉันพยายามปรับปรุงคำตอบ Ruby ของฉันด้วย? ฉันไม่ได้เห็นว่าอนุญาตให้ใช้ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ได้เมื่อฉันเขียนฉัน ^^
Martin Ender

@ MartinBüttnerแน่นอนคุณสามารถ
edc65

6

Haskell, 390 ไบต์

b=(words"zéro un deux trois quatre cinq six sept huit neuf dix onze douze treize quatorze quinze seize vingt trente quarante cinquante soixante"!!)
a!b=a++"-"++b
f 0=b 0
f 71=f 60++" et onze"
f 80=f 4!b 17++"s"
f 100="cent"
f x|x<17=b x|x<20=b 10!b(x-10)|x>80=b 4!b 17!f(x-80)|m==1=f(x-1)++" et un"|x>60=f 60!f(x-60)|m==0=b(15+div x 10)|1<2=f(x-m)!f m where m=mod x 10
main=interact$f.read

Ungolfed

base :: Int -> String
--              0    1  2    3     4      5    6   7    8    9    10  11   12     13     14       15     16    17    18     19       20        21      
base i = words "zéro un deux trois quatre cinq six sept huit neuf dix onze douze  treize quatorze quinze seize vingt trente quarante cinquante soixante" !! i

hyphen :: String -> String -> String
a `hyphen` b = a ++ "-" ++ b

say :: Int -> String
say 0 = base 0
say 71 = say 60 ++ " et onze"
say 80 = say 4 `hyphen` base 17 ++ "s"
say 100 = "cent"
say x
  | x < 17 = base x
  | x < 20 = base 10 `hyphen` base (x - 10)
  | x > 80 = base 4 `hyphen` base 17 `hyphen` say (x - 80)
  | m == 1 = say (x - 1) ++ " et un"
  | x > 60 = say 60 `hyphen` say (x - 60)
  | m == 0 = base (div x 10 + 15)
  | otherwise = say (x - m) `hyphen` say m
  where m = mod x 10

main = putStr.say.read=<<getLine

ฟังก์ชั่นการเขียนโปรแกรมภาษาค่อนข้างเหมาะสมสำหรับงานนี้


มี upvote คุณเร็วกว่าฉัน คุณอาจต้องการแทนที่main=interact$f.readตัวละครหลักด้วยและบันทึกตัวละครสองสามตัว
gxtaillon

@gxtaillon interactใช่ฉันลืม Updated
เรย์

5

ทับทิม 333 ไบต์

l=['']+%w{un deux trois quatre cinq six sept huit neuf dix onze douze treize quatorze quinze seize}
d=%w{vingt trente quarante cinquante soixante _ quatre-vingt}+['']*2
n=gets.to_i
v=n%20
t=n%10
puts n<1?'zéro':n>99?'cent':d[(n<70?n:n-v)/10-2]+(n<21||t<1&&n<61?'':v<1??s:t==1&&n<80?' et ':?-)+(n>60||n<20?v<17?l[v]:'dix-'+l[t]:l[t])

ส่วนใหญ่เป็นเพียงสองตารางค้นหาและผู้ประกอบการที่ประกอบไปด้วยสามส่วนที่เข้ารหัสกฎแปลก ๆ ทั้งหมดและบอกคุณว่าจะใช้ตารางการค้นหาใดเมื่อใด แจ้งให้เราทราบหากคุณต้องการทราบข้อมูลเพิ่มเติม ;)


1
เกลียดที่จะเป็น nitpicky แต่80ควรส่งออก quatre-vingts ด้วย s ในตอนท้าย
NinjaBearMonkey

@hsl แก้ไขและย่อให้สั้น
Martin Ender

5

Python - 344 (348) (380) (445) (537)ไบต์

ขอบคุณ grc, Ray และ isaacg สำหรับความช่วยเหลือในการตีกอล์ฟ

รหัสประกอบด้วยคำนิยามพจนานุกรมเริ่มต้นและรายการความเข้าใจที่เติมในช่องว่างพร้อมกับทางแยกขององค์ประกอบของพจนานุกรม

คุณสามารถตรวจสอบรหัสออนไลน์ได้ที่repl.it

r=range
def f(a):b=a/60*10+10;d[a]=d[a-a%b]+(' et ','-')[a%10!=1or a>80]+d[a%b]
d=dict(zip(r(17)+r(20,70,10)+[80,100],'zéro un deux trois quatre cinq six sept huit neuf dix onze douze treize quatorze quinze seize vingt trente quarante cinquante soixante quatre-vingt cent'.split()))
[f(v)for v in r(100)if(v in d)<1]
d[80]+='s'
print d[input()]

ความพยายามครั้งล่าสุดของฉันในการเล่นกอล์ฟรหัสนี้คือการละทิ้งกระบวนการสร้างและด้วยการลดลงนั้นปรับแต่งฟังก์ชั่นเพื่อสร้างหมายเลขที่ต้องการได้ทันที อย่างไรก็ตามเนื่องจากตัวเลข 60 และ 80 ต้องการองค์ประกอบที่ไม่ได้คำนวณดังนั้นการต่อสู้จึงต้องสร้างฟังก์ชั่นดังกล่าวในขณะที่ลดรหัสลง


3
คุณสามารถใช้r=range, เคล็ดลับนี้สำหรับสายที่ 2 และ 3 และเพียงหนึ่งพื้นที่สำหรับการเยื้อง และคุณสามารถบันทึก 65 ไบต์ด้วยd=dict(zip(r(17)+r(20,70,10)+[80,100],'zéro un deux ... quatre-vingt cent'.split()))
grc

r=rangeเคล็ดลับผมได้ตระหนักถึง แต่ลืมที่จะเพิ่มมันเมื่อฉันเขียนแก้ไขครั้งที่ 1 ทุกสิ่งทุกอย่างนั้นค่อนข้างใหม่สำหรับฉันดังนั้นขอบคุณจึงเป็นระเบียบ แม้ว่าจะทราบว่ารหัสไม่ทำงานบน Python 3.x เว้นแต่ว่าprintคำสั่งจะถูกเปลี่ยนเป็นฟังก์ชั่นและrฟังก์ชั่นใน dict จะกลายเป็นรายการ
Doktoro Reichard

ในหลาม 2 คุณไม่จำเป็นต้องint(input()), input()เป็นพอ
Ray

1
เคล็ดลับเพิ่มเติม: ผมคิดว่าถ้าคุณใส่b=a/60*10+10ในf(a)แล้วคุณสามารถใช้a-a%bและa%bกุญแจพจนานุกรมของคุณ นอกจากนี้คุณไม่ต้องการพื้นที่ใน1 orและบรรทัดที่ 4 สามารถย่อให้เล็กลง[f(v)for v in r(100)if v not in d]ได้ ฉันยังไม่ได้ลองเลย
grc

1
if v not in d-> if(v in d)<1บันทึกอักขระ หากคุณใช้เครื่องหมายอัฒภาคแยกส่วนที่สองของฟังก์ชันคุณสามารถใส่ทั้งหมดในบรรทัดเดียว
isaacg

4

Python - 392 ไบต์

มีรายการที่มีหมายเลขฐานซึ่งใช้เพื่อสร้างหมายเลขอื่น ตรรกะการสร้างส่วนใหญ่อยู่ในรายการความเข้าใจในบรรทัดที่ 2 โดยใช้การทำดัชนีรายการสำหรับเงื่อนไข เมื่อสร้างรายการแล้วค้นหาหมายเลขที่ป้อนแล้วพิมพ์ออกมา

แก้ไข: ย่อจาก 426 bytes โดยใช้คำแนะนำของ grc

a='_un_deux_trois_quatre_cinq_six_sept_huit_neuf_dix_onze_douze_treize_quatorze_quinze_seize_dix-sept_dix-huit_dix-neut'.split('_')
a+=[[['vingt','trente'],['quarante','cinquante'],['soixante']*2,[a[4]+'-vingt']*2][b][c>9]+['','-',' et '][(c%[10,20][b>1]>0)+(c%10==1)*(b<3)]+a[c%[10,20][b>1]]for b in[0,1,2,3]for c in range(20)]
a[0]='zéro'
a[80]+='s'
a+=['cent']
print(a[int(input())])

1
คุณสามารถบันทึก 23 ไบต์ด้วยa='_un_deux_trois ... quinze_seize'.split('_')
grc

5
มีการพิมพ์ผิด: ciquante , nหายไป
อัล

จำนวนไบต์ของคุณคือ 420 จริงน้อยกว่าที่ระบุ
Ray

1

Python 3 (503 ไบต์)

บีบอัดตารางโดยใช้ bzip2 จากนั้นใช้การเข้ารหัส ascii85 เพื่อเก็บผลลัพธ์ ตารางคือ:

zéro
un
deux
trois
quatre
cinq
...
cent

วิธีการที่ไร้เดียงสามาก แต่ก็ไม่ได้แย่ขนาดนั้น

แข็งแรงเล่นกอล์ฟ

import bz2,base64 as B
print(bz2.decompress(B.a85decode('6<\\%_0gSqh;d"=$\\VU:fOjTBn&3p:MiVu^S+:%s4!Q6o8\\8%r<Bp,5\\LT&Q+19!OmJC@3n\'bD<]UHekq<8OP<;]9BZ,;>836X4<[@KJ,)FsD^8j9Q=]O]&/8\'rjSK&0Sh0W[ru0E0!!M-tL69NZF6N\'Lc#$Q=?S_P0+uEZP"[H;%Ucch??nYC76\'k<)isZIBqqOKi(,IHp""^8d/EqRpc_I<IRj[\'4KB`/."%5,"pjr&27q+&t.6J+ik=Jdd2A)j]\'jt5ts0>:sr9.@E>V0F9L?9r&pX\'E.NUP:r&?>\'*(gKmd;/1QkUb*1&JhfWiE7Kl,P,o1go+.3O&l))Y,$/PO)%"al^4H2,n-l\\PuM!W1rBB9t.,U>DhAs83burMn(%%-qHG<gr+^')).decode().split('\n')[int(input())])

Ungolfed

import bz2, base64
s = '6<\\%_0gSqh;d"=$\\VU:fOjTBn&3p:MiVu^S+:%s4!Q6o8\\8%r<Bp,5\\LT&Q+19!OmJC@3n\'bD<]UHekq<8OP<;]9BZ,;>836X4<[@KJ,)FsD^8j9Q=]O]&/8\'rjSK&0Sh0W[ru0E0!!M-tL69NZF6N\'Lc#$Q=?S_P0+uEZP"[H;%Ucch??nYC76\'k<)isZIBqqOKi(,IHp""^8d/EqRpc_I<IRj[\'4KB`/."%5,"pjr&27q+&t.6J+ik=Jdd2A)j]\'jt5ts0>:sr9.@E>V0F9L?9r&pX\'E.NUP:r&?>\'*(gKmd;/1QkUb*1&JhfWiE7Kl,P,o1go+.3O&l))Y,$/PO)%"al^4H2,n-l\\PuM!W1rBB9t.,U>DhAs83burMn(%%-qHG<gr+^'
table = bz2.decompress(base64.a85decode(s)).decode().split('\n')
num = int(input())
print(table[num])

โบนัส

คุณสามารถหาคำว่า "Vim" ในสตริงที่บีบอัดได้หรือไม่?


1
Sh0Wผมค่อนข้างชอบ ไม่พบ Vim และไม่สามารถทำได้
tomsmeding

@ tomsmeding ช่างน่าเสียดายจริงๆ! กลุ่มหายไปหลังจากการแก้ไขครั้งล่าสุดของฉัน
เรย์

1

ทุบตี, 456 440 421 408

ถือว่าอินพุตที่ถูกต้อง (จำนวนเต็มตั้งแต่ 0 ถึง 100 พร้อมเลขศูนย์นำหน้า)

v=`sed 's/0*//'<<<$1`
f=('' dix vingt trente quarante cinquante soixante soixante-dix quatre-vingts quatre-vingt-dix)
s=('' ' et un' -deux -trois -quatre -cinq -six -sept -huit -neuf)
o=${f[${v: -2:1}]}${s[${v: -1:1}]}
[ "${o:0:1}" = \  ]&&o=un
((v>99))&&o=cent
sed 's/^-//
s/s-/-/
s/s et /-/
s/dix et un/onze/
s/di.*ux/douze/
s/d.*s$/treize/
s/d.*re/quatorze/
s/d.*q/quinze/
s/di.*ix/seize/'<<<${o:-zéro}

1

JavaScript 459 (ไม่มีปลอกอูฐ)

@ edc65 ไม่สามารถรับสิ่งนี้จากคุณ ... ;)

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()])

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.