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'
.129300.128013.1282037%*xh1çM5-s3:/CS nAîé0eI.]RT2;XcfaLo{àw4)»«D?(+,_Eu[qbO=êèv}8imtPz69pdrgyUklV050{0z0=0K0:110n0t0I110K0n0n0*010=0:0`010406050n0#0;0;0K0|0~040s0M110#1j0M0u0t020K0;0`0G0t0D0z1t0|0%0#0z0n050q1q1s1u1w1o0`04051#1U1(0q1#1o0{0:0-1b1d1f1h1d0u0}0#0K0}0z0m0`0~0=0h1D0t0h0:0}0h11270h0=1m05160(110z1;1e1g0126282a280=2g2i2e0=0|1$221b1z0n0`0K0u1h0F012k1?010J180z0u1H0z2e2C2E2J2m2M2i2P0;2R040b0t0?0|0M0`0M0n0:1C1E142A0|0|0z0I2:1U2T0u1$0q222 2w2y2x2f0{2V1@0:0u2O2-2e1.1:1c2l393b0u0M3f2e0`2^1$2}2 3s1p2D1E3h2K3l0|1t112e0K252^0J1h030Z0Z0I3m0z2a3k0M0m0i3T1m0t0i1U0K3t3w1n3v2U3y2m3A3C3E3G0z3I013K3M3O3Q3c3T0m2H040t0F3Z3#2E3%2}38013,0K3D1$3F0h3H3J3L3N143_3l3{0o3W0o412|3$1o453*1h484a054c4e3=4g3^3a3`3U0Q3W0Q4p1V4r3(3x1=3+0M3B493.4d3:4f3@4i4E4k3U0l3W0l4K3s4s3w464w4U4A3?4h3P4!3S3U0^3W0^4*4M4t4P4v4R3-4b3/3;4=4D3R3{0d3W0d4~434,3)5147534T554V574C4Z5a3U0/3W0/5f2~5h4O3i5k4S4x4z4W4B4Y4@5s0m0_3W0_5x444-4u5C544y564X4?4j4_3T0y1m0i0y5P5z4.5l5E5W5H5Y4^3{0i0i5%3Y0q3!4q5g4N5,5D4:5G585r4F3T3}0i405{425y5 5S4/5n4;5q5J660i4m046m5*6e5j6g5V5o5X596l4H6o4J6b5}6d505B6t5F5p5I5Z5?4%6o4)6C4L5~6F3z5-626J5;5K0i4{6o4}6Q4+6r6G6V6h636j6L3U0i5c6o5e6(4 5R6s6,6u6i6K5=6;5u6o5w6_6S6{6+616-6X6x4#3T5M6o5O766E786U7a6~6.705K0F5$047s6q6T4Q7n6I6w657e0F5^7u5`5|6R7k5i795U7A5:7d5!0F3}7S7w7l7y7N5/646k7D6n0F4o7j5Q7L7m7Y6v7P7C7R6z0F6B7I3u1+3q1U3f320{2y375S4?3e1/1$3p0z3r3$6D1$4?8a2U0:0{1h3L2}5?3.8h8j7q6l2I2Z0z8p6Y8r2 5|7x4v1m120v0L0!0 0D0s8c0t6*2K0M1m0*8K8M2m1l040$8c1o7J8f1E8o018k3w3{3}5V8$6/713|8s2Q8v7Q8*2e6b0t8{8L8A018U0W8c8S1h0;0:5%0y98928~8U0Y8R8~0n3}010k019a7W1h8U0R9d8Z8Y3u458-0Z8l3U6n8,8i8%8q7e4m0t8t8?7;4l8_3!8|8}9m8 1m918Z9301951m0_999T9b1m9q3s9O7,2m9g1m010r9j9l9*9n1m9p8X9;8#9B8(2E3{6z9A9I7#5!4H9G8=9C8w7ea08`8|9U909`469W040l9Z9t9P9c9e9P9,04010U9k9!an9@9%4Maw8g9|9w8)4$8naDa95!4%a62!a26:0m6N419Nae9Rag5Sai0Qal8b9#04az439)5A2Kar9.auaW5j9oa(6daB9{8p9x0m6#a1a88@4`8;aNa 9Jb18y3~ada$9Sam9=9V966oa!43aUa%apbda-0ravbca+8Tay9_a^0t9va{6?a~8.5K5caM8ub4a35b9Lb88{bjbba#9Pai9Ya:5Bao8Za*46a-0HbobS2Ka=bubqbwaDa{73bA9D5!5ubEaO8/b-acbLbab#2maiakb|9?bkbV9Ua-0LbpbObdb%9ragbxaF5LaHb?5K5Mb=bGaP7gaSb9ax04bNbi8~aY5)bv5SbU9(c49h0Hc6c09Q049^cbbvcd9~6;7tb.aJ5?5$ckbB6lcOb_bWcyaVcx5jai5(cFcz3$cY5jbYc7ctcqcI6)cKb+ce5@cgcl8/c`cTb/5?7Fcob`cqcs2~9UbQc)9$blbr1ha-0A0Hc/d7a$c=aAb)cL0u5?8+3F9vcQ6;2Hc du67bJaTb{c#5Bb~dac2cA9f9h12di8!46cac?dnc^cM3T9zdsaIb0dUb2bFcU7e6mdAcpc9c!b)aXbf6Bd-a;dbc3dJ9-0AdLdGdl5~c@a`c_a0dWch6yd!e4d%ab9Md*ddcGd6dNd.5%dGa?3~cBd_dMbjd}a@dRe0dT0iaRe3c|6ZaL9Hex6laR6Ca$0Cb(c8a_9Ca{6!c{d$5!eMdxdYeMb79seIb*esdp6;bzeweO5?bDeAe%e!bJeVc:aCeY5?b-e$d072e6eBd%b^8z9P101m140JcF0P3WcF0u0J1m2*1t3adGee9U0u1m0-490z0#0|d|0peHe/eJ9}eZ7feNe^fveRb5fvb7dB9Pfh042^1q11160=dc468O048Qd@aq9hdMe.dj4-do8*cOe@dy7se`e+3|cWead4bdf0040J4RfM6f1m2O1j0zfndDb$d?dIfE1m0n0~0;0(1z0zf?5j0Mf504fdfRbdfF8D8F8H8Jf}bs04fpcJereKce7Efwf$5^fzbH3UgufC9Neb46f/0P262ig96GfifkfmgK8N1m020}0=0GfQg0ggf^0uf`f|d;bT1mgpdQeWfYgAdreXe{7Rdwe*fx7Sd)gDgDfggM2igOgfecfO0mgWc+g}04f_0:f{fqfWe:gsdT7(gvdYhhgyaPhhgCg{fDgYfG1S0#fJ0KfLh1fN1m0Xh5a)h7g3g5g7hcdNg-3|e2g:f)7@f(g^e9bKc,5Bf/2^0=fm0ugP3+fahthvhxg+bi0q8e1)7|0q7~1U0=80h?35300K2h897}861!ef5j2^0;0Z0J0K100z0Z0h6n1M1O1Q1S0tg*8b1+3%3f460K0{0;1D2/0:243af;1m1!ioiqis2:0m1j0=2u040 1E490}4R2/0h2!0t0}110M1B1D1)3%1#0)1E3p0M0I0,2=2=i70j242E490M1`2j0K0#0t0T1L2O0{i^2=ir0u2Pha0t0Sii0ti@0t2afl0t2=2^0u0{2^0t2O0t3piu0|2/0xj9ihi`0`0:0,0Iihj52i1a0`1A1a0}0|2E140n0Ybw0I0:jJ240x0Ijn0=jii#jniN0=jpjzi_0tfjg 0|1ajyihjB0#jDjFjf1S0BiX1-1/461^1`1|1~0=0z0gjS2o292b2di25B2X2O2Q1m0c0t0!0gjB0:0Ihwiu0u1T9T888!6c8d3OhJdSdp0F3V55dt8@kwgxg@cQkB2I7/7!6LkFb70r0|0xf{0t0#3b1b0h0K0wkS2=kijF2`0,jh0-8h2j15j9000K0J0J2_j~0|0t0Oj93Ffjjnh|2i0tkNfIfKfVkte;kwg/kz9Jl6hQkE8:7Ze%lab70?iUk?0IkUig9G0Mg5jh1B180:0nk}2j0pl35 fYkwdVhNd0lClbkA0m9FkHlflJg`0t0E2EjSln1dj#gNk?k^3N0u0-f{1jk?1SjS1q0`0xjnfljhiU0t0x0}fkk@1b2j3llqlxlz9uku3|0mhMl8bHkwa5kDlIa5lLlFm3lO9N0r1DkijX3bk?1100jPjRfm2jfb17kX2jjwlol}j7i^l0hul2ccm1kwevlElceza7lMaLmcmKmf8|1yj-2w17jhmxl|0(jhk^lUj$l/l_lZl#0|l%lzh-ksh/h~h;i013j^5Sipj0it240P1u0u3a0}iy1%iAm}iDiFiHie1uigj?1%0412iU1a0Kl#0@jkfl0=0m0+2w2jls2a0njpkRjckh2:j2jh058egi8G8I0*0t0N5(980p0t9ijJ9Y0y0p9.9jjJaknUnQaujJaZnUa.2I0Bn,0.1Uh.m!0t0q1n0a0t0r3P3F3Ff;0u2`kk0ujpn,j=n;n?060v2sh91DjJ140`0#lujkjChafm1am,2.1DjIjc2EjA21231EjZ1.o01DnDih0n1DjS2D0|3Nfmj-orklk,4Rjg2j0{osjqig11bw190toDg!nQmp2/0n2Il;lvlulu0B0t0s0:j#nj0tmVfj182inn1qk?kR2jonkkoioK2EjL2Omvjkouocl`9G00l)jk1ejq1b1eo.iJnAozj1mWl{pe0noFph1p2w1D0}04oOoA0x2|px1_3~nPmnoOjhoRoM2ioUoYoEl=jQo%jq1aoIjBih0W1c0xjJm(fm0Rpdn|0#0Io bw1I4R16n 0zo.nioKkS2,fm2^nn2D1anvlukPjwoa0t0;0x223Oj7l#0Ijck-1BfHk_1_j|0no.0AoVi71BkQ1jnwkPp}o~iK11iMjRiP2jiSiU0=24p/pt0|p-hYl:0|0{pCp^nfm@0-3%qUimm`5jm|iCp2iwfOizm{iBn2n92/iH0kqa232=1uiOq91jneili1i!noqsi@1fo;i$0I0x14l(1Eq3lvo!jHnAk(oooMfl1c8hhaj1ihk.3ajcl{2jq1pSjnpL2jg6p-k~nFqc5Sj`1{1}1 0~252b2q2c2Se 1mgH2N92m:1404o.q jF0`0`3Pk~jj3:k:lS1Riinfhu3%2akrkY5jrFj|rIrK2pk4rObdc%0d0Q75gXh21m0q0qh#94bfnNcw7`8ejiptl=j$0#jpk^rCr?5Br^rH20r{k32rr~ecc%rT8ejJ0IpsjSk~1Q0Mf`rd2jlU3fo,24rj2a1.p7oQ2j9Uq^221tj~0g1m090W0i090Ys10/090R8KoGhU2KsWiPhwj s#s%s)980ys-8K0G1Ur;1or;snmwr@2Ej{srrJk2rMk5d8sbs+s901fO0e8Ks;b}sbs}szkssgjS0xsjsl8L4?j_t9rG1~sstdr}k62Kaiti9TrU89sBsDpifHj~rrl`q70;0+iQsMrhj=0qt31Ur/j@3gt81_tDrIqb1EtGsvtI2W2N8t1m0?pah!kn7|7`3uh.m0e;0okxcP8@u7kCmMd0ubkG6 cQufb79Uf/f2f4f6gm4vf9fGlpmufef7g~l/fohIlAm1u7l7dX9JuElHuHldmPua8:hoto8Bhsl1hwtjfOhC2~uQ01a-fUmFu6lNkyuGbHu79Fm9uKlKuhuN9zcXul1mf;g$h68~fFh9hbuqcGejuZfFhFg6gJhy5Sgb1mges44.8C8EnIglg%f~gouBu5hfdpu7m4u+6LvsuJu,meleuemeuPhqecfFsGsIh*u}9PuWtjfFp(u|hD8~fOs7vNgZg#vofXuDaQhiuKmLb3e%u7mOu=v%mRf-vFuyh0vfvb8PvV04vPuV1mtmva6svWhavQeqg,v!a}f#uN4{hl5=u7wbuMuKa}cXvEvguSmDuUw05BfOhBv`v7hHwpgQ040fv`vHrmvJa)uZ0I7F032An hw0x2P2:tUkZ0Kk#fHvYheftlJ0me#mJuNe)uduiwYug7pw(bzu^8~hW15hZv`fHwnwDw5h,h.7{m?7~8Yw m_t,5Bq#q-p23lj~n50`n7q$1DiEq/2#0!jS0K3p0,1a0Vnf1#0Lihv0j(oY0#l,l.ol0tl;l?i@0gl_sVqCsYs_04s$0ls|98s bV0nmopTl#o!jjrblRkQkS0(1ujh23jn0@oEl^3a1.1QxY1Q00180tqrjS0;mD1kjamm2ji72`m)lZjw0|o2pgk?xGq_s^s!xKs{0Ys}xP3st$1,ng0?1uji0g1NpYuZs?xIycs$090Mm,3_0N09sZ0=0N120A0.0.yCj yE0ryNyG0AyHyhc+2^3p0x0nf_sU8~ytybs`0^s)0o0ys,s.bVkZpiy9sXy$ydyxyz4EyByDyFyHyJy-9(pfx`fJx|0:jps:y;s@sZs`s(yfxOz03$yjqWx1h;15171904.
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)