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'
.128013.128203.129300ràwc1«pk[d*Vé2=:l,E}78eTRzS4-+U]mhaîMnu9ê6s_ (X3t0vo%?iè;qfbç{/.Og»yA5xCILP)D050m0z0Z0L0)0t0T0V0g0t0L0T0T0r010Z0)0j010406050T0P0J0J0L0d0_040D0$0t0P1j0$0O0V020L0J0j0+0V0B0z1t0d0,0P0z0T050;1q1s1u1w1o0j04051#1U1(0;1#1o0m0)0#1b1d1f1h1d0O0@0P0L0@0z0F0j0_0Z0K1D0V0K0)0@0K0t270K0Z1m05160.0t0z1;1e1g0126282a280Z2g2i2e0Z0d1$221b1z0T0j0L0O1h0q012k1?010-180z0O1H0z2e2C2E2J2m2M2i2P0J2R040a0V100d0$0j0$0T0)1C1E142A0d0d0z0g2:1U2T0O1$0;222 2w2y2x2f0m2V1@0)0O2O2-2e1.1:1c2l393b0O0$3f2e0j2^1$2}2 3s1p2D1E3h2K3l0d1t0t2e0L252^0-1h030U0U0g3m0z2a3k0$0F0h3T1m0V0h1U0L3t3w1n3v2U3y2m3A3C3E3G0z3I013K3M3O3Q3c3T0F2H040V0q3Z3#2E3%2}38013,0L3D1$3F0K3H3J3L3N143_3l3{0Y3W0Y412|3$1o453*1h484a054c4e3=4g3^3a3`3U0E3W0E4p1V4r3(3x1=3+0$3B493.4d3:4f3@4i4E4k3U0{3W0{4K3s4s3w464w4U4A3?4h3P4!3S3U0S3W0S4*4M4t4P4v4R3-4b3/3;4=4D3R3{0x3W0x4~434,3)5147534T554V574C4Z5a3U0y3W0y5f2~5h4O3i5k4S4x4z4W4B4Y4@5s0F0Q3W0Q5x444-4u5C544y564X4?4j4_3T0!1m0h0!5P5z4.5l5E5W5H5Y4^3{0h0h5%3Y0;3!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.705K0q5$047s6q6T4Q7n6I6w657e0q5^7u5`5|6R7k5i795U7A5:7d5!0q3}7S7w7l7y7N5/646k7D6n0q4o7j5Q7L7m7Y6v7P7C7R6z0q6B7I3u1+3q1U3f320m2y375S4?3e1/1$3p0z3r3$6D1$4?8a2U0)0m1h3L2}5?3.8h8j7q6l2I2Z0z8p6Y8r2 5|7x4v1m0o0`0 0v0H0B0D8c0V6*2K0$1m0r8K8M2m1l040l8c1o7J8f1E8o018k3w3{3}5V8$6/713|8s2Q8v7Q8*2e6b0V8{8L8A018U0W8c8S1h0J0)5%0!98928~8U0u8R8~0T3}010N019a7W1h8U119d8Z8Y3u458-0U8l3U6n8,8i8%8q7e4m0V8t8?7;4l8_3!8|8}9m8 1m918Z9301951m0Q999T9b1m9q3s9O7,2m9g1m010}9j9l9*9n1m9p8X9;8#9B8(2E3{6z9A9I7#5!4H9G8=9C8w7ea08`8|9U909`469W040{9Z9t9P9c9e9P9,0401129k9!an9@9%4Maw8g9|9w8)4$8naDa95!4%a62!a26:0F6N419Nae9Rag5Sai0Eal8b9#04az439)5A2Kar9.auaW5j9oa(6daB9{8p9x0F6#a1a88@4`8;aNa 9Jb18y3~ada$9Sam9=9V966oa!43aUa%apbda-0}avbca+8Tay9_a^0V9va{6?a~8.5K5caM8ub4a35b9Lb88{bjbba#9Pai9Ya:5Bao8Za*46a-0XbobS2Ka=bubqbwaDa{73bA9D5!5ubEaO8/b-acbLbab#2maiakb|9?bkbV9Ua-0 bpbObdb%9ragbxaF5LaHb?5K5Mb=bGaP7gaSb9ax04bNbi8~aY5)bv5SbU9(c49h0Xc6c09Q049^cbbvcd9~6;7tb.aJ5?5$ckbB6lcOb_bWcyaVcx5jai5(cFcz3$cY5jbYc7ctcqcI6)cKb+ce5@cgcl8/c`cTb/5?7Fcob`cqcs2~9UbQc)9$blbr1ha-0~0Xc/d7a$c=aAb)cL0O5?8+3F9vcQ6;2Hc du67bJaTb{c#5Bb~dac2cA9f9h0odi8!46cac?dnc^cM3T9zdsaIb0dUb2bFcU7e6mdAcpc9c!b)aXbf6Bd-a;dbc3dJ9-0~dLdGdl5~c@a`c_a0dWch6yd!e4d%ab9Md*ddcGd6dNd.5%dGa?3~cBd_dMbjd}a@dRe0dT0haRe3c|6ZaL9Hex6laR6Ca$0Ib(c8a_9Ca{6!c{d$5!eMdxdYeMb79seIb*esdp6;bzeweO5?bDeAe%e!bJeVc:aCeY5?b-e$d072e6eBd%b^8z9P0k1m140-cF0f3WcF0O0-1m2*1t3adGee9U0O1m0#490z0P0dd|0seHe/eJ9}eZ7feNe^fveRb5fvb7dB9Pfh042^1q0t160Zdc468O048Qd@aq9hdMe.dj4-do8*cOe@dy7se`e+3|cWead4bdf0040-4RfM6f1m2O1j0zfndDb$d?dIfE1m0T0_0J0.1z0zf?5j0$f504fdfRbdfF8D8F8H8Jf}bs04fpcJereKce7Efwf$5^fzbH3UgufC9Neb46f/0f262ig96GfifkfmgK8N1m020@0Z0+fQg0ggf^0Of`f|d;bT1mgpdQeWfYgAdreXe{7Rdwe*fx7Sd)gDgDfggM2igOgfecfO0FgWc+g}04f_0)f{fqfWe:gsdT7(gvdYhhgyaPhhgCg{fDgYfG1S0PfJ0LfLh1fN1m0Gh5a)h7g3g5g7hcdNg-3|e2g:f)7@f(g^e9bKc,5Bf/2^0Zfm0OgP3+fahthvhxg+bi0;8e1)7|0;7~1U0Z80h?35300L2h897}861!ef5j2^0J0U0-0L0k0z0U0K6n1M1O1Q1S0Vg*8b1+3%3f460L0m0J1D2/0)243af;1m1!ioiqis2:0F1j0Z2u040H1E490@4R2/0K2!0V0@0t0$1B1D1)3%1#0?1E3p0$0g0*2=2=i70/242E490$1`2j0L0P0V0i1L2O0mi^2=ir0O2Pha0V0^ii0Vi@0V2afl0V2=2^0O0m2^0V2O0V3piu0d2/0pj9ihi`0j0)0*0gihj52i1a0j1A1a0@0d2E140T0ubw0g0)jJ240p0gjn0Zjii#jniN0Zjpjzi_0Vfjg 0d1ajyihjB0PjDjFjf1S0=iX1-1/461^1`1|1~0Z0z0|jS2o292b2di25B2X2O2Q1m0b0V0v0|jB0)0ghwiu0O1T9T888!6c8d3OhJdSdp0q3V55dt8@kwgxg@cQkB2I7/7!6LkFb70}0d0pf{0V0P3b1b0K0L0MkS2=kijF2`0*jh0#8h2j15j9000L0-0-2_j~0d0V0ej93Ffjjnh|2i0VkNfIfKfVkte;kwg/kz9Jl6hQkE8:7Ze%lab710iUk?0gkUig9G0$g5jh1B180)0Tk}2j0sl35 fYkwdVhNd0lClbkA0F9FkHlflJg`0V0A2EjSln1dj#gNk?k^3N0O0#f{1jk?1SjS1q0j0pjnfljhiU0V0p0@fkk@1b2j3llqlxlz9uku3|0FhMl8bHkwa5kDlIa5lLlFm3lO9N0}1DkijX3bk?0t00jPjRfm2jfb17kX2jjwlol}j7i^l0hul2ccm1kwevlElceza7lMaLmcmKmf8|1yj-2w17jhmxl|0.jhk^lUj$l/l_lZl#0dl%lzh-ksh/h~h;i013j^5Sipj0it240f1u0O3a0@iy1%iAm}iDiFiHie1uigj?1%040oiU1a0Ll#0Cjkfl0Z0F0R2w2jls2a0TjpkRjckh2:j2jh058egi8G8I0r0V0:5(980s0V9ijJ9Y0!0s9.9jjJaknUnQaujJaZnUa.2I0=n,0w1Uh.m!0V0;1n0c0V0}3P3F3Ff;0O2`kk0Ojpn,j=n;n?060`2sh91DjJ140j0PlujkjChafm1am,2.1DjIjc2EjA21231EjZ1.o01DnDih0T1DjS2D0d3Nfmj-orklk,4Rjg2j0mosjqig0tbw190VoDg!nQmp2/0T2Il;lvlulu0=0V0D0)j#nj0VmVfj182inn1qk?kR2jonkkoioK2EjL2Omvjkouocl`9G00l)jk1ejq1b1eo.iJnAozj1mWl{pe0ToFph1p2w1D0@04oOoA0p2|px1_3~nPmnoOjhoRoM2ioUoYoEl=jQo%jq1aoIjBih0W1c0pjJm(fm11pdn|0P0go bw1I4R16n 0zo.nioKkS2,fm2^nn2D1anvlukPjwoa0V0J0p223Oj7l#0gjck-1BfHk_1_j|0To.0~oVi71BkQ1jnwkPp}o~iK0tiMjRiP2jiSiU0Z24p/pt0dp-hYl:0d0mpCp^nfm@0#3%qUimm`5jm|iCp2iwfOizm{iBn2n92/iH0Nqa232=1uiOq91jneili1i!noqsi@1fo;i$0g0p14l(1Eq3lvo!jHnAk(oooMfl1c8hhaj1ihk.3ajcl{2jq1pSjnpL2jg6p-k~nFqc5Sj`1{1}1 0_252b2q2c2Se 1mgH2N92m:1404o.q jF0j0j3Pk~jj3:k:lS1Riinfhu3%2akrkY5jrFj|rIrK2pk4rObdc%0x0E75gXh21m0;0;h#94bfnNcw7`8ejiptl=j$0Pjpk^rCr?5Br^rH20r{k32rr~ecc%rT8ejJ0gpsjSk~1Q0$f`rd2jlU3fo,24rj2a1.p7oQ2j9Uq^221tj~0|1m090W0h090us10y09118KoGhU2KsWiPhwj s#s%s)980!s-8K0+1Ur;1or;snmwr@2Ej{srrJk2rMk5d8sbs+s901fO0%8Ks;b}sbs}szkssgjS0psjsl8L4?j_t9rG1~sstdr}k62Kaiti9TrU89sBsDpifHj~rrl`q70J0RiQsMrhj=0;t31Ur/j@3gt81_tDrIqb1EtGsvtI2W2N8t1m10pah!kn7|7`3uh.m0e;0YkxcP8@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`v7hHwpgQ040nv`vHrmvJa)uZ0g7F032An hw0p2P2:tUkZ0Lk#fHvYheftlJ0Fe#mJuNe)uduiwYug7pw(bzu^8~hW15hZv`fHwnwDw5h,h.7{m?7~8Yw m_t,5Bq#q-p23lj~n50jn7q$1DiEq/2#0vjS0L3p0*1a0(nf1#0 ihv0j(oY0Pl,l.ol0Vl;l?i@0|l_sVqCsYs_04s$0{s|98s bV0TmopTl#o!jjrblRkQkS0.1ujh23jn0CoEl^3a1.1QxY1Q00180VqrjS0JmD1kjamm2ji72`m)lZjw0do2pgk?xGq_s^s!xKs{0us}xP3st$1,ng101uji0|1NpYuZs?xIycs$090$m,3_0:09sZ0Z0:0o0~0w0wyCj yE0}yNyG0~yHyhc+2^3p0p0Tf_sU8~ytybs`0Ss)0Y0!s,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)