Démineur

On souhaite générer des grilles du jeu de démineur à partir de la position des bombes à placer.
On se limite à la génération de grilles carrées de taille \(n \times n\) où \(n\) est le nombre de bombes du jeu.

Dans le jeu du démineur, chaque case de la grille contient soit une bombe, soit une valeur qui correspond aux nombres de bombes situées dans le voisinage direct de la case (au- dessus, en dessous, à droite, à gauche ou en diagonale : chaque case a donc 8 voisins si elle n'est pas située au bord de la grille).

Exemple

Voici un exemple de grille \(5 \times 5\) de démineur dans laquelle la bombe est représentée par une étoile :

image

On utilise une liste de listes pour représenter la grille et on choisit de coder une bombe par la valeur -1.

L'exemple ci-dessus sera donc codé par la liste :

Python
[[1, 1, 1, 0, 0],
[1, -1, 1, 1, 1],
[2, 2, 3, 2, -1],
[1, -1, 2, -1, 3],
[1, 1, 2, 2, -1]]
Compléter le code ci-dessous

La fonction genere_grille permet de générer des grilles de démineur. On pourra vérifier que l’instruction genere_grille([(1, 1), (2, 4), (3, 1), (3, 3), (4, 4)]) produit bien la liste donnée en exemple.

###(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 : 5/5

.128013qnié4 p0!ts5vb();gIwahù:+x2ce,fd67m=]3y_9àuç8[/è1jPlo-RrSk.050G0D0k0v0d0!0l0g0C0!0v0l0l0K010k0d0h010406050l0R0J0J0v0(0N040)0#0!0R0 0#0c050V16181a1c140h04051s1l1v0V1s140G0d0n0@0_0{0}0_0c0s0R0v0s0D0$0h0N0k0w1j0g0w0d0s0w0!1X0w0k12050/0o0!0D1E0`0|011W1Y1!1Y0k1*1,1(0k0(1t1S0@1f0l0h0v0c0}0B011.1G010F0;0D0c0v0J0D1(23252a1:2d1,2g2i120a0g0Z0(0#0h0#0l0d1i0c0g0-210(0(0D0C2D1l2l0c1t0V1S2Q1}1 1~1)0G2n1H0d0c2f2A1(1B1D0^1/2!2$0c0#2*1(0h2J1t2O2Q2`15242E2,2b2:0(190!1(0v1V2J0F0}030O0O0C2;0D1!2/0#0$0X3l120g0X1l0v2{2~132}2m301:323436380D3a013c3e3g3i2%3l0$28040g0B3r3t253v2O2Z013A0v351t370w393b3d3f0-3K2:3M0M3o0M3S2N3u143W3y0}3Z3#053%3)3G3+3J2#3L3m0f3o0f3@1m3_3w2 1F3z0#333!3C3(3E3*3I3-463/3m0m3o0m4c2`3`2~3X3~4m423H3,3h4s3k3m0H3o0H4y4e3{4h3}4j3B3$3D3F4G453j3M0I3o0I4P3U4A3x4S3Y4U4l4W4n4Y444r4#3m0T3o0T4*2P4,4g2-4/4k3 414o434q4I4`0$0P3o0P4 3V4B3|544V404X4p4H3.4K3l0i120X0i5h514C4:565o595q4J3M0X0X5v3q0V3s3^4+4f5A554E584Z4_473l3O0X3R5M3T505Q5k4D4=4F4^5b5X0X3;045;5y5)4.5+5n4?5p4!5:495?4b5$5O5(4R535{574@5a5r5H4v5?4x644d5P67315B5T6b5F5c0X4M5?4O6i4z5_686n5,5U5.6d3m0X4%5?4)6w4Q5j5`6A5|5-6c5G6F4|5?4~6K6k6M6z5S6B6p5 4t3l5e5?5g6X666Z6m6#6P6C6R5c0B5u046`5^6l4i6=6a5~5W6)0B5J6|5L5N6j6/4-6!5m725E6(5s0B3O7k6~6:707f5D5V5/755=0B3?6.5i7d6;7q5}7h747j610B637a6x6 4T717r6D6S3N6f0B6h7K6L7A7p4;6?6%7F3M0B6t7)7n7Y7N7C6Q6q5X0B6H7?7,527B7!7g7s6E3N6U0B6W7W6Y7-5l7|7P6^7=6+0B6-847c7`7Z5C7D7~7R0M6{8n7_5R7/6@7;6)0M778w8q5*6O7}7Q5c0M3O8F5h1w2^1l2*2T0G1 2Y5k4H2)1C1t2@0D2_3u651t4H8Y2m0d0G0}3d2O5H3C8)8+8a6)5J0g2r0D8;8u5s773@7M010*120-0F8!6y2b0u3o96900c0F120n0#0d2B2g1N9b7o0}11040p9m860c121k7b8%8h9o120E8!0g973z121@2$9s9z019p9C9x9E9c123f0!1j9J9x9F9A040q0y8!149X3W8:018,2~7(8/8*9,8=7j298_8{7i9/2Q5N90993P0ga29K3X0l0G12020b0R0#0k0ra9abadafac0r0g0%2f9g0d1-0_0g1!0l0k1-0-0?3f4j0G9V0e0D0?ax0gao9jaFaq370C0`0D9%a49+9-253:9:9`7%3m3;8^2h8`9=8|aV9}9ya5a7a1a2a:0g0p9I0D0E219U0c2$0q0g2f0g0s0W0(250kasaE0@aO0?160(b70?0oaA0l0+0gaiahaaajbl0raQ9)4BaS0O8-48aWa(9{bxa#2iaX7t5s613Sa;9Y3Y9f9haJ9DbK0#120KbP909p0U0Lbr2|9*9;aT0c3M6f5nbua)4u9^a$bE7 b*5$bJ9092040F4jbU9nbL040!b~860#a02#c39L0c0o12b41JaPbs869p9rcgc9cb04190Aa45kcicq4.0J0d125xck3X9Nc84C9H1X9W2`9Qb bR040$cC5kcv5vct539p0q9OcHbKca12cv9wb!b cscz5*9vcR2bcB9PcXcE0scG3ucIc4120zcNcucw6|c,1:cT9#bZ8Zb#8;bw0$6tb+b$9?3M4MbCa%8D5Xdab@a;a:bKb`b|0(c|689Sds2bc512c7c/9ccmcd9lc)4.c(c$9tcmcod09ZcjdI9LcP04cydPcA9Bdv9G049T9VcfcW90cKcMdAb dR5LdUcr12cUdX3}dKdzd/dG12dOd5b 9u04c#d~chdWd+9t9S1fd#d?01cKc{e6dQc~5#d`cSd;d39x9(dUbud86Hdbb;7R4%dgeu5cesdldmdmdody95efdV9qdMc0c2dFek04cVc@c:dZeKcTebcK0jbTeHd:eJeN31c;c?3UbKc.d%d e8a{e*2Pe,d;9$enaRdcd86UetbzaY0$4|exf0bF3Me~eBeCfaeSaI2#0leKcK0+eKe00v0h0h2f0GeUd|d}e+9Rc1fqePebe00Cfw0q0qd4ftbte|9.3m6+e di6)5ef4fM5sfKf9eE042J0k0R0(e23Uc^c9bM9ifefEe?d69=d85wbyfQ5H5ufPdd6F6{3Seoe32EeqfI3l8~37b,bAg2b/bDf57 5I1(64b_933EeKa09Ee%3z9e042#0C2J2i0cav0Ofd0cffgldNfj120s0(0;1,fweQf#eSa@gHfye:eagz9Me^f+a,g0aU6F3OfLf_5Yg8dhg!5!gd9~b gjdngQa6a8bnbmagaeg=ak0t0cgq0egsav2F1-0X0g0k0#1hb81,aybaaHbN46aF02030M0P0r0R2$0gbg0J0o0Dbjbphtg_gT5QgVb(6F5=gZb-3la!9_ga7R5;g*a/f$cD04gwgye.c_04eZhRf%hOhd9kd$f~eIfsf,d cm2qfwh%a,c*04gDgFh!fFe49!gI2PhMh/gLgQe-eRfud!a|h?h(h^fDe`czhy5HbHg4dchD0X49f^igbHfTgfb{b}e!5`9HgMiqdteTiudwc6f!h{fchYhQh#e#e_6xiafHgW3lb*ieey5:4vijg60Xb?3sfah|4.b`0deGhVhNh;0!gGh 120UgBfvi,040Li.gQfzfwbYix1:eXhUi1cJ12d*ej2bd-fwiHj0860C77030g2B0@1-0chghi0raEb6240?hl1-hohqhwf-b%5HdaiOhH6rdfhGf=6FdkiWiXdnfui)i+j4d1i-i/eMjN9Zi?i/fAi;i{i%5kedi gJ90j69PeCbKjb12jd1U0v0Yh6h0h30Qje370n3!0DfYjufGd7g16Gf;g(ewjDk6hKf}h@f iKhz3le~jzjEkgg$iP8?f8g+86b`94gi9ai^gn1N2$2J0OjLi5h.d{e$jSc0jsaEfBj85PiJk2iL0XfKkig(fOk8igfSkp9Lg-a3g/a.hug@bpalan9h1-jqb1gEi*awawg~46fYh1h40:k=8^0A2E0#0x8^a auk08(ke7(f{kShD6`kljA7=f{geb g:hLa;1,8^0#hp2Jk{kI0la_b00h0_0Sb5behnlqhq0?j_0!jjhj0:2G0-l7kdkOkf76k5ld8@kVg6lSa+bKlliXarath0luk{az0(aBa|aD0?0pfXlyaEa~jo0laDa iA3vkNf.g17klTlX28iSf1m3lZ90l#fa24b40J0W1}hrbkg_k(ajlO0gib3m7wm4m8hFb:lg7uhKb^e/e1eWbSfyh*2fh,i/lufBmomq3NidmpiflXiilWm8iljHa390j-04jdg{2C0d3!9i0v2D2FlJhkhmkB0ggrlyapk{dT4em0jwmriNmQkm7jiRmUf6m mzjJmBkBmDhTebbWi@kGdRm{j%b dpipjZirdZe9i4eWizmFcc25dEkGdHiFnpl~e@9!jYj99Lnmdri|3}e)kCiY53dxgol~nP31dCnxkCnEh-eSnDbVd;nGkMepl9mrjyn1mx7jjCmwkj7)kae{lQ7(eslclXk7n?g!7?n8mYb m!jd0Z0_0Caqb8l*0.b90!0C0Rloh9aHj}fYaK0?0v1h2Jha0lkJi9n+n{mrkhn/n@f3n57 82o4nU1:nJgNc1cFnYn%fxnLc0i3e=3PbQnuoSe0mKi;kL5(m}bvm2kRoCo2kUo1ldkXlmn9e7h:k;jMnBeOngo|e(oNc=oPc%12jUi^gOnsjXncj$iBd(j2eKj)cHoJ0}o70gly0vobas37kImMn,0$8nmtn6pvf@oF8mlimXeDfugpgr2fguhPmIp7o_h=itnoivh~nze5pRp0oUp3i79Dpj01plpHg~pJ1-ov0?pLoxh#mN8wpx7 p?m7pyp?a+kbi6lPm1iL8Fp@8mm6pB8EgYimnlcc0.fYnTeSnbp:e+0V8$8J8X8L8U1l0k8Oqq2W2R0v1+qn0V8M9(0-0/0;0l04.