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
🐍 Console Python >>> romain ( 4 )
'IV'
>>> romain ( 5 )
'V'
>>> romain ( 6 )
'VI'
>>> romain ( 5042 )
'MMMMMXLII'
.129300.128013.128203%(dv/é[-kUgç?)2wmO=t4b,I+»pa3{zu1êis.*xq]0h75;î6S«_89lXL:CeR}ETcèMrAonàfyDPV 050f0-0w0E0L0(0M120=0(0E0M0M0v010w0L0D010406050M0I0t0t0E0^0~040Z0`0(0I1j0`0{12020E0t0D0W120.0-1t0^0Q0I0-0M050h1q1s1u1w1o0D04051#1U1(0h1#1o0f0L0g1b1d1f1h0T0L0n0T0(1_0T0w1m05160y0(0-1;1e1g011^1`1|1`0w2224200w0^1$0w0T1b1z0M0D0E0{1h0r01261?010}180-0{1H0-202p2r2w282z242C0t2E040b12100^0`0D0`0M0L1C1E142n0^0^0-0=2Z1U2G0{1$0h2l2/2i2k2j210f2I1h1|0{2B2W201.1:1c272|0L2~0{0`32200D2(1$2-2/3g1p2q1E342x390^1t0(1m120J2,3k1n3j2H3m283o3q3s0r3v2r3x2-2{013C0E3r04120F3G2.1o3J3A1h3M3O120x3S3I3k3K3Y3s0V3$3U3(3W3L0`3p3N3s0Y3-3y3l1=3B3=3D3P0U3`3V3}3X3 3@3P0$433/453;3?3Z0%4b3z4d3*040J0S4i3|354e400J3u1V3w3.4j4r4l0J3F4w3H4y4q3n473O0J3R4E3T3{3)4J1m0J3#4N3%4z4I4f4S3,4V4G4Q4Z4m3_4$4P3:4B424,444A4R4m4a4;4c4?4)0J4h4`4X3~4)0r4o504H52400r4v3g4%4.4@0r4D5c4-4k5f4M5i4=4Y594U3i1+3e1U322=0f2k2`3:0=3a2O131/1$3d0-3f3w3$055C145K513X1m110_0*0:0m0.0Z3$125j4r0`1m0v5#5%2x1l040j3-125?5$5o285/0e5M5_1h0t0L4S0S635}4{5.1m0z5,5~010M2u04021Q0`0w0W0@6g0I6i0W655R015/0q694$5@5^665`1m5|4V5-28601m0%646D6b5/6v3g6y6r6d1m6m6o0,6l6h6j6q571h6t6N4x6x6E6#6B6Z3K6G040V6J3i6L686a6z1h6R6f6X0W0 6T6Y6K6`6s1m6u5=5@6*75046C6?746/0x6=5L6@046%3H6P6!6c6e710W0,706~6-3:6$785?7a5{7x4d6/4n557e6r6M6_6Q7r6~0,7s7E4r7z6w797k7d7j7f61046I7S677l7M7p6|7s0)7Q7w737K767m3T6)7X7(6F7#6;7|6+7*4V7o3K7-6~0*7R7=7p7U5c7`747D8a6.7#7h807b7^3P7a866n6j0)887;7J8b7@7A847y6,8h3:7G7I7Z7?826O8p7O8r0W0)898w3K8c6(7W8f8C8R8E7#4 8Y4d7L838L6S6~0A8P8v8H8x04777V7B7{8D7F7~8l8(8K6b8q6o118Q8:8S8y8@8A8%8X958Z1m5r9c9a8J3w994r916j0A938/3H7C978d8V8I7Y9r6b7G8}6^8)908M6o0A949y8W8=8n5d9h0R3-069N4r0l1m140}8l0s3s8l0{0}1m2T1t379B7c9#1m0g3N0-0I0^9,0q0+8z7a0{9(1S0I0(160w7+3K5)045+9D749m0W9I7_9v7p9U040}3=a44.1m2B1j0-9@8`7T9C8 749}040M0~0t0y1z0-al4d0`9Z049+a96rax5U5W5Y5!as7)9`988e6rah0s1^24aF4A9/9;9?a$2xa6020n6ja8avaMan0{apar8$at04aU9u6xb09k3na(24a*aL7pa60ka;9j9|a@a_8zb18^aw9~1qa10Ea3b7a51m0Bbb7nbdayaAaCa#987aah2(0w9?0{a+3Bbka0a23`0h5O5J1)5u0h5w1U0w5ybU2^2:0E23bPbS5G1!5Q7p2(0t0#0}0E0l0-0#0T0F1m1M1O1Q1S12a~5L1+3x323K0E0f0t1D2Y0L1D1237aj1m1!c4c6c82Z0k1j0w2g040m1E3N0n3=2Y0T2N120n0(0`1B1D1)3x1#0u1E3d0`0=0?2#2#b/0ocb2r3N0`0n1R120E0I120!1L2B0fcZ2#c70{2C0L250Cb~cXcZ1|9=122#2(0{0f2(122B123dca0^2Y0i12241ac#0D0L0?0=b}c:d8d11A1a0n0^2r140M0zcc0=0Ldqcb0i0=d40wc cId4cu0wd6dhc#9:b50^1adgb}0Ddjcydmc|1S0NcE1-1/3K2a1{1}1 b*3K2K2B2D1m0c120:0PdO0L0=bnca0{1T6D5Ib*3h5LbO040,0^0iaq120I2~1b0T0E0Xe82#d?dm2*0?c~0g0L2#15d702030F0%0W0E0}0}2)0we50|d70E129:d4b!2412e3bla20610cB0^e90Eb|1239aBc~1B180L0MeG250+066x0;2rdzeS1deDa)ePeA5C0{0gaq1jeP1Sdz1q0D0id49=c~cB120i0n9;12e=25eU0yc~e%bh120,1Dd?dE2~eP0(eper0Wdwdy9?259)17ed25deeT0`eV25cYeI0ieKbne(bh1y0I0M2i17c~fAfcc~eAe.dIf2f92ne@e_0L0^1obN5D2/d|5vb(5F334dc5c+c9cb0s1u0{370ncf1%chf@ckcmcob`1ub|dV1%0411cB1a0Ee^0Hd19=0w0k0K2i25eX1|0Md6e7c_d=2Zc-c~5Nf+aO5X5Z0v120G7H0S0+12010@dq6IgI016V01dq6;gIgK0 gS3!630+gQgX120Ng)0/1Ue005fd120h1n0afh0-e.eCaj0{2*d^0{d6g)dUg/g;060_2eaod^dq140D0IeZdifNc.9?1ae^dKd^dpc_2r1a0D0~2lcbdh1.g}1Dgxb}0M1Ddz2q0^5C9?fNhod_d7003=c}250fhpd70-b|0(cc1912hBa^gKfs2Y0M2vf4e!eZeZ0N120Z0LeDgd12fP9:1824gh1qePe725hk2XcbdOhI2rds2Bfyd1hs0T1DdqfS00e|d11ehS1b1eh.cqguhxc,fQfbigfOii1a1p2i1D0n04hNhy0i2,iz0{iBc;0(hM0^hOhJ1a24hUhYhCf5dxh%hS1ahGdOb}0e1c0idqfX9?0qeT00eCcY0=h cc1I3=16g|0-h.gchIe82V9?2(gh2q1agpeZe5deh7120t0iht2#gf2)c_i/1B2(iQ2rf70ndT120AhVb/1Be61jgqe5j1h~cr0(ctdycw25czcB0wcbi?fO0^0I2*fu12iDc,e4dUc1f)5wjZf/c33:f?cjd^cc9$a6cgj(cif|g32Yco0@jeicjgjGjd1jg8jYgacHgijwcY1fh;cJ0=0i14e{1Ej7e!h!dogueki2hK9=1celc.c,b}eu37c_fb25j5iVd4c~2#aCjQeHgzee4ddZ2c1~2F74aYa!aE6Df*5Ph.k3dm0D0Dg^eHd00-eveneSaU1,05a03x1|1$bOdY1}kKd$7a7G0U0x4_a=b81m0h0hbH5 7#gH5MkS5Jc iv0idI0Id6eAkGfzkIk?d#kM6r9AkRe0ieiudzeH6Xkqdz2#e.32h,cbkn1|1.i8hP257a1ucv1tey0P1m090e0J090zk{0$090q5#hEb228lK2llM0-lO04lQlS0z630SlX5#6p0hk/1ok/lhk=2blld%9d4mlVl301a60d5#l#l4627i9rl83Pihlc3NlefZl|3:kJl k_7#m3lpf+lriheHjmeykv1b15my0t0KcxlAkljXl_1Uk-dWf;4rmn2dlm7pd)2M2O2Q0ZiW0Ddz10ibcDd{5u5s3ig-6bah9W9Y9!aS3B9%04fwaKa{7)9x2.bvi+a`9ga|9_9{6baxjmbKbnm4a6bt2.m97q8+8Nad1naWag1majn1bun6bec.npm~7k8nnfaxazaBaDnbaIm`bcnrgb5VgCaRm{6Aa}bgaf3)1mlvaonb5*m4axn0nV04l1nXnsaqnPbia?04nZbp3:ncn%n-e:n!m7n/4kn(nunkbhbvn8bmbok~bq04bsn=nAbykQo4n:1m0On=nTa^m87a0=0J1m03f!fk0i2C2Zmzef0Eehjmn5kN9~bE0^bGn`a%m^9 o2bMg-5tb$j!f.0gc2dXj:g2j+39eyf 0Dg1j*1Dclj@2O0:dz0E3d0?1a0pg91#0*b}h8aq1ae~f0hhdKjTcZf6cY0Pmk6bl%cwbnl*lP0e0VlTl:l=830M00h$e^h!d0kfe+e6e80y1uc~icd40HhCf8371.1Qpo1Q001812jvdz0tbK1kc@fn25b/2*fYe?deoDd6l!lJj}p8l+l-pd63pf3gjXk+1#101uc 0P1Ni#nfp6l)p!0e090`hk2}0-0G09lN0w0G110A0/0/q1l*q30,qcq50Aq6p(9j2(3dfHaolIp5pYlNpa0YlT0F0SlWlY83efikpXlLpZpap{p}37p q90Pq3q5q7qh7nihpJa1pL0LpVp.qBl(qDl,lRp$l;qxp)g9b%oQjZ15171904.
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)