Ăcrire un nombre en chiffres romains
On souhaite dans cet exercice Ă©crire des nombres entiers strictement positifs en chiffres romains.
Cette notation a Ă©voluĂ© au fil des siĂšcles. On se propose ici d'utiliser la mĂ©thode fixĂ©e au Moyen-Ăge en se limitant aux entiers infĂ©rieurs Ă \(5\,000\).
1. Symboles utilisés
Les symboles valides sont les suivants :
Valeur |
Symbole |
\(1\) |
I |
\(5\) |
V |
\(10\) |
X |
\(50\) |
L |
\(100\) |
C |
\(500\) |
D |
\(1\,000\) |
M |
Ainsi, MMXII
(\(2012\)) est une Ă©criture valide, AM
non.
2. Ordre d'Ă©criture
La représentation d'un nombre en chiffres romains se lit de gauche à droite. Dans le cas de base, on y rencontre des symboles de valeurs décroissantes.
Ainsi, XVI
est l'Ă©criture valide du nombre \(16\), VIX
non.
La rÚgle n°5 autorise toutefois certaines entorses à cette rÚgle.
3. Notation additive
Dans le cas de base, les valeurs des symboles sont additionnées.
Ainsi LXXIII
représente \(50+10+10+1+1+1=73\).
4. Répétitions
Le symbole M
peut ĂȘtre rĂ©pĂ©tĂ© autant de fois que nĂ©cessaire.
Tous les autres symboles ne peuvent pas ĂȘtre rĂ©pĂ©tĂ©s plus de 3 fois (inclus).
Ainsi, MMMMVI
(\(4\,006\)) est une Ă©criture valide, MMMMIIIIII
non.
Cette rĂšgle a Ă©tĂ© fixĂ©e au Moyen-Ăge. L'Ă©criture MMMMIIIIII
était valide dans l'Antiquité !
5. Notation soustractive
Afin d'éviter les répétitions interdites, on s'autorise des entorses à la rÚgle n°2.
On peut ainsi faire précéder les symboles :
X
et V
par un unique symbole I
,
C
et L
par un unique symbole X
,
M
et D
par un unique symbole C
.
Dans ces cas, la valeur qui précÚde est soustraite à la valeur précédée.
On a donc les correspondances suivantes :
Symboles |
Valeurs |
IV |
\(4\) |
IX |
\(9\) |
XL |
\(40\) |
... |
... |
Ainsi, MCMXLI
représente \(1\,000+900+40+1=1\,941\).
La fonction pour convertir
Ăcrire la fonction romain
qui prend en argument un nombre entier strictement positif valeur
et renvoie son Ă©criture en chiffres romains.
Exemples
Python Console Session>>> romain(4)
'IV'
>>> romain(5)
'V'
>>> romain(6)
'VI'
>>> romain(5042)
'MMMMMXLII'
.129300.128203.128013A_4:L2-.SwV3z%/]+7bç?pPiqI{oĂȘM1Xtl(9Ăź ;=vTm6u8Rs*ĂšCfrO}Ă geUEh[cDĂ©0»5a,«nkydx)05100,0J0`0A0K0Y0O0;0K0`0Y0Y0Q010J0A0y010406050Y0V0T0T0`0%0 040l0E0K0V1j0E0}0O020`0T0y0P0O0X0,1t0%0B0V0,0Y050r1q1s1u1w1o0y04051#1U1(0r1#1o100A0R1b1d1f1h1d0}0+0V0`0+0,0j0y0 0J0/1D0O0/0A0+0/0K270/0J1m05160v0K0,1;1e1g0126282a280J2g2i2e0J0%1$221b1z0Y0y0`0}1h0i012k1?010$180,0}1H0,2e2C2E2J2m2M2i2P0T2R040c0O0z0%0E0y0E0Y0A1C1E142A0%0%0,0;2:1U2T0}1$0r222 2w2y2x2f102V1@0A0}2O2-2e1.1:1c2l393b0}0E3f2e0y2^1$2}2 3s1p2D1E3h2K3l0%1t0K2e0`252^0$1h030e0e0;3m0,2a3k0E0j0H3T1m0O0H1U0`3t3w1n3v2U3y2m3A3C3E3G0,3I013K3M3O3Q3c3T0j2H040O0i3Z3#2E3%2}38013,0`3D1$3F0/3H3J3L3N143_3l3{0o3W0o412|3$1o453*1h484a054c4e3=4g3^3a3`3U0f3W0f4p1V4r3(3x1=3+0E3B493.4d3:4f3@4i4E4k3U0_3W0_4K3s4s3w464w4U4A3?4h3P4!3S3U0U3W0U4*4M4t4P4v4R3-4b3/3;4=4D3R3{0u3W0u4~434,3)5147534T554V574C4Z5a3U0W3W0W5f2~5h4O3i5k4S4x4z4W4B4Y4@5s0j0M3W0M5x444-4u5C544y564X4?4j4_3T0@1m0H0@5P5z4.5l5E5W5H5Y4^3{0H0H5%3Y0r3!4q5g4N5,5D4:5G585r4F3T3}0H405{425y5 5S4/5n4;5q5J660H4m046m5*6e5j6g5V5o5X596l4H6o4J6b5}6d505B6t5F5p5I5Z5?4%6o4)6C4L5~6F3z5-626J5;5K0H4{6o4}6Q4+6r6G6V6h636j6L3U0H5c6o5e6(4 5R6s6,6u6i6K5=6;5u6o5w6_6S6{6+616-6X6x4#3T5M6o5O766E786U7a6~6.705K0i5$047s6q6T4Q7n6I6w657e0i5^7u5`5|6R7k5i795U7A5:7d5!0i3}7S7w7l7y7N5/646k7D6n0i4o7j5Q7L7m7Y6v7P7C7R6z0i6B7I3u1+3q1U3f32102y375S4?3e1/1$3p0,3r3$6D1$4?8a2U0A101h3L2}5?3.8h8j7q6l2I2Z0,8p6Y8r2 5|7x4v1m0n0d0h0.0-0X0l8c0O6*2K0E1m0Q8K8M2m1l040:8c1o7J8f1E8o018k3w3{3}5V8$6/713|8s2Q8v7Q8*2e6b0O8{8L8A018U0L8c8S1h0T0A5%0@98928~8U0{8R8~0Y3}021Q0E0J0P0G9i0V9k0P9a7W1h8U129d8Z8Y3u458-0e8l3U6n8,8i8%8q7e4m0O8t8?7;4l8_3!8|8}9t8 1m918Z9301951m0M999!9b1m9x3s9V7,2m9g1m9o9q0#9n9j9l9s9;9u1m9w8X9~8#9I8(2E3{6z9H9P7#5!4H9N8=9J8w7eaa8`8|9#90a4469%040_9*9A9W9c9e9W9?049^9l0=aD9r9+axa19.4MaI8ga69D8)4$8naPaj5!4%ag2!ac6:0j6N419Uao9Yaq5Sas0fav8b9,04aL439:5A2KaBaG0#aF9|aHaw9 9X04a29yaq9C9E0j6#abai8@4`8;aZbe9Qbg8y3~ana=9Zb2a`2mas5(5)aNbsa0a?azb3a|b00#aGa,5j9va@6dbx0Ob9aR0j6?bd8.5K5caY8ubjad5b9Sbn8{a*04bqa;9Was9)bH5Bay8Za_46bD9p9l0IbFb0b/2KbJa3bMbOa85taTa!8/5ubWc75K73a(boaJb)b~bt96atbwbr46b;9/9#b^9q0hbGbM5Sc0b7c2aPba7gbS9K5!5McabYa#cDamb%bpci94cka/cPb4bK3~cr9hb00Icub}cwbIaKc1cnc30}5?7tcEaVc.bhbXbT6lc/cMb?cxa+c%5Bbucmb+b3cp3$c|5jcsb`cvcnc}b5cV9zd3a58pba5@c6cJ8/dlcIc^7edlbma)cOc 2Kb-cTd5a^cX9@b00C0Idbdhcoc)czc+cBbP69dmdr5!dQdqcF5?8+c{b(b*439#as6Pdcc(bAb=dDaCb00ndId$a=b66)cAdjdP9G3F9Cc;6;9M9Odn6Z9GdZdwd*d0cRdA9-bBby01d90P0Cd;c$e9b dLd_dNd{c43Taad~aUbfetc?cb6yb#dvcgd#2~d%ck5`em8Tedd-9fcYb_eid=eGd@dfb8dOes0Ha%eveAdsaXe3dS6Mb#b(0sc*dJc,5?bce#e46l4{dVe03Tbc6bdgd?4-e;6;bRe@e*f4eze^dsbRe eWerc-72dRdWfhe{ex0Hcd6C8~0~1m140$cT0m3WcT0}0$1m2*1t3aecchdx3+1m0R490,0V0%fF120ge/f1aOff5?cDf6fj7ff9f7f!ducfb30}fB1S0V0K160Jee468O048QeNaAeP9qeS3%d`9Jba7sfie|g3flbk3|c`9Tf)effr040$4Rf=6f1m2O1j0,fOfHbzcVd76G1m0Y0 0T0v1z0,gi5j0Efw04fEf`f*8C8E8G8IfFfRdMe:eXfg3|7Fc:ex7Ef#fZgXf(9UcN9Wge0m262igBgt04fK2ifNg-8N9@0+9lf_cq8~f+04gl0AgngNfSeTf2gR8*8+fYg52Hg7bZ3U7SeCg$hi9#g~g:fMgog|9Wf@0jg{d6hkgk0}gmhoaMeqg1bP7(g4gWe2ahf$hEg#higc4.f,1qf/0`f;gHeff@0thtdCg}gugwgyg,gPfTdihCes7@hFg8h.hda#h.hL9#ge2^0JfN0}g?fI042^hQf:h42 8e1)7|0r7~1U0J80ic35300`2h897}861!8!462^0T0e0$0`0~0,0e0/6n1M1O1Q1S0OgO7`1,131/460`100T1D2/0A243agg1m1!iKiMiO2:0j1j0J2u040-1E490+4R2/0/2!0O0+0K0E1B1D1)3%1#0(1E3p0E0;0!2=2=it0w242E490E1`2j0`0V0O0|1L2O10je2=iN0}2Ph10O0^iE0Ojd0O2afM0O2=2^0}102^0O2O0O3piQ0%2/0?jviDjg0y0A0!0;iDjr2i1a0y1A1a0+0%2E140Y0{bN0;0Aj)240?0;jJ0JjEi~jJi-0JjLjVjf0OhmfN1ajUiDjX0VjZj#jB1S0ki`1-iJ5S1^1`1|1~0J0,11j=2o292b2dio5S2X2O2Q1m0b0O0.11jX0A0;hSiQ0}1T9!888!6c8d3Oioe;0i3V55d 8@kQ5^h=5=kV2I7/7!6LkZbm0#0%0?gn0O0V3b1b0/0`0Nk:2=kDj#2`0!jD0R8h2j15jv02030o0M0P0`0$0$2_kj0%0O0*jv3FfKjJii2i0Ok+i3hSf0h5fUh,c-kQh9bNew9QlwgYc;lB7Ze*lBbm0zi@le0;k=iC9N0EgxjD1B180A0Yll2j0glrkOh7kQd}lye$3Sl%lCkU0j9Mk#lGl/hh8{0S2Ej=lO1dj~fLfNlf2A0}0Rgn1jle1Sj=1q0y0?jJhn2ji@0O0?0+fLm1jSlPlRlYl!5 kP0jeul)fal+mtl-lAmylFdWkQalgbhi0#1DkDj`3ble0Kl4l60Pj/j;fN2jfC17k^2jmm3lmojtjelof.f:mq9Bl$a$h/bZkQe(hImDm/mClDm/hL9U1yk52w17jDm!lQ0vjDlgl}j lelg3Nm3m50A0%mq0ri77{ikiaimiI3g5jiLjmiP240m1u0}3a0+iU1%iWntiZi#i%iA1uiCkb1%040ni@1a0`m40pjGfM0J0j0F2w2jlT2a0YjLk/jykC2:jojD058e8D8F8H0l0Q0O0Dbv0@0g0O010Gj)9)n|019`01j)aun|n~0=o60Oa/o3a~2I0koi0)1Ui7n60O0r1n0a0O0#3P3F3Fgg0}2`kF0}jLoikaonop060d2sh01Dj)140y0VlVjGjYh1k0j~gn2.1Dj(jy2EjW21231Ej|1.oz1Dn-iD0Y1Dj=2D0%3NfNk5o!kGjv004RjC2j10o#jMiC0KbN190Oo:hxn~mS2/0Y2ImglWlVlV0k0O0l0Aj~nP0On1fK182inT1qlek/2jm40%oXi~jYjtoyh1jnp12j2022oL1b2j0}00m8jG1ejM1b1epli)n*o,jnn2pQpS0Yo=pV1p2w1D0+04o o-0?2|p/1_3~n}0Ko~0%p0o{1a2ip5p9o;mhj:pejM1ao^jXiD0L1c0?j)na129N00ov0V0;pzbN1I4R16oy0,plnOo`k:2,fN2^nT2D1an#lVk-jSoJ0O0T0?pN2=nR2_jyqn1Bi2lh1_kh0Ypl0Cp6it1Bk.1jn$k-qCpyi*0Ki,j;i/2ji=i@0J24qrp+0%qph|jDp?jnk,ka1+f 7~8YranpnDiYkFbNfzf@iV5Snsrf1Di!2/i%0GqP23qRq@qO1jnKr8ini}nUq*jd1fpoi 0;0?14m71EqIlWpbj%n*k pD1afM1c8hpI3bnQ2M2;pQpLpVpdjD2=gyqplmn/3O46kf1{1}1 0 252b2q2c2Sg(1mg*2N92njkNplrCj#0y0y3PlmjF3:lbl{1RiEnLf.3%2akMk_5jr@khr`r|2pkps0b3bu0u0f75hpb3f@0r0rh cQ97a:d$s6143~pT0?g:0VjLlgr;sq5Bssr_20svko2rsyefbus58ej)0;p*j=lm9|pIj=2=l}3fpj24rW2a1.2OmYgs2K1ui.1tkj111m090L0H090{sB0W09128Ko?t42mt622t8kktbtdtf980@tj8KaHso1ososXmZsr2Ekgs#r{knr~kqeH5%thsJ01f@0q8KtnsK6otws-kNjEp+mhsTsV8L4?r?tHr^1~s$tLsxkr5jastQ9!sO89s/s;pWi2kjjymZ15u20T0Fi:s|pDr7tB1UsmkcnqsZt.stpMo(s%tMs*46kt8t1m0zo%i_kI7|7`3ui7m-fV0okRgV9QuEkWe)dWuIk!6 c;uMbmh_fs3:fvfxgp47fAi1lQmXfFeFt@g.nafPiFhAgQuD8:kSlzbZuEhcuKuP8:m`8@u^l@tW47hPm*hStRf@hY2~v1ehf~m,h6u:l(kTuHl?kX5auEl:uOu~l?h^fq1mgghzhZ9Wg~h0h2uXdBv9hv04gvgxgzv6gEgGsEefg~n;gL8JvB1mu-5~g0a7c-uEmuvhu@mBu`vpafl;uLmym}hNgj04s@glv68PtRhll vvvD8~sGsIhUhOg hxh1v|f hBvXl/m|uGv$m?bie*uEaXv+u{a%c{eDgIg/v{v@f^v_fJwqw15StTwtw3hyi5mrh7uEe?mvwgbbmzv$e`wjvpe~mGg$vEi2v4hTvMf?1mhXwzvGh%gAwwgC1m0Zwzv=hxtV9#0;7F03m2mK0?2P2:u3pXk{0Jk}1SwCuCluwaf5wHv,bVv(vibVwNxbv0uSi115h}wzwThRwVu.sNnkkJil0Rr9no3frenyw{3lkjnB0yxxnuc-nG2#0.j=0`3p0!1a0xnL1#0hiDvzpCp90VmbmdoUmgmijd11m19#tpi/hSts04tc0_tv98tyb=0Y00pdm4pbjFrOl`k.k:0v1ujD23jJ0po;mk3a1.1Qy01Q00180Oq)j=0Tm*1kjwmN2jit2`hnw@gnoBpUlex*rwx-tax/tu0{twx@3sr7iH1#0z1ujE111Nqev1x+tryCtc090EpB3_0D09t90J0D0n0C0)0)y$kky(0#y;y*0Cy+yHd62^3p0?0Ygl2jyzt7yBtt0Utf0o0@titkb=k`pWz1tqz3yDyXyZ4Ey#y%y)y+y-za9/pTylf/yn0AjLtmzex,t9ttteyFx?zq3$yJxuxtrb15171904.
Astuce (1)
Penser Ă un algorithme glouton.
Astuce (2)
On pourra utiliser la liste VALEURS = [..., (4, "IV"), ...]
aprÚs l'avoir complétée.
Astuce (3)
On pourra utiliser la liste VALEURS = [(1000, "M"), (900, "CM"), (500, "D"), ...]
aprÚs l'avoir complétée.
# Tests
(insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)