Carrés semi-magiques

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.

Carré semi-magique d'ordre 3

🐍 Script Python
ex_1 = [
  [4, 5, 7],
  [5, 7, 4],
  [7, 4, 5],
]

Avec une somme commune \(4+5+7 = 16\) pour chaque ligne et chaque colonne, cette grille est semi-magique.

🐍 Script Python
ex_2 = [
  [3, 4, 5],
  [4, 4, 4],
  [5, 4, 3],
]

Avec une somme commune \(12\) pour chaque ligne et chaque colonne, cette grille est semi-magique.

🐍 Script Python
ex_3 = [
  [3, 4, 5, 6],
  [7, 4, 5, 2],
  [1, 5, 4, 8],
  [9, 5, 4, 0],
]

ex_3 n'est pas semi-magique car la somme des lignes est égale à 18, mais celle de la première colonne est égale à 20.

Objectif

Écrire une fonction est_semi_magique :

  • qui prend en argument :
    • carre, une liste de listes d'entiers, dont chaque élément est une liste de même taille que carre.
  • et qui renvoie un booléen :
    • True : si carre est un carré semi-magique
    • False : sinon.
Exemples
>>> ex_1 = [
...   [4, 5, 7],
...   [5, 7, 4],
...   [7, 4, 5],
... ]
>>> est_semi_magique(ex_1)
True
>>> ex_2 = [
...   [3, 4, 5],
...   [4, 4, 4],
...   [5, 4, 3],
... ]
>>> est_semi_magique(ex_2)
True
>>> ex_3 = [
...   [3, 4, 5, 6],
...   [7, 4, 5, 2],
...   [1, 5, 4, 8],
...   [9, 5, 4, 0],
... ]
>>> est_semi_magique(ex_3)
False
###(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
.128013s3_8èufvy n7aS1me(P24C:jtwi]D[h)6Oo;bcdUg/T0lqp!.rFL-,=+zk95Rxé050N0r0z0n0B0T0b0k0M0T0n0b0b0%010z0B0V010406050b0g0q0q0n0Y0j040o0J0T0g130J0l0k020n0q0V0K0k0-0r1d0Y0U0g0r0b050Q1a1c1e1g180V041E1L051O0Q1O1Q1L180N0B0i0{0}0 110F0B0P0F0T1(0F0z16050?0L0T0r1Z0~10011%1)1+1)0z1;1?1/0z0L0J0N1g1:0Y1M0z0F0{1j0b0V0n0l110u011^1#010h0^0r0l1r0r1/2g2i2n1`2q1?2t0q2v040a0k0t0Y0J0V0J0b0B1m1o0;2e0Y0Y0r0M2Q1E2x0l1M0Q2c2$0z2a292b0N2z111+0l2s2N1/1W1Y0|1_2:0B2=0l261X1/0V2V1M2!2$37192h1o2{2o300Y1d0T160k0p2Z3b173a2y3d1`3f3h3j0u3m2i3o2!2/013t0n3i040k0c3x2#183A3r113D3F0k0v3J3z3b3B3P3j0,3T3L3V3N3C0J3g3E3j0H3!3p3c1!3s3)3u3G0m3.3M3;3O3?3+3G0e3`3$3|3(3*3Q0+423q443X040p0S493:2|453@0p3l1F3n3#4a4i4c0p3w4n3y4p4h3e3~3F0p3I4v3K3/3W4A160p3S4E3U4q4z464J3Z4M4x4H4Q4d3-4T4G3%4s3_4Z3{4r4I4d414M1N351E2_2)0N2-3B0M262F0:1X1M340r363n3T054`0;524O1`0*160;0h544)2o0A3j5f434r0h161C0z0d0b1x0B0d1d0P0B1A0r5k591115040s5B4y3s160M1e2V5H3B5E0G0x3!0k5U0k4!4b160l3T5W5g1`0J160%5#5X4r0L162C5O3%5E5G4.5%3O5K5M5A5_5l2o5Q5T5V5-3e160b0J1c0r0d4`1c0g2=5,5`015)045+4M5$601`0q0B164f4T5V6o5C015b040h3)6h6p5{040y6E6y0J5i042~6J5I3O5/040Y2i0P5~396i5@5=5Y045!5 6y5Q5S6v6w646i0l67692E6c6?6f6X3n6x6Q6j5*6P3W6=6a6^6e6g6n655(160(714#5|2U6{3y795D160E6#4i6r6t7n61160C7m6)6~6;6H7r1`5E0C635U7j6z166C0Y7d6$0B7L4i6L166O786:6S6U0l6W7A7k5F7Z017p4d7$5E0$7O666%7*165R7E6.7G7y68741~2=0d7N7T6F6 6l7-6q6s046u37066.6/816A7J846G6I806K6M7S376}3W7V6V7h2#7G6!7w727/8w5?7;6,898b8b7^736@7|6b7 8n7G6k6m8M6:8H6b8J7~8g827c8j7x7f5N8z445E7v6Y817y8L536Z7t8*8/8,168i8+6*7t7?6w7G6A0B5e8Z8x7`8I1(7}8.3y8o3%6k0W8P6|8G04956b6d0q6`7:048C4o8E7@6i6A2V0z0g0Y6(8Q8d0M160Z3E5s7?8 7I6D937e7z9M447Q6N9A9g7U167W7Y8%4i8v8`8!8y9$5P8B8}8c6y7_6?9k1j1n7}8_9U818O8W7(889r8E9J6B9L9B9.7R8W9R8m9_9.8q7X8s586~9#8?a59(aiag9+6-9s7F8R9i9:6^0T9?6b9^9a8N709P4r8Sauaw0day2#9b9Q7b8W7y5L7g9o8=7iar998t8:047u7$7yaIaf9*aY9,aq8d7R92a49%9jaF0l9@a7169eaNaE9l9n9Z7s9pa*9ta,6T0=9y9Taz9u9D049F0_ae8a9-6~9vb69z8W0*bb0R0Y1B3.0Q56514/bv0Q4=1E0z4@bA2+2%25272)0n1=bx4=1Ka%3%2V0q0d0h0n0*6b0F0c161w1y5z0`9q7i1R3o1L0I1o0V0r1l0k0n0g0 0B0k2s0i0B0b0n6W0Y0k6`0k681k2Q0k0N2i0`6fc40z0j1?0k6C0l2X0Baw0T0X1Nb+040Dcac2b.bQ0B0rc10z1x0V0b0$b=0i2W0k0}ch1nck1n5Wbu9i1b1EcPcp1V1X3B0n0N0q1n2Pcl1o2~6C161KcXcZc#2Q0#130z221McP1GcS4{3G0=cI1@0bcecgcicMa?0r0TcU1P040!0ncKcjc755c|c`btc|0k500l2.c31+d11@2S300q0L2V0`0s0J0gcu1@6d340/0F2s2O1n0GcEdB0k0Lcx1occ2P0/6UbKc81@1d0l0B0f2V0k0P0/0ldV3E1@c~2V0l0i0JcxcIdd9jdY0k0zdBcA0`1?0`0id.9y0bcob*cV2`441|1*1,1.bO442B2s2u162H0w1nc51@0t0j2c1n5450af3853cT6i0P5E020P0z0KeFeHeJ1ua!6Sdj9)8A5FaSaW819}9o7,aC2o7(4meQ8(16eYa/3B7(4ue%9!e)9|864De/b00C0G4g3B0P6k4Y897GeD16eLf5eGeMa 3seOcRf97!5^e^fa9W8r9offale,864Lfg7!0Ge{4(81e~16f04of2eEf7f6eH5Wfd3Cfb0qfka!160.7$6k0Q7$e-bm9K7KeZ5J04fNfW11a8b8aJ7^ac9Yfq01ahaTeVfo9ofse|3%fw040c0X9~4wc{57bw2$bM4;4~ea3Bed1~1-2w81ej2D2F2H0o0M0Y140z2Iet0Fev4.ex3/ez7ieBb45d7$6MfFf,0l5n045p5r5t5vb 5ybrfGf.eUajaP8$f,6+9Iarf%3GaA83f!fH5:2sfKfGaO5}f=gU8@as74a}77e+9caBg?4bfIg(gB8#ae8u7lfR86f}gOamaYft8Dbh3B8ea3aa9%aVgX6if$aNf*g aXflf/6ye#eXa{akhph67=aob36y90a.he8p67fcgS16hoh58xgQhm818)fL6N9oe`a^04a`g!9/g:6_g=fmeRb(3Kapha3%bj9xblg!bn9E9Gbf8~9ufUhta$aK7P8lgWh}3ehlg|h$6$gWh004hxh98Fh_6NhCb98,g{gMhIhQhMaRhQhgi8aZg)8^hSfTa2fVg_aDhRg!hjhXi3ij7#ishuhKeRf?iBa_9figaja;g;hN8{b1hy9sa19wb7bmbbbd9HhyiYbki08 bobqbff bxgrbyg50:0=0@0_4HcAc+191b1y1g0ob_d?b@cF0r0)0k0/9x1W0/c dm1ecY1(2Eded52=0TcEj60`2M0gcGja1+d(e2b`0.0V1+5L2Q0`1a1X2ie02Zj11Icq0O13drepd_jmdgcP3Ed8dkg0e94}eb4icYc!d#c7c)6kc,3%j)c/c%c;2Pc@dh57jXi;c}glcgd1cf1@d42Qjod91LdcjUc%cOc|j|jZ51dmd;dp2=cIb}cAd|251j0/dJ0kdAdCc3dF0YdHdJc%cE9l1@0B0M0BdNdCdQ2scu0kdUdWcg2Sd!d$d(d*d,6U1?0Gb`gld;d?d^j`51bpgLcPcugK1x2sgl2O5$2*1n0P04d~b@2Zk^7X3Gjz0/0T0/2E0l0ze3d.l7kc57k+5~cPcE2O300lcEk$d@1@k)bch?j}e81Uj$g71,g9eg7Ggdel2G0keo0leqgmeui7gr394.gv6yf304fDeIf7gAi55.16kehHeS7$h;04lehsh:i.gLl!e*hDh,l,iTh6l/iPbil=hSh8fzeC6kl)fulPfBeKfClUeNlY0TjYl!0seTeh4il%m1l.i#h=bel*iy2omhi/mnl:44mql-lWb0l^f(ba16mimx7B7tl}f~l mli(f1kf2$i?g3i@0i3o2_lw1}efgb6ylB2Eem0kghgj0VgleslJew4:lM39lObi5c0rifiJ44gza!gDgF5s6rgI5x5zi4hvhLg+iFia9 a+aji,hig^mtlX045;iFhJmf7.imn9g-iQatiShUiOmAihhFfJnliln8l!me7GeWiFhT4Tbgncm?b5h.nehOikiWh+g`m9mbmEfem8cQnAmcnCaQiFnFaUhSn+g.a$iqiv8fhXitiBh hkfiadn5m`izi7aXiLmo7a6lnwhhg.iRh!aei15ah`n@iAo4f#n`iDn|f+nYf-nSg}iInnmFi9mHh)a0hi6M2i0Nb2f)nWn~ot6RnzoG9hnpnEion-hQn:aX7Dh:ofoi3Ca6n_7RnQaboml?a(nm9ho1nRovnvo7od6Goa76oca1n?oWa#a7oko{iEn%iHo,iUo3nbo;opi9bscT1R4:mR3obyi`0^0bpf0;0?pi04.