2-tuple
3-liste/tableau
4-glouton
Difficulté **
É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'
.128203.128013.129300Eg[îr) ;/»(DloU4,I6b=xa+5utM}P7Ve{-h0TmnCkXçê:Sé«q.èy1cdz32à8_w?vLpf%*O9RA]is050*0J0D0z110p120j0)0p0z12120x010D110^01040605120C0P0P0z0h0%040X0q0p0C1j0q0Q0j020z0P0^0k0j0~0J1t0h0!0C0J12050l1q1s1u1w1o0^04051#1U1(0l1#1o0*110?1b1d1f1h1d0Q0e0C0z0e0J0L0^0%0D0M1D0j0M110e0M0p270M0D1m05160w0p0J1;1e1g0126282a280D2g2i2e0D0h1$221b1z120^0z0Q1h0-012k1?010_180J0Q1H0J2e2C2E2J2m2M2i2P0P2R040b0j0G0h0q0^0q12111C1E142A0h0h0J0)2:1U2T0Q1$0l222 2w2y2x2f0*2V1@110Q2O2-2e1.1:1c2l393b0Q0q3f2e0^2^1$2}2 3s1p2D1E3h2K3l0h1t0p2e0z252^0_1h030:0:0)3m0J2a3k0q0L0(3T1m0j0(1U0z3t3w1n3v2U3y2m3A3C3E3G0J3I013K3M3O3Q3c3T0L2H040j0-3Z3#2E3%2}38013,0z3D1$3F0M3H3J3L3N143_3l3{0,3W0,412|3$1o453*1h484a054c4e3=4g3^3a3`3U0s3W0s4p1V4r3(3x1=3+0q3B493.4d3:4f3@4i4E4k3U0B3W0B4K3s4s3w464w4U4A3?4h3P4!3S3U0v3W0v4*4M4t4P4v4R3-4b3/3;4=4D3R3{0H3W0H4~434,3)5147534T554V574C4Z5a3U0/3W0/5f2~5h4O3i5k4S4x4z4W4B4Y4@5s0L0}3W0}5x444-4u5C544y564X4?4j4_3T0N1m0(0N5P5z4.5l5E5W5H5Y4^3{0(0(5%3Y0l3!4q5g4N5,5D4:5G585r4F3T3}0(405{425y5 5S4/5n4;5q5J660(4m046m5*6e5j6g5V5o5X596l4H6o4J6b5}6d505B6t5F5p5I5Z5?4%6o4)6C4L5~6F3z5-626J5;5K0(4{6o4}6Q4+6r6G6V6h636j6L3U0(5c6o5e6(4 5R6s6,6u6i6K5=6;5u6o5w6_6S6{6+616-6X6x4#3T5M6o5O766E786U7a6~6.705K0-5$047s6q6T4Q7n6I6w657e0-5^7u5`5|6R7k5i795U7A5:7d5!0-3}7S7w7l7y7N5/646k7D6n0-4o7j5Q7L7m7Y6v7P7C7R6z0-6B7I3u1+3q1U3f320*2y375S4?3e1/1$3p0J3r3$6D1$4?8a2U110*1h3L2}5?3.8h8j7q6l2I2Z0J8p6Y8r2 5|7x4v1m0I0 0@0d0r0~0X8c0j6*2K0q1m0x8K8M2m1l040f8c1o7J8f1E8o018k3w3{3}5V8$6/713|8s2Q8v7Q8*2e6b0j8{8L8A018U0n8c8S1h0P115%0N98928~8U0t8R8~123}021Q0q0D0k0E9i0C9k0k9a7W1h8U0i9d8Z8Y3u458-0:8l3U6n8,8i8%8q7e4m0j8t8?7;4l8_3!8|8}9t8 1m918Z9301951m0}999!9b1m9x3s9V7,2m9g1m9o9q0R9n9j9l9s9;9u1m9w8X9~8#9I8(2E3{6z9H9P7#5!4H9N8=9J8w7eaa8`8|9#90a4469%040B9*9A9W9c9e9W9?049^9l0oaD9r9+axa19.4MaI8ga69D8)4$8naPaj5!4%ag2!ac6:0L6N419Uao9Yaq5Sas0sav8b9,04aL439:5A2KaBaG0RaF9|aHaw9 9X04a29yaq9C9E0L6#abai8@4`8;aZbe9Qbg8y3~ana=9Zb2a`2mas5(5)aNbsa0a?azb3a|b00RaGa,5j9va@6dbx0jb9aR0L6?bd8.5K5caY8ubjad5b9Sbn8{a*04bqa;9Was9)bH5Bay8Za_46bD9p9l0TbFb0b/2KbJa3bMbOa85taTa!8/5ubWc75K73a(boaJb)b~bt96atbwbr46b;9/9#b^9q0@bGbM5Sc0b7c2aPba7gbS9K5!5McabYa#cDamb%bpci94cka/cPb4bK3~cr9hb00Tcub}cwbIaKc1cnc30Q5?7tcEaVc.bhbXbT6lc/cMb?cxa+c%5Bbucmb+b3cp3$c|5jcsb`cvcnc}b5cV9zd3a58pba5@c6cJ8/dlcIc^7edlbma)cOc 2Kb-cTd5a^cX9@b00u0Tdbdhcoc)czc+cBbP69dmdr5!dQdqcF5?8+c{b(b*439#as6Pdcc(bAb=dDaCb00IdId$a=b66)cAdjdP9G3F9Cc;6;9M9Odn6Z9GdZdwd*d0cRdA9-bBby01d90k0ud;c$e9b dLd_dNd{c43Taad~aUbfetc?cb6yb#dvcgd#2~d%ck5`em8Tedd-9fcYb_eid=eGd@dfb8dOes0(a%eveAdsaXe3dS6Mb#b(10c*dJc,5?bce#e46l4{dVe03Tbc6bdgd?4-e;6;bRe@e*f4eze^dsbRe eWerc-72dRdWfhe{ex0(cd6C8~0S1m140_ee4.0_1m2*1t3aecchdx3+1m0?490J0C0hfC0i0We/f1aOff5?cDf6fj7ff9f7fXducfb30Qfy1S0C0p160Dfv5S8O048QeNaAeP9qeS3%d`9Jba7sfie|g0flbk3|c`9Tf$effr040_4Rf/6s1m2O1j0JfLfEbzcVd76G1m120%0P0w1z0Jgf5B0q0;1mfBf@f%8C8E8G8IfCfOdMe:eXfg3|7Fc:ex7EfYfWgUf#9UcN9Wgb0;262igy3zfGfIfKg*2mf;020e9lf?cq8~f(04gi11gkgKfPeTf2gO8*8+fVg22Hg4bZ3U7SeCgZhf9#g{fH2ig.gEeff;0Lg^d6hhgh0QgjglepgNfShcd}bNewg57(gVg2e6g8hfeDgF042^1qf,0zf.hm46f;0AhqdCg`grgtgvg)gMfQdif~bP7@g1gTafe)gWalhJgp2Kgb2^0DfK0Qg/8BhNf*hQhShxd$0l8e1)7|0l7~1U0D80id35300z2h897}861!8!462^0P0:0_0z0S0J0:0M6n1M1O1Q1S0jgL7`1,131/460z0*0P1D2/11243agd1m1!iLiNiP2:0L1j0D2u040r1E490e4R2/0M2!0j0e0p0q1B1D1)3%1#0|1E3p0q0)0$2=2=iu0U242E490q1`2j0z0C0j0Z1L2O0*jf2=iO0Q2Pg~0j0miF0jje0j2afJ0j2=2^0Q0*2^0j2O0j3piR0h2/0YjwiEjh0^110$0)iEjs2i1a0^1A1a0e0h2E14120tbN0)11j*240Y0)jK0DjFi jKi.0DjMjWjg0jhjfJ0h1ajViEjY0Cj!j$jC1S0#i{1-iK5S1^1`1|1~0D0J0yj?2o292b2dip5S2X2O2Q1m0a0j0d0yjY110)hRiR0Q1T9!888!6c8d3Oipe;0-3V55d 8@kS5^ha6LkX2I7/7!k!kT410R0h0Ygk0j0C3b1b0M0z0gk=2=kFj$2`0$jE0?8h2j15jw02030,0}0k0z0_0_2_kl0h0j0.jw3FfHjKij2i0jk-hPf-f0h2fRh+a8kSh6hCe$3SlyhGkW8:7Ze*lDbm0Gi^lg0)k@iD9N0qgujE1B181112ln2j0WltkQh4kShBkV9Ql)lEl,0L9Mk%lIl:he8{0O2Ej?lQ1dj g-lgli3N0Q0?gk1jlg1Sj?1q0^0YjKk12ji^0j0Y0efIlh1b2j3llTl!l$5 kR0LeulAfalCmvl.bZkSafl=dWmDl^gZ0R1DkFj{3blg0pl6l80kj:j=fK2jfz17k`2jjTlRmqjujflqf+lsfelwc-kSe!mxl?e(ahm@k$6 c;m;mI9U1yk72w17jEm$mp0wjElil~k0fKmmm3m50hm7msi7kPi9ilibiniJ3g5jiMjniQ240;1u0Q3a0eiV1%iXnui!i$i(iB1uiDkd1%040Ii^1a0zm50+jHfJ0D0L0V2w2jlV2a12jMk;jzkE2:jpjE058e8D8F8H0X0x0j0Kbv0N0W0j010Ej*9)n}019`01j*aun}n 0oo70ja/o4a~2I0#oj0F1Ui8n80j0l1n0c0j0R3P3F3Fgd0Q2`kH0QjMojkcoooq060 2sg}1Dj*140^0ClXjHjZg~fK1ang2.1Dj)jz2EjX21231Ej}1.oA1Dn.iE121Dj?2D0h3NfKk7o#kIjw004RjD2j0*o$jNiD0pbN190jo;hun mU2/122ImhlYlXlX0#0j0X11j nQ0jn3fH182inU1qlgk;2joXkHoSo{2Ej,2Om!jHo(oMmn9N00m9jH1ejN1b1epmi*n+o-jon4mopP12o?pS1p2w1D0e04p0o.0Y2|p,1_3~n~0po 0hp1o|1a2ip6pao=mij;pfjN1ao_jYiE0n1c0Yj*nc0h0ipOow0C0)pAbN1I4R16oz0JpmnPo{k=2,fK2^nU2D1an$lXk/jToK0j0P0Y223Ojum50)jz00jen!q02Emk1}12pm0up7iu1Bk:1jn%k/qzpzi+0pi-j=i:2ji?i^0D24qop(0hqmh|jEp:jok.kc1+f|7~8Yr9nqnEiZpDiTf;iW5Sntre1Di#2/i(0EqM232=1ui/qL1jnLr7ioi~nVq)je1fppj00)0Y14m81EqFlYpcj(n+l1oYo}fJ1c8hg~joiElb3ajzmo2jqDq5jKjE2=gvqmlon:qOkgqX1{1}1 0%252b2q2c2Sg#1mg%2N92nk1404pmrBj$0^0^3PlojG3:ldl|1RiFnMf+3%2akOk{5jkhr_1~20r}2pkrs1b3bu0H0s75g_9Wf;0l0lh 9$eI98d2i68ejFp(mihj0CjMlir=ss5Bsukjr{sykq2rsBefbus68ej*0)p%j?lo9|rYj?2=l~3fpk24rV2a1.pIp22j9#ru221tkl0y1m090n0(090tsE0/090i8Ko@h^2mt9i:hRkmtetgtisPtm8KaHsq1osqs!m#str^s(sxkpr kseH5%tksMf;0`8KtqcQ97a:sRkPsTj?0YsWsY8L4?46s%r`tLr~sAkt5jastR9!s789s=s@pThOklr%mnqJ0P0Vi;s rTr6tD1Usokenrs$tJt/pL1EtMt=9#kv8t1m0Guj92kL4NkNtGl%fS0,k*h78@uAkYh;c;uEm{7puHk*fps204ftsM0QfxhNlSmZfCeFt?gq04qhfMiGaMeqm/l:8:kUhDbZuAh9uGuDlGmFuLdYh@hsi1lrhRtS8PsMehf{ms9Bh4uAl*u/6Lv9mBvcl@lHdWvdgYtW01gbgdhwhrhZg|hug~vph)dKd,sHhMgsgugwtSgB04gDvzefg{n=gI8Jgmb4u(5~f}a7c-uAmwl+u:mAkZ5=vVuJ7c9Qv$vkhLvJ1ms`giv1f=uRg,hkvv2~vlsJsLhT6fhthvh1uyu+uAm=vXvfm^bie*w5v%7BvYa%c{v,4.v@k1v;hXv`u}u$v~5jtTv?vsw1h(luh*vTu,e?m?vibbvev#wFvhuLe~h@wiv u~m,v0wrgz1mhWwuvBh$gxwS8N1m0{wuv/hutV9#0)7F032AozhR0Y2P2:u2k|0zk~hOw2mtv8bQh.v)x1v!5auAbVu_u@fcu|fqf)r1h~w!fFwPi3w~t{2 uuno0?r8np3frdnzw^3lklnC0^xunvc-nH2#0dj?0z3p0$1a0=nM1#0@iEg}gk1ambmdoUk20jmhmjje0ymmt8q?tbtv04tf0Bty98tAb=1200pem5pcjGrNl{k:k=0w1ujE23jK0+o=ml3a1.1Qx}1Q00180jq(j?0Pm,1kjxmP2jiu2`k1w:jT0hoCpRlgx(rvtutdx,tx0ttztn8Zr6iI1#0G1ujF0y1Nqbvltsx*yAtf090qng3_0K09tc0D0K0I0u0F0Fy!kmy$0Ry/y(0uy)x;9/2^3p0Y12git78~yRyztw0vti0,0NtlyF9/k|pTyxtaz1yByVyX4EyZy#y%y)y+z8d6pQyif,yk11jMtpzctttctwthyDx:zo43yHxrxqra15171904.
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)