Un mot est-il parfait ?

On affecte à chaque lettre de l'alphabet un code selon le tableau ci-dessous :

'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I'
\(1\) \(2\) \(3\) \(4\) \(5\) \(6\) \(7\) \(8\) \(9\)
'J' 'K' 'L' 'M' 'N' 'O' 'P' 'Q' 'R'
\(10\) \(11\) \(12\) \(13\) \(14\) \(15\) \(16\) \(17\) \(18\)
'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z'
\(19\) \(20\) \(21\) \(22\) \(23\) \(24\) \(25\) \(26\)

Pour un mot donné (une chaine de caractères non vide uniquement composée de lettres majuscules), on détermine :

  • d'une part son code alphabétique concaténé, obtenu par la juxtaposition du texte des codes de chacun de ses caractères, et lu comme un unique entier,
  • et d'autre part, son code additionné, qui est la somme des codes de chacun de ses caractères.

On dit que ce mot est « parfait » si le code additionné divise le code concaténé.

Exemples

  1. Pour le mot "PAUL", les codes sont \(16, 1, 21, 12\).

    • Le code concaténé est la chaine 1612112, soit l'entier \(1\,612\,112\).
    • Son code additionné est l'entier \(16 + 1 + 21 + 12\) qui donne \(50\).
    • \(50\) ne divise pas l'entier \(1\,612\,112\) ; par conséquent, le mot "PAUL" n'est pas parfait.
  2. Pour le mot "ALAIN", les codes sont \(1, 12, 1, 9, 14\).

    • Le code concaténé est la chaine 1121914, soit l'entier \(1\,121\,914\).
    • Le code additionné est l'entier \(37\), car \(1 + 12 + 1 + 9 + 14 = 37\).
    • \(37\) divise l'entier \(1\,121\,914\) ; par conséquent, le mot "ALAIN" est parfait.

Rappel conversion

Pour cet exercice on pourra utiliser str et int comme fonctions de conversion.

D'autre part, on pourra utiliser la fonction ord qui renvoie le code ASCII d'un caractère ASCII passé en paramètre.

🐍 Console Python
>>> ord('A')
65
>>> ord('B')
66
🐍 Console Python
>>> str(12)
'12'
>>> str(12) + str(14)
'1214'
>>> int('1214')
1214
>>> int('1214') % 10
4

Compléter la fonction est_parfait ci-dessous qui prend comme argument une chaine de caractères mot (en lettres majuscules) et qui renvoie le code alphabétique concaténé, le code additionné de mot, ainsi qu'un booléen qui indique si mot est parfait ou pas.

Exemples
>>> est_parfait("PAUL")
(50, 1612112, False)
>>> est_parfait("ALAIN")
(37, 1121914, True)
###(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
.128013,snaRcPmy7)f4_wu2A9l3 (6ev0-8%éb+okp/ihSg1t:5=.dr050W0z0R0e0M0u0c0w0g0u0e0c0c0U010R0M0K010406050c0q0i0i0e0X0j040O0I0u0q0=0I0d050L0|0~10120`0K041b1i051l0L1l1n1i0`0W0M0A0*0,0.0:0N0M0P0N0u1B0N0R0^050#0G0u0z1w0-0/011A1C1E1C0R1K1M1I0R0G0I0W121J0X1j0R0N0*150c0K0e0d0:0r011O1y010m0%0z0d0e0i0z1I1:1=1`1Q1}1M20220^0a0w0h0X0I0K0I0c0M180d0w0Z1.0X0X0z0g2n1b250d1j0L1,2A0R1*1)1+0W270:1E0d1 2k1I1t1v0+1P2K0M2M0d1$1u1I0K2t1j2y2A2(0{1;2o2S1{2X0X0 0u0^0w0Q2x2,0_2+262.1Q2:2=2@0r2`1=2|2y2J01310e2?040w0v352z0`382 0:3b3d0w0n3h372,393n2@0T3r3j3t3l3a0I2;3c2@0y3y2}2-1x303D323e0k3I3k3L3m3N3F3e0D3R3A3T3C3E3o0t3Z2~3#3v040Q0B3*3K2T3$3O0Q2_1c2{3z3+3?3-0Q343{363}3=2/3V3d0Q3g433i3J3u480^0Q3q4c3s3~473%4h3x4k1k2$1b2Q2D0W2H390g1$231j4v1m4t2*4r4A0Z2%3!3?0J0^0Z0m3r4e3B0p2@4S3S3 0m0^4J0z4X4M1{0@040x4(4m300^1M1W2t4.461Q4+0l0S3y0w4 0w4T3#0c1^04010f1 0A0I0M1N1M1.2q0|1u1=0R0w0u000F2X0d0g0F0V014~50524N0^2t0R0q0X1a4k514Y2/0G0^3D0W4^394+4-4r5H4:044=2E4%5R4)4`0^0l3r5G5Z0:0I0^0C5%5x5I5K0X5M5Y4/0:5P5N3B540^010s5u5@4_5_5#5.5S5*0^0H665)010i0M4h3y0645394O044Q5{3#4V3e6o4Z0^0z0c0R0o1;0X0m0$0R6s4*0^5Q2*673a0^0i0I6D625O5#4}4k06505(5^6K044$0o2V6x0g0}0q0u6b6X5+040U6,636d6f043:6T6V5/5T6!6w0X0o4A5q0e0R1 5X2(6W6=6.6:5F6|0:5}56612(6U5w6J6l0m3D6;3u4;0!5W7q3B0I6q2V7v3,6L6N6E5!046S7j6V6{6J0d0^0A3c0z5C7A3?7b7S2/4#4B7E644,7Z6Y5V4@6P3B4{5v7J797r6Z4B6#0d6%6)6+7d6J6.0H7c787e6Y7O1M7R6`7.7/3B7M7;0Z0o6 71190g74767V1Q7}7 2{883,5J046 7$5`7*7B04837Q0X8u65864 818a6!728h752M8k686/8N3a8r6$8C7#8w3 7X8c8e8J8i8M8W6F045$8E8p8X046M6x6v6x6z6B2m8Q7U7{6c8H7=8#8L778o816.0E8Q8~8c6$717_8`0^0U8n368-1{6e0^6_789i1Q0g0Q0^030w0q2o1#150F1 7-9o0:6l5A5C5E806J8v6I8}8Y0z7?7^0i6*8U0b979N8f73919T9V8/6N0o8=6y108^6O9L6X7,6T1b4$2A2#0z2A4E2B4x1b2E2D1#1%2D0e1L9_4u1u2|0L0Z0#0%0c04.