moyen
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
Exemple 1 Exemple 2 Exemple 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
.128013:Lp(40zed3; 1jo5_n)h]6,qc[y!FCuv8i2+DxmsU7=wlSatf-9ORrg.TéPkbè/050j0i0W0V0I0T0O0m0z0T0V0O0O0R010W0I0d010406050O0F0N0N0V0$0B040U0p0T0F130p0s0m020V0N0d0l0m0#0i1d0$0y0F0i0O050/1a1c1e1g180d041E1L051O0/1O1Q1L180j0I0G0{0}0 110u0I0%0u0T1(0u0W16050?0-0T0i1Z0~10011%1)1+1)0W1;1?1/0W0-0p0j1g1:0$1M0W0u0{1j0O0d0V0s110J011^1#010X0^0i0s1r0i1/2g2i2n1`2q1?2t0N2v040a0m0+0$0p0d0p0O0I1m1o0;2e0$0$0i0z2Q1E2x0s1M0/2c2$0W2a292b0j2z111+0s2s2N1/1W1Y0|1_2:0I2=0s261X1/0d2V1M2!2$37192h1o2{2o300$1d0T160m0n2Z3b173a2y3d1`3f3h3j0J3m2i3o2!2/013t0V3i040m0k3x2#183A3r113D3F0m0f3J3z3b3B3P3j0q3T3L3V3N3C0p3g3E3j0w3!3p3c1!3s3)3u3G0Q3.3M3;3O3?3+3G0H3`3$3|3(3*3Q0Z423q443X040n0g493:2|453@0n3l1F3n3#4a4i4c0n3w4n3y4p4h3e3~3F0n3I4v3K3/3W4A160n3S4E3U4q4z464J3Z4M4x4H4Q4d3-4T4G3%4s3_4Z3{4r4I4d414M1N351E2_2)0j2-3B0z262F0:1X1M340i363n3T054`0;524O1`0,160;0X544)2o0S3j5f434r0X161C0W0r0O1x0I0r1d0%0I1A0i5k591115040e5B4y3s160z1e2V5H3B5E0t0b3!0m5U0m4!4b160s3T5W5g1`0p160R5#5X4r0-162C5O3%5E5G4.5%3O5K5M5A5_5l2o5Q5T5V5-3e160O0p1c0i0r4`1c0F2=5,5`015)045+4M5$601`0N0I164f4T5V6o5C015b040X3)6h6p5{040o6E6y0p5i042~6J5I3O5/040$2i0%5~396i5@5=5Y045!5 6y5Q5S6v6w646i0s67692E6c6?6f6X3n6x6Q6j5*6P3W6=6a6^6e6g6n655(160K714#5|2U6{3y795D160A6#4i6r6t7n61160v7m6)6~6;6H7r1`5E0v635U7j6z166C0$7d6$0I7L4i6L166O786:6S6U0s6W7A7k5F7Z017p4d7$5E0x7O666%7*165R7E6.7G7y68741~2=0r7N7T6F6 6l7-6q6s046u37066.6/816A7J846G6I806K6M7S376}3W7V6V7h2#7G6!7w727/8w5?7;6,898b8b7^736@7|6b7 8n7G6k6m8M6:8H6b8J7~8g827c8j7x7f5N8z445E7v6Y817y8L536Z7t8*8/8,168i8+6*7t7?6w7G6A0I5e8Z8x7`8I1(7}8.3y8o3%6k0C8P6|8G04956b6d0N6`7:048C4o8E7@6i6A2V0W0F0$6(8Q8d0z160D3E5s7?8 7I6D937e7z9M447Q6N9A9g7U167W7Y8%4i8v8`8!8y9$5P8B8}8c6y7_6?9k1j1n7}8_9U818O8W7(889r8E9J6B9L9B9.7R8W9R8m9_9.8q7X8s586~9#8?a59(aiag9+6-9s7F8R9i9:6^0T9?6b9^9a8N709P4r8Sauaw0ray2#9b9Q7b8W7y5L7g9o8=7iar998t8:047u7$7yaIaf9*aY9,aq8d7R92a49%9jaF0s9@a7169eaNaE9l9n9Z7s9pa*9ta,6T0=9y9Taz9u9D049F0_ae8a9-6~9vb69z8W0,bb0)0$1B3.0/56514/bv0/4=1E0W4@bA2+2%25272)0V1=bx4=1Ka%3%2V0N0r0X0V0,6b0u0k161w1y5z0`9q7i1R3o1L0!1o0d0i1l0m0V0F0 0I0m2s0G0I0O0V6W0$0m6`0m681k2Q0m0j2i0`6fc40W0B1?0m6C0s2X0Iaw0T0(1Nb+040Lcac2b.bQ0I0ic10W1x0d0O0xb=0G2W0m0}ch1nck1n5Wbu9i1b1EcPcp1V1X3B0V0j0N1n2Pcl1o2~6C161KcXcZc#2Q0Y130W221McP1GcS4{3G0=cI1@0OcecgcicMa?0i0TcU1P040c0VcKcjc755c|c`btc|0m500s2.c31+d11@2S300N0-2V0`0e0p0Fcu1@6d340*0u2s2O1n0tcEdB0m0-cx1occ2P0*6UbKc81@1d0s0I0.2V0m0%0*0sdV3E1@c~2V0s0G0pcxcIdd9jdY0m0WdBcA0`1?0`0Gd.9y0Ocob*cV2`441|1*1,1.bO442B2s2u162H0E1nc51@0+0B2c1n5450af3853cT6i0%5E020%0W0leFeHeJ1ua!6Sdj9)8A5FaSaW819}9o7,aC2o7(4meQ8(16eYa/3B7(4ue%9!e)9|864De/b00v0t4g3B0%6k4Y897GeD16eLf5eGeMa 3seOcRf97!5^e^fa9W8r9offale,864Lfg7!0te{4(81e~16f04of2eEf7f6eH5Wfd3Cfb0Nfka!160M7$6k0/7$e-bm9K7KeZ5J04fNfW11a8b8aJ7^ac9Yfq01ahaTeVfo9ofse|3%fw040k0(9~4wc{57bw2$bM4;4~ea3Bed1~1-2w81ej2D2F2H0U0z0$140W2Iet0uev4.ex3/ez7ieBb45d7$6MfFf,0s5n045p5r5t5vb 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+191b1y1g0Ub_d?b@cF0i0h0m0*9x1W0*c dm1ecY1(2Eded52=0TcEj60`2M0FcGja1+d(e2b`0M0d1+5L2Q0`1a1X2ie02Zj11Icq0P13drepd_jmdgcP3Ed8dkg0e94}eb4icYc!d#c7c)6kc,3%j)c/c%c;2Pc@dh57jXi;c}glcgd1cf1@d42Qjod91LdcjUc%cOc|j|jZ51dmd;dp2=cIb}cAd|251j0*dJ0mdAdCc3dF0$dHdJc%cE9l1@0I0z0IdNdCdQ2scu0mdUdWcg2Sd!d$d(d*d,6U1?0tb`gld;d?d^j`51bpgLcPcugK1x2sgl2O5$2*1n0%04d~b@2Zk^7X3Gjz0*0T0*2E0s0We3d.l7kc57k+5~cPcE2O300scEk$d@1@k)bch?j}e81Uj$g71,g9eg7Ggdel2G0meo0seqgmeui7gr394.gv6yf304fDeIf7gAi55.16kehHeS7$h;04lehsh:i.gLl!e*hDh,l,iTh6l/iPbil=hSh8fzeC6kl)fulPfBeKfClUeNlY0TjYl!0eeTeh4il%m1l.i#h=bel*iy2omhi/mnl:44mql-lWb0l^f(ba16mimx7B7tl}f~l mli(f1kf2$i?g3i@0G3o2_lw1}efgb6ylB2Eem0mghgj0dgleslJew4:lM39lObi5c0iifiJ44gza!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)a0hi6M2i0jb2f)nWn~ot6RnzoG9hnpnEion-hQn:aX7Dh:ofoi3Ca6n_7RnQaboml?a(nm9ho1nRovnvo7od6Goa76oca1n?oWa#a7oko{iEn%iHo,iUo3nbo;opi9bscT1R4:mR3obyi`0^0Opf0;0?pi04.
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)