Carrés semi-magiques (POO)

Carrés semi-magiques (POO)

Nous travaillons dans cet exercice sur des tableaux carrés d'entiers positifs.

Nous appelons « carré d'ordre \(n\) » un tableau de \(n\) lignes et \(n\) colonnes dont chaque case contient un entier positif.

Carré semi-magique

Un carré est dit « semi-magique » lorsque les sommes des éléments situés sur chaque ligne, chaque colonne sont égales. Cette somme est appelée constante magique ou densité du carré semi-magique.

Exemples avec trois carrés

1 7
7 1

carre_2 est semi-magique car la somme de chaque ligne et de chaque colonne est égale à 8.

3 4 5
4 4 4
5 4 3

carre_3 est semi-magique car la somme de chaque ligne et de chaque colonne est égale à 12.

2 9 4
7 0 3
6 1 8

carre_3_bis n'est pas semi-magique car la somme de la première ligne est égale à 15 alors que celle de la deuxième ligne est égale à 10.

La classe Carre ci-après contient des méthodes qui permettent de manipuler des carrés.

  • La méthode __init__ permet de créer un carré sous forme d'un tableau à deux dimensions à partir d'un p-uplet d'entiers nombres. Nous remarquons que l'ordre du carré créé est la racine carrée de la longueur du p-uplet passé en paramètre. Par exemple avec un p-uplet de taille 4, on crée un carré d'ordre 2, avec un de taille 9, un carré d'ordre 3.

  • La méthode affiche permet d'afficher le carré créé.

Exemples
>>> nombres_3 = (2, 9, 4, 7, 0, 3, 6, 1, 8)
>>> carre_3_bis = Carre(nombres_3)
>>> carre_3_bis.affiche()
[2, 9, 4]
[7, 0, 3]
[6, 1, 8]
  • La méthode somme_ligne prend en paramètre un entier i et renvoie la somme des éléments de la ligne i du carré.
Exemple
>>> carre_3_bis.somme_ligne(0)
15
  • La méthode somme_colonne prend en paramètre un entier j et renvoie la somme des éléments de la colonne j du carré.
Exemple
>>> carre_3_bis.somme_colonne(1)
10
  • La méthode est_semi_magique renvoie True si le carré est semi magique, False sinon.
Exemples
>>> carre_2.est_semi_magique()
True
>>> carre_3.est_semi_magique()
True
>>> carre_3_bis.est_semi_magique()
False

Compléter le code ci-dessous, puis le tester sur les carrés carre_2, carre_3 et carre_3_bis.

###(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
.128013uk /iCRP)j=h*-a,1n8]f.r6mc;py72tl0qsebFwS_L!53(Tév:[4dg+9AoN050$0L0G0p0f0H0K0d0A0H0p0K0K0l010G0f0C010406050K0b0z0z0p0x0D040P0+0H0b100+0s0d020p0z0C0B0d0h0L1a0x0J0b0L0K050e17191b1d150C041B1I051L0e1L1N1I150$0f0Y0^0`0|0~0m0f0%0m0H1#0m0G13050:0M0H0L1W0{0}011!1$1(1$0G1.1:1,0G0M0+0$1d1-0x1J0G0m0^1g0K0C0p0s0~0F011=1Y010v0=0L0s1o0L1,2d2f2k1@2n1:2q0z2s040a0d0i0x0+0C0+0K0f1j1l0.2b0x0x0L0A2N1B2u0s1J0e292Z0G2726280$2w0~1(0s2p2K1,1T1V0_1?2-0f2/0s231U1,0C2S1J2X2Z34162e1l2^2l2}0x1a0H130d0r2W3814372v3a1@3c3e3g0F3j2f3l2X2,013q0p3f040d0U3u2Y153x3o0~3A3C0d0#3G3w383y3M3g0T3Q3I3S3K3z0+3d3B3g0y3X3m391X3p3$3r3D0E3+3J3.3L3:3(3D0t3@3Z3_3#3%3N0)3 3n413U040r0I463-2_423;0r3i1C3k3Y474f490r3t4k3v4m4e3b3{3C0r3F4s3H3,3T4x130r3P4B3R4n4w434G3W4J4u4E4N4a3*4Q4D3!4p3?4W3^4o4F4a3~4#404%4T0r454+4L3/4T0F4c4;4v4?3;0F4j344R4Y4(0F4r504X48534A564$4M4}4I5b4,5d3|0F4P5g4=3`4@4V5m4{5o4}4!5r4S4}4*5w524@4:5A584T0U4_5E4-3;0U4 4l575K3|0U555O5c4|5R5a5U5h5W3C0U5f5Z5n4g5R5l5)5s5+5$5q5.5x5R5v5?5B5L5z3k1K321B2?2$0$2*3y0A232C0-1U1J310L335~4J05670.6f5*0c0s130v2H0z3Q5P2l0O3g6t5V3L6o041a296y5!0~6w3D6F6m6B0f1p3$0G3Q0d6u3p130K0J0x6Q4Q0651410c133o6K5/6I6S6h6z3z0A130g1b2S6+3y12040Z3X0d706S6:6(040.0v6`3!6-78410v0z130Q0Q2{2M7g7b4f6|0V7l2l0M6|0K0L0H776/6G016|0q6R6T3L132}0z0M2S1A7x5*6|0j6~4Q717R727y7r6V7u7w366:0+130w7p6U043$0$6_4J7T5*7#040l7C6:0s0M132{6Z7Z7y7n7(7E046W6Y817z137o7L5/7_132z86808a3T7F0+7H7J8f130j8p6 7S707D017V837X867;7%8h4Y131~0L0p0b7@7y7;7?7.8u6|0!8r8s7R8O138Q8C488j8l1z8n048W7~5*6B0k8J7:130(8-8b7{8;3y7;0n8@3!8w7t7v8z7$866B7+7-8)5/6|0u8{6%6p3$9a4o138,8N7!6I2{9e3b7`040x2f0%0L8$89963y8}8y8X4f8A9213949t9A2l7N997Q8S8T739c0x9m7)0f9R0~0+9k0s9U3z9o9q0s9s9u869y8 9H1@9C9-829F8$0j8R7S8U049K50069N7y7476867a9:3z0v130p0v2n0A0m9G9w3!8gaf419+7Y5~6:7N7P5J6v3g8S860K0$1301ay0*aa0fac1;0b396^0Xay019^9 6m9P9Z6B1{2/9Z9W7{9Y9i7U7s9zai9B91a56B8F8H8$ap4l9MaM8b9o317|9)a(8d1#aSa57N3X9~718ua10Lal3v8ua4a#3ba7838k2B0QaRaeam7 889*aZ9,b91@7AaP8?a}8oa-4tb7as8sauaw04aJ6@0H0A0b1:0d0`0d0Kbd1;0.0@0Y3B0L0b0x0@2PbKbg0d0faJaLb17^6VbNaT138M347/5/0zb#045Ia.at9O040v9daX8*9gaT9XaP9#9rbhb6anbka5ak90048Bbo9;0x7,c72Y9`7Ob%bzb)bc19ck6J7!b-brcr2Bb,048:b 5/cca59/cg3z8E0p1/8G8Ibt8%9D049TcP0u8(bic0049hcI98cob:3y742S0GbUaWb/8u6BbMcsa a:c)13a2a5b8cX8bbbc=be670H1ka|c#cacIcFd7047BcD8icZ9?bv4C6:6-ata5avaxaybEbGbIbKd1bO1z0dbR1:bUbW1;bKd3d51;0kb$9Lcp7yc;b+de3!8L9Zb=13b^4t9Mb2aOdP8YcSc2aVc4139$9(cP9vc~9xbmb5clcvcecR9=cPcndKa/c:b*c?d!a$7=cxdvcAcCc/6:dad/dQa%cIa)cL1:a+cPcWc8dMbsdbcVcRc!ec41c$d}c^3!c*0/c-e5dO9}ex9b75b4a36xa(bb1z0G0Q7tb=0Q1a0%0f1xct9`d.em5*ebe!97buc%d cy0L0Q6719aFctc(ede4e27qd;cdcfet9fe,bfa{eXc904eZd?7ydTb@9?e*b{b}9Qe_7)0cd%cSc.3ke?48c59%f3bjf5bl7Wbne~2lcHfx7)d`dbd|50a/b(a07{d=cuaYfvfK8ufze%dfdvf10%d6fA0~ahfXcJ04fid{cA0Sb.fme+fTe/0ze;a,c%dXb{c+eBfg0~0c6=040N3B7tf?fHaNcSfKfn4fe$f78.d^a_f0dF0sfWfRagd8f!6Bf%fDf)f+3vg83be0d2bdf;cPdi14fGdLg5f_0xflgsb2f~g00?ctb0gD5/ezc,gG9Zf}130W0x1y3+0e6j6e5 g%0e621B0G64g,2(2!22242$ehg)621H6l5/2S0z0Q0v0p0ce-0m0U131t1veW0@gA1K3l2?3y0p0$0z1k2M0f1kb!0sb}131Hhghihk2N0o100G1 f 1k2Uhm1l6i6883181Bg$2Z1R1M040,0+0b0@8H0xhE0@0C0b0d1i0=0f7t0xbJ0p0db}0shDhn8v0b0=0G0o2{2jhG6k1DhKhH0d2P0i0D291khdg{0R0f2pdy0LbVh*i00+bG2B0s0:2N2Fi30mhn0Z6Sh+0m2S0v1Z1}0C0K0Z0eg*ig0K0w0Cin1k0w3$0%0e6q0e0U0e1(7I1FiMaFh/0siE1*0z0H031D6VhJ0e0phM3lg*6b1S0/0;0?0d2I2p9V0C2phr16181v1d0h0X2JiXdx3B0Gic2q100Y8#1Ci 1F3l1I0*1i2S0d2J0|0f0Mh$0G0Xi01;0xj31k7t7KhNhf3!1_1%1)1+g|3y2y2p2r132E0P0AhV0C0Gimi4gHcl6dg|355~hLdYeHfOdkeKefd0bNfUgigbe(ftcbe{cPdde9end$d{gA6$4fdl8tdnbB00k6drbHdDh+dvjubQbSdBjuiebZ0fk6009^f-eDf,d@gr2Ygt3p9oh}d-fu8xfwgj41fQj;dfa*cOdbelkF8Dj}ep9@d}j%gFjWfLcYe66!k02lb3j)7yc}kC4oj-cse.1gdGa^d9j^dbj`kqj|esk(9Ie)4`3yk26.cIdo04klk8dtkbbNkddykfidbXh+gg2/0d0kklknf^eAgTf{9!i(6skyj@fNe|cRkH8$kKjIkMcTeplze+k_kLeu139|k@g5fecxlClL5/aUfkd)9pc6k/f!galAkDeegm9Eci95f!7NkP56g#hHg(2Zg`61i;0=0Ki-0.0:l_04.