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.129300îC;M=wSd*-gnh.+%uerv6zx,é9X«OVtèàk5bE]}l[f:D431A(aR?Ip/)omçq 7ê2i»yc8Us_LPT0{050k0u0H0!0?0Q0|0/0_0Q0!0|0|0h010H0?0(010406050|0t0,0,0!0v0^040j0+0Q0t1j0+0o0/020!0,0(0f0/0#0u1t0v0.0t0u0|050)1q1s1u1w1o0(04051#1U1(0)1#1o0k0?0w1b1d1f1h1d0o0n0t0!0n0u0m0(0^0H0p1D0/0p0?0n0p0Q270p0H1m05160M0Q0u1;1e1g0126282a280H2g2i2e0H0v1$221b1z0|0(0!0o1h0=012k1?010S180u0o1H0u2e2C2E2J2m2M2i2P0,2R040b0/0 0v0+0(0+0|0?1C1E142A0v0v0u0_2:1U2T0o1$0)222 2w2y2x2f0k2V1@0?0o2O2-2e1.1:1c2l393b0o0+3f2e0(2^1$2}2 3s1p2D1E3h2K3l0v1t0Q2e0!252^0S1h030}0}0_3m0u2a3k0+0m0X3T1m0/0X1U0!3t3w1n3v2U3y2m3A3C3E3G0u3I013K3M3O3Q3c3T0m2H040/0=3Z3#2E3%2}38013,0!3D1$3F0p3H3J3L3N143_3l3{0W3W0W412|3$1o453*1h484a054c4e3=4g3^3a3`3U0V3W0V4p1V4r3(3x1=3+0+3B493.4d3:4f3@4i4E4k3U0L3W0L4K3s4s3w464w4U4A3?4h3P4!3S3U0x3W0x4*4M4t4P4v4R3-4b3/3;4=4D3R3{0:3W0:4~434,3)5147534T554V574C4Z5a3U0`3W0`5f2~5h4O3i5k4S4x4z4W4B4Y4@5s0m0C3W0C5x444-4u5C544y564X4?4j4_3T111m0X115P5z4.5l5E5W5H5Y4^3{0X0X5%3Y0)3!4q5g4N5,5D4:5G585r4F3T3}0X405{425y5 5S4/5n4;5q5J660X4m046m5*6e5j6g5V5o5X596l4H6o4J6b5}6d505B6t5F5p5I5Z5?4%6o4)6C4L5~6F3z5-626J5;5K0X4{6o4}6Q4+6r6G6V6h636j6L3U0X5c6o5e6(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+3q1U3f320k2y375S4?3e1/1$3p0u3r3$6D1$4?8a2U0?0k1h3L2}5?3.8h8j7q6l2I2Z0u8p6Y8r2 5|7x4v1m0G0Y0~0N0{0#0j8c0/6*2K0+1m0h8K8M2m1l040R8c1o7J8f1E8o018k3w3{3}5V8$6/713|8s2Q8v7Q8*2e6b0/8{8L8A018U0Z8c8S1h0,0?5%1198928~8U0A8R8~0|3}021Q0+0H0f0g9i0t9k0f9a7W1h8U0*9d8Z8Y3u458-0}8l3U6n8,8i8%8q7e4m0/8t8?7;4l8_3!8|8}9t8 1m918Z9301951m0C999!9b1m9x3s9V7,2m9g1m9o9q0e9n9j9l9s9;9u1m9w8X9~8#9I8(2E3{6z9H9P7#5!4H9N8=9J8w7eaa8`8|9#90a4469%040L9*9A9W9c9e9W9?049^9l0UaD9r9+axa19.4MaI8ga69D8)4$8naPaj5!4%ag2!ac6:0m6N419Uao9Yaq5Sas0Vav8b9,04aL439:5A2KaBaG0eaF9|aHaw9 9X04a29yaq9C9E0m6#abai8@4`8;aZbe9Qbg8y3~ana=9Zb2a`2mas5(5)aNbsa0a?azb3a|b00eaGa,5j9va@6dbx0/b9aR0m6?bd8.5K5caY8ubjad5b9Sbn8{a*04bqa;9Was9)bH5Bay8Za_46bD9p9l0DbFb0b/2KbJa3bMbOa85taTa!8/5ubWc75K73a(boaJb)b~bt96atbwbr46b;9/9#b^9q0~bGbM5Sc0b7c2aPba7gbS9K5!5McabYa#cDamb%bpci94cka/cPb4bK3~cr9hb00Dcub}cwbIaKc1cnc30o5?7tcEaVc.bhbXbT6lc/cMb?cxa+c%5Bbucmb+b3cp3$c|5jcsb`cvcnc}b5cV9zd3a58pba5@c6cJ8/dlcIc^7edlbma)cOc 2Kb-cTd5a^cX9@b00%0Ddbdhcoc)czc+cBbP69dmdr5!dQdqcF5?8+c{b(b*439#as6Pdcc(bAb=dDaCb00GdId$a=b66)cAdjdP9G3F9Cc;6;9M9Odn6Z9GdZdwd*d0cRdA9-bBby01d90f0%d;c$e9b dLd_dNd{c43Taad~aUbfetc?cb6yb#dvcgd#2~d%ck5`em8Tedd-9fcYb_eid=eGd@dfb8dOes0Xa%eveAdsaXe3dS6Mb#b(0Oc*dJc,5?bce#e46l4{dVe03Tbc6bdgd?4-e;6;bRe@e*f4eze^dsbRe eWerc-72dRdWfhe{ex0Xcd6C8~0K1m140ScT0i3WcT0o0S1m2*1t3aecchdx3+1m0w490u0t0vfF0*0Te/f1aOff5?cDf6fj7ff9f7f!ducfb30ofB1S0t0Q160Hee468O048QeNaAeP9qeS3%d`9Jba7sfie|g3flbk3|c`9Tf)effr040S4Rf=6f1m2O1j0ufOfHbzcVd76G1m0|0^0,0M1z0ugi5j0+fw04fEf`f*8C8E8G8IfFfRdMe:eXfg3|7Fc:ex7Ef#fZgXf(9UcN9Wge0i262igBgt04fK2ifNg-8N9@0n9lf_cq8~f+04gl0?gngNfSeTf2gR8*8+fYg52Hg7bZ3U7SeCg$hi9#g~g:fMgog|9Wf@0mg{d6hkgk0ogmhoaMeqg1bP7(g4gWe2ahf$hEg#higc4.f,1qf/0!f;gHeff@0rhtdCg}gugwgyg,gPfTdihCes7@hFg8h.hda#h.hL9#ge2^0HfN0og?fI042^hQf:h42 8e1)7|0)7~1U0H80ic35300!2h897}861!8!462^0,0}0S0!0K0u0}0p6n1M1O1Q1S0/gO7`1,131/460!0k0,1D2/0?243agg1m1!iKiMiO2:0m1j0H2u040{1E490n4R2/0p2!0/0n0Q0+1B1D1)3%1#0F1E3p0+0_0I2=2=it0-242E490+1`2j0!0t0/0E1L2O0kje2=iN0o2Ph10/0@iE0/jd0/2afM0/2=2^0o0k2^0/2O0/3piQ0v2/0BjviDjg0(0?0I0_iDjr2i1a0(1A1a0n0v2E140|0AbN0_0?j)240B0_jJ0HjEi~jJi-0HjLjVjf0/hmfN1ajUiDjX0tjZj#jB1S0qi`1-iJ5S1^1`1|1~0H0u0zj=2o292b2dio5S2X2O2Q1m0a0/0N0zjX0?0_hSiQ0o1T9!888!6c8d3Oioe;0=3V55d 8@kQ5^h=5=kV2I7/7!6LkZbm0e0v0Bgn0/0t3b1b0p0!0dk:2=kDj#2`0IjD0w8h2j15jv02030W0C0f0!0S0S2_kj0v0/0Jjv3FfKjJii2i0/k+i3hSf0h5fUh,c-kQh9bNew9QlwgYc;lB7Ze*lBbm0 i@le0_k=iC9N0+gxjD1B180?0|ll2j0TlrkOh7kQd}lye$3Sl%lCkU0m9Mk#lGl/hh8{102Ej=lO1dj~fLfNlf2A0o0wgn1jle1Sj=1q0(0BjJhn2ji@0/0B0nfLm1jSlPlRlYl!5 kP0meul)fal+mtl-lAmylFdWkQalgbhi0e1DkDj`3ble0Ql4l60fj/j;fN2jfC17k^2jmm3lmojtjelof.f:mq9Bl$a$h/bZkQe(hImDm/mClDm/hL9U1yk52w17jDm!lQ0MjDlgl}j lelg3Nm3m50?0vmq0)i77{ikiaimiI3g5jiLjmiP240i1u0o3a0niU1%iWntiZi#i%iA1uiCkb1%040Gi@1a0!m40yjGfM0H0m0;2w2jlT2a0|jLk/jykC2:jojD058e8D8F8H0j0h0/12bv110T0/010gj)9)n|019`01j)aun|n~0Uo60/a/o3a~2I0qoi0P1Ui7n60/0)1n0c0/0e3P3F3Fgg0o2`kF0ojLoikaonop060Y2sh01Dj)140(0tlVjGjYh1k0j~gn2.1Dj(jy2EjW21231Ej|1.oz1Dn-iD0|1Dj=2D0v3NfNk5o!kGjv004RjC2j0ko#jMiC0QbN190/o:hxn~mS2/0|2ImglWlVlV0q0/0j0?j~nP0/n1fK182inT1qlek/2jm40voXi~jYjtoyh1jnp12j2022oL1b2j0o00m8jG1ejM1b1epli)n*o,jnn2pQpS0|o=pV1p2w1D0n04o o-0B2|p/1_3~n}0Qo~0vp0o{1a2ip5p9o;mhj:pejM1ao^jXiD0Z1c0Bj)na0*9N00ov0t0_pzbN1I4R16oy0uplnOo`k:2,fN2^nT2D1an#lVk-jSoJ0/0,0BpN2=nR2_jyqn1Bi2lh1_kh0|pl0%p6it1Bk.1jn$k-qCpyi*0Qi,j;i/2ji=i@0H24qrp+0vqph|jDp?jnk,ka1+f 7~8YranpnDiYkFbNfzf@iV5Snsrf1Di!2/i%0gqP23qRq@qO1jnKr8ini}nUq*jd1fpoi 0_0B14m71EqIlWpbj%n*k pD1afM1c8hpI3bnQ2M2;pQpLpVpdjD2=gyqplmn/3O46kf1{1}1 0^252b2q2c2Sg(1mg*2N92njkNplrCj#0(0(3PlmjF3:lbl{1RiEnLf.3%2akMk_5jr@khr`r|2pkps0b3bu0:0V75hpb3f@0)0)h cQ97a:d$s6143~pT0Bg:0tjLlgr;sq5Bssr_20svko2rsyefbus58ej)0_p*j=lm9|pIj=2=l}3fpj24rW2a1.2OmYgs2K1ui.1tkj0z1m090Z0X090AsB0`090*8Ko?t42mt622t8kktbtdtf9811tj8KaHso1ososXmZsr2Ekgs#r{knr~kqeH5%thsJ01f@0s8KtnsK6otws-kNjEp+mhsTsV8L4?r?tHr^1~s$tLsxkr5jastQ9!sO89s/s;pWi2kjjymZ15u20,0;i:s|pDr7tB1UsmkcnqsZt.stpMo(s%tMs*46kt8t1m0 o%i_kI7|7`3ui7m-fV0WkRgV9QuEkWe)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%gAwwgC1m0lwzv=hxtV9#0_7F03m2mK0B2P2:u3pXk{0Hk}1SwCuCluwaf5wHv,bVv(vibVwNxbv0uSi115h}wzwThRwVu.sNnkkJil0wr9no3frenyw{3lkjnB0(xxnuc-nG2#0Nj=0!3p0I1a0$nL1#0~iDvzpCp90tmbmdoUmgmijd0zm19#tpi/hSts04tc0Ltv98tyb=0|00pdm4pbjFrOl`k.k:0M1ujD23jJ0yo;mk3a1.1Qy01Q00180/q)j=0,m*1kjwmN2jit2`hnw@gnoBpUlex*rwx-tax/tu0Atwx@3sr7iH1#0 1ujE0z1Nqev1x+tryCtc090+pB3_1209t90H120G0%0P0Py$kky(0ey;y*0%y+yHd62^3p0B0|gl2jyzt7yBtt0xtf0W11titkb=k`pWz1tqz3yDyXyZ4Ey#y%y)y+y-za9/pTylf/yn0?jLtmzex,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)