Aller au contenu

Lire les chiffres romains

Les chiffres romains sont un système ancien d'écriture des nombres.

Les chiffres (symboles) romains sont: I, V, X, L, C, D et M. Ces symboles représentent respectivement 1, 5, 10, 50, 100, 500 et 1000 en base dix.

Cette association pourra être modélisée par un dictionnaire défini une fois pour toute (une constante) donné ci-dessous :

VALEUR = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}

Principe de l'algorithme⚓︎

Le principe est de commencer à zéro, puis d'additionner ou retrancher les valeurs de tous les symboles représentant un nombre écrit en chiffres romains.

  • Si un symbole a une valeur supérieure ou égale à celui qui se trouve à sa droite, il est ajouté.

    Exemple XVI

    "XVI" est le nombre 16 car "X" vaut 10 qui est supérieur à 5 (valeur de "V"), qui est lui même supérieur à 1 (valeur de "I").
    Ainsi "XVI" vaut 0 + 10 + 5 + 1 = 16.

  • Si un symbole a une valeur strictement inférieure à celui qui se trouve à sa droite, il est retranché.

    Exemple XIV

    "XIV" est le nombre 14 car "X" vaut 10 qui est supérieur ou égal à 1 (valeur de "I"), qui est lui même inférieur à 5 (valeur de "V").
    Ainsi "XIV" vaut 0 + 10 - 1 + 5 = 14.

  • Si le symbole est en dernière position, il est ajouté.

Travail à réaliser⚓︎

On souhaite créer une fonction valeur qui prend en paramètre une chaîne de caractères (non vide) représentant un nombre écrit en chiffres romains et qui renvoie sa valeur en écriture décimale.

Exemples
>>> valeur("XVI")
16
>>> valeur("MMXXII")
2022
>>> valeur("CDII")
402
>>> valeur("XLII")
42
Aide

Regardons l'exemple valeur("CDII") :
Les valeurs associées à "CDII" sont successivement : \(100\) ; \(500\) ; \(1\) ; \(1\).
Nous avons \(100 < 500\), \(500 \geqslant 1\) et \(1 \geqslant 1\).
La valeur renvoyée sera donc \(0 - 100 + 500 + 1 + 1 = 402\).

Compléter la fonction fournie.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013fe})61ipmSvk(q5rd;VPo/aRA l+é[XC8Ly7IM_3{:-tgU=swc,]hD2nEb094u050r0c0S0x0h0B0W0A0Y0B0x0W0W0V010S0h0i010406050W0.0j0j0x0q0J040k0v0B0.120v0(0A020x0j0i0s0A0y0c1c0q0o0.0c0W050w191b1d1f170i04051K1D1N0w1K170r0h0l0`0|0~100#0h0T0#0B1#0#0S15050=0*0B0c1W0}0 011!1$1(1$0S1.1:1,0S0q1L0S0#0`1i0W0i0x0(100%011=1Y010b0@0c0(1q0c1,282a2f1@2i1:2l0j2n040a0A0u0q0v0i0v0W0h1l1n0:260q0q0c0Y2I1D2p0(1L0w242U2123221-0r2r101(0(2k2F1,1T1V0{1?2(0h2*0(0v2.1,0i2N1L2S2U2 18291n2:2g2^0q1c0B150A0g2R3316322q351@37393b0%3e2a3g2S2%013l0x3a040A0O3p2T173s3j103v3x0A0-3B3r333t3H3b0p3L3D3N3F3u0v383w3b0f3S3h341X3k3X3m3y0K3$3E3)3G3+3Z3y0H3/3U3;3W3Y3I0,3`3i3|3P040g0+413(2;3}3,0g3d1E3f3T424a440g3o4f3q4h49363?3x0g3A4n2T1O2}1D2.2X0r232$3V0Y2_2x0/1U1L2|0c2~3f3L054H0:4P4i36150t0z0I0)0U0y3L0A3%3t0v150V4)4+3V14040P4R3:4a0W2d04021z0v0S0s0L4 0.510s4_3{4a4?0Q4:4`2g0j0h154e315f1@4?0Z5e5a2g4|1555570t5v52594W5n155d4w3y4;3|5h153R5F5H5b155p5F4*5m105t4~50520F5y585M5T015c5q5B105J45475$5r5C045Q2 5S5;5U4}5!0I5!5A4q5=5E5^5N5g5i040p5/5l5`5(5P5*615{5u5X0s0G5 5:5+6d04633f5_6o5-466a4Q5%5o6f3t5V5!0$6m6b6o5)5R651@5-696x3q6L106A6K5%6D6j0M6G6y6c6J645%6v0+6*603t4?0d3S064p3t0m150:0b6,3V0X3b6{430b150l3w0c0.0q6 5O040n784X042C1c2?7c5=0e6r4o0A7n6t6g3u150(6B3V4-044/6U6c0(0*152u7i6S157b6n7q0(157f0?7t7J6-150e3S7o7p3O150Y1a0.0B7u3|7w7y6%6c5-6P3C7V6R016@040b3X7%4j150h7`2g0v6}047h7z6o7B7M2a0T0c7F6p7I6H7K7s7~1@7w0R8h5,675k6!6I7S7l7/7V7o7;7?0h6`848f044Z4#4%8b4?0E8b7L7e0v7g7P8e7R048I7Q3V8K7}8T3|4?0!0!8l017w020B5z8A7X8C4!4$4(8X798S8P8U7M8M7O8G158@8p8B8W7+6o7w0C8$6v8}048!8s168u9e7W8_047Z0j7#8$7)8$8K9j9l8,7v158k9s434Y8/8F8=2g8H8J8`8N998 6Q5%8V998!7U9f8w150c0^8a9B629O9f8v9K7Y7!7$9w4a9n9(7d9q9%937q959o9y8E8;8^8Y8~9E8L9G9V7G8R9|92908Q9N5F067:9!9i9$9m4.9=ab9k9.6s7;9;9+3k9?8:9H9|7N839_8?9|8Oaj5%8j978n9M8#a7a96c7?2N0S76ax3q9g9xag9r2 170w4T4O4yaW0w4B1D0S4Da#2!2V0x1/aY4B1J4V7q2N0j0N0b0x0m0c0N0#0O151v1x1z1B0A9c1O3g1K0t0v0h0Y0h0A0.2*0A0W1i1k0h1m0A290qbn1d4H760_0r000D0B0D2w0(0S0W0Z0A0;0A2^1nbobq0qbs0qbu002?1T0Yb35E1R4K2/3|1_1%1)1+4M4z315MaVa:6?6^0c8zau2g814*9 3u7104731:76998da49hasaM4x6z8r9XaO7{b|74760N0T0x0.0Y0#9U9/4,aeam8m157.9d9Z7A150S513wad7xaBcrc99Q7@7_cp7r9i1d0x2P0c2N9m81ataycv9}8|b_6$4g9Y7;8Kb}750q0N0r2C2HclcT94cocm9h8DapcX9{b_9pcLcNcPc_9ac9aG6o8xb;c/8Bc%cecgcickcA8)8+c=aPd9c)c+ba0Sc.9J6#5Dd29Paacx0=aiaNakc;d78-dvczcIaAcIc$cdc)dbcjdo8t9ecF9S0WdNb-4=draF9Ycu85cwcydx2Tca7 dAdydud$cA96dH72dJcfchdMds7nc#d=b~dKd^dddFd+d(d|ccd~c*c,dncE5%aI0;aLafdDd%5Gaz15d:dhcbdjd@dcdTaTb,aX2Ua.4A0;0?0^04.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013fe})61ipmSvk(q5rd;VPo/aRA l+é[XC8Ly7IM_3{:-tgU=swc,]hD2nEb094u050r0c0S0x0h0B0W0A0Y0B0x0W0W0V010S0h0i010406050W0.0j0j0x0q0J040k0v0B0.120v0(0A020x0j0i0s0A0y0c1c0q0o0.0c0W050w191b1d1f170i04051K1D1N0w1K170r0h0l0`0|0~100#0h0T0#0B1#0#0S15050=0*0B0c1W0}0 011!1$1(1$0S1.1:1,0S0q1L0S0#0`1i0W0i0x0(100%011=1Y010b0@0c0(1q0c1,282a2f1@2i1:2l0j2n040a0A0u0q0v0i0v0W0h1l1n0:260q0q0c0Y2I1D2p0(1L0w242U2123221-0r2r101(0(2k2F1,1T1V0{1?2(0h2*0(0v2.1,0i2N1L2S2U2 18291n2:2g2^0q1c0B150A0g2R3316322q351@37393b0%3e2a3g2S2%013l0x3a040A0O3p2T173s3j103v3x0A0-3B3r333t3H3b0p3L3D3N3F3u0v383w3b0f3S3h341X3k3X3m3y0K3$3E3)3G3+3Z3y0H3/3U3;3W3Y3I0,3`3i3|3P040g0+413(2;3}3,0g3d1E3f3T424a440g3o4f3q4h49363?3x0g3A4n2T1O2}1D2.2X0r232$3V0Y2_2x0/1U1L2|0c2~3f3L054H0:4P4i36150t0z0I0)0U0y3L0A3%3t0v150V4)4+3V14040P4R3:4a0W2d04021z0v0S0s0L4 0.510s4_3{4a4?0Q4:4`2g0j0h154e315f1@4?0Z5e5a2g4|1555570t5v52594W5n155d4w3y4;3|5h153R5F5H5b155p5F4*5m105t4~50520F5y585M5T015c5q5B105J45475$5r5C045Q2 5S5;5U4}5!0I5!5A4q5=5E5^5N5g5i040p5/5l5`5(5P5*615{5u5X0s0G5 5:5+6d04633f5_6o5-466a4Q5%5o6f3t5V5!0$6m6b6o5)5R651@5-696x3q6L106A6K5%6D6j0M6G6y6c6J645%6v0+6*603t4?0d3S064p3t0m150:0b6,3V0X3b6{430b150l3w0c0.0q6 5O040n784X042C1c2?7c5=0e6r4o0A7n6t6g3u150(6B3V4-044/6U6c0(0*152u7i6S157b6n7q0(157f0?7t7J6-150e3S7o7p3O150Y1a0.0B7u3|7w7y6%6c5-6P3C7V6R016@040b3X7%4j150h7`2g0v6}047h7z6o7B7M2a0T0c7F6p7I6H7K7s7~1@7w0R8h5,675k6!6I7S7l7/7V7o7;7?0h6`848f044Z4#4%8b4?0E8b7L7e0v7g7P8e7R048I7Q3V8K7}8T3|4?0!0!8l017w020B5z8A7X8C4!4$4(8X798S8P8U7M8M7O8G158@8p8B8W7+6o7w0C8$6v8}048!8s168u9e7W8_047Z0j7#8$7)8$8K9j9l8,7v158k9s434Y8/8F8=2g8H8J8`8N998 6Q5%8V998!7U9f8w150c0^8a9B629O9f8v9K7Y7!7$9w4a9n9(7d9q9%937q959o9y8E8;8^8Y8~9E8L9G9V7G8R9|92908Q9N5F067:9!9i9$9m4.9=ab9k9.6s7;9;9+3k9?8:9H9|7N839_8?9|8Oaj5%8j978n9M8#a7a96c7?2N0S76ax3q9g9xag9r2 170w4T4O4yaW0w4B1D0S4Da#2!2V0x1/aY4B1J4V7q2N0j0N0b0x0m0c0N0#0O151v1x1z1B0A9c1O3g1K0t0v0h0Y0h0A0.2*0A0W1i1k0h1m0A290qbn1d4H760_0r000D0B0D2w0(0S0W0Z0A0;0A2^1nbobq0qbs0qbu002?1T0Yb35E1R4K2/3|1_1%1)1+a:3t2t2k2m152z0k0Y0q130S2A0J241m4R4Na:304QaVb(3V7?6_8b814*9 3u7104731:76998da49hasaM4x6z8r9XaO7{cb74760N0T0x0.0Y0#9U9/4,aeam8m157.9d9Z7A150S513wad7xaBcGco9Q7@7_cE7r9i1d0x2P0c2N9m81ataycK9}8|c86$4g9Y7;8Kcc750q0N0r2C2HcAc,94cDcB9h8Dapc:9{c89pc!c$c(d89acoaG6o8x8zd4aPc_ctcvcxczcP8)8+dmcqdoc{c}ba0Sd09J6#5Ddh9PaacM0=aiaNakd3d18BdKcOcXaAcXc^csc{dqcydD8t9ecU9S0Wd$c19`6qdHd(dJcNdM2Tcp7 dPdNd=dLcP96dW72dYcucwd#d:d_ancrcddZe5dsdUd{d^c@e2ebc|c~dCcT5%aI0;aLafdSd@5Gaz15e0dw7ddye4drd,aTc0aX2Ua.4A0;0?0^04.