From a6a0fa7d1af95efe107a87a59a48408074c2655c Mon Sep 17 00:00:00 2001 From: Alexandre Date: Sun, 17 Nov 2024 19:08:18 +0100 Subject: [PATCH] experimental changes --- again | Bin 227841 -> 231710 bytes again.cmi | Bin 9049 -> 10057 bytes again.cmo | Bin 28141 -> 32594 bytes again.ml | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++ entrees.txt | 44 +++++++++++----------- sortie.txt | 1 - 6 files changed, 127 insertions(+), 24 deletions(-) diff --git a/again b/again index d3d49520c246b19d08f11a8b32d5fd82961ba6d4..d61c94f4766d6c5423e54005271444a254224c88 100755 GIT binary patch delta 4123 zcmbVOe{9re8Snc({c#6(^jb=<$K7$)UfU~NODO{#ve`>%2Z@2sB@$&DTY&I$0dWd~ zECseq4JOWA;xm_Jn_~O}{=kqe-$kd3n=&&QEQ?NsiQ9|}>DHs|;T$UG=X3Y{b_JcQ zzR9Q0`+VQ$_xrq0??55=_`@^yKVY7+BNuF>!MSw7?yX)@TTxNb4+MZMz&$`EFaxM} z=~_^6`JhKNpSOuF3zlkIfsa;sJ8#nyDx0UIvh= zP%UD8psLeGZG)-S#Hbzg*SS__>h4k7t*Z;RNq;(OW98l0sO``-V>Y1eV|J0L)!WBx zA|7>hSYqmXpo@s=m`ycLcSUA{-U;jmSnWn+L9tnS7Gfr(MHn={)5Q2Br6vgcXQlPy zHe+V$H^*(anWfJ`$=?WJT5Qzeaht~B%mPTGE-lz7xIeyU6S}KlW09E<+5@ZxssOK^ z4SKX-KVHZ3PfjGH;{|&ZWqRT=e1>#z1ZL};@ypin=gv8SU=|8oa{#|ak;lN7vE2Z$ z=ZGx8RT2Tc5jXz!NXI z(X%7Cj)gjCC44iV4ey?{^Jo@(E{1=7y}j?e>yUQ;+=TT^$OINszYocL4wTg-&+5@8 zX$WWmHUMh?M&d7Z#9|(EJq)lFsm?00T3)wRV;=^*vwkfewc*_31z#OMWdSbcU2deF zE^OHptSawiAHXY51OHdk40%nn0v4FYR9lo$F#hE(_4G2}E$}4D#xj2$VE!xFp@^!FH zY5?!;@*DSTU=9%&UHrR9 zknX%8b*S_oq3r-ZdG=|{2k@e4;XZ)YwrQ_O#;n#IK3QJJzTy>o?J!NduORJqBOzUT z#fDZ=)xEO`>h&q>#pg{|q@LVe*z@_br@U??4V7{m@N#48@V#@<4MnExPLCPsHL7_d zH<$w@q8Fzj>Z?Xt&C*;VAI*K@a7d?BNt1cnNma=XtG5JXk#nL(_E#E5hXaz*t3?~q zy#eX)KZ6pNBGAErWc0OwG-zW`nsjYI0y-loKJz0d9F*Zo^JA5Ih#ah!MY^tDl6r=J zR@FmeO#_6VuZLQDgCw0R_0nnd{4D8rwl>H{-4>Sx=A_;qM|EB8h0Y^k72vn^*L%7D;GJQf}0P z%@T8VB_&|YtL4w%YsTk=Ey(c-cIMZNHsxQ2>-re*8wzF2Yh~FZEwVrtreOWAEpn3{ z=MH{0nBSMrUroWnnR34KS|zJ}ZIF1dRh~7k>*;Q!v9V41wIz)pPPEA##+>8lg!ZLn zh2GKu;UA>sN%Kbe>&6Z_Y2P%tOS@+4s=0{p+jHfyD*kpk@6^tdwDG@;N(E`8UfBRZUs!}g(JeW+7b*++-8A{qUA)pH(L$lrlo~Fn%dHSP? z(b5|VvaaP25P?(dmQ6;#@ThHCLiu$7=?0f>bSa<1Cjq`5F4lwlCBT>t^+>{uJ5Th8 z&Z+w)ew`tl+Ml2sp7B-Gyy7gsRlXGQckKS+#^lx=o3}g9Zjn2yO~IM{d9lWfX?&;L x3-xd9l&~+-`{&=@+fgwq^xcye`(E0#_2ulc!Tx~?$$mqBwg+Bb*Ejb_@?X1Bi#-4U delta 1948 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 delta 4408 zcmZWsX;f9$6+ZjCb04To@AS#GaxhT$xacOLYr1*fRvdWOc!_+p-(=@Fa z4Y;+UjTS-@$)M4a)tDF+oZ=W!qec^n#35?hG^^DNrt$XN``)?dWaS5I?fvcP+k2mL z-sMRCg((S>+!f^`va_?Nr;kj3a^0(Y2uTd z16v`78We9s{=nVAgp47&-q?7#aX?uqDb#s6Hecp6dZ35$Ox#DBDlTIc`F{K=G%c5%=xA%#IZ?Vwv5gC0&neh=PU>e@ z%$R_SB4cn_*bvG-#J`2bh2|=-=Og+l;?bHw2(gJLV$fWEvc0|O%FU+hxerX#QVo1;QNOs1b z{ZWy<5c7LRCl{DU3mO_(h{Ee3JN98)`W3#=Gjjs_$lnKxYHVX`M5-bsb`j_6@F{@X zPEm}G$m|$))}Ml(=!X=y5{q@I?d(BsWL5?{C!Bw>mc{%5i&BD@*kMcYQsfxQ&SSJ| zAa03{?ZZ7sD4ylEX9ZTchEw)2ZgRz>RGOm>HgAJ^da7*aM{Magc-fV8AG;uUISwh= ztIZ4>(H9eqGkaxbu#2|W1;wkDbK0ut%k1QjVrwtn^e2HZ)~!OgljivKkZJCkrQYK5{@%v6HN4q6c2GLibAV}57oP{j^wgO3UiqvK2J(XRLcwpX z5Z3A2+cfqfKm%koLe|S%*(8)5y56L*H-WsaH*Rmt{z)@MrJjL2a+T87j+uz z?|-vtk&hbrt6qoC#>eOQ9~APE7)7%XUbbd(4qzLMT?=Cy_)N|V#XpnlKz8D>_&6W? zTy#EJmVU(|-_*pm{%nOBJ1hNKI59q+ixSx)D7@x3HA~a0Qhc3}1J%aRJ zA+!mhT?qSxu-|HIA;3k@4IOeFyt4wo2Du?tXJtUnnVqGG&fMkYz^;kj4oi9mFgM<{ z;GpPmzO)Vj8&%r;1*2U z4U^h=oee@cY1L@~a@DLef=|osuTfO#aaR{F2lj<16)z|Ak-uXqzeC7b{%mSHq{}(c zrSH6uKDKyl1NaK^iXg9q^LR@rUW>;bAh%2&!)iPpn+dQRfuA`PfZCUpZT!2k7TXR#yal<@R3{m~#8C32dW`y)H2M#Y(>LV{ItesoU!Y_D?I*E0Xe$R;E0lE1=*c6rACiCJUw0;xiv$n3*W4 zw5-}w;w`JH1okg8jrz3Sv(h{O^l2z;hM2-FJkQ*KR=C~Dvj`v+`z9ttbe~?ib8GAN Tqi;mzeZQ;oo7UF+#2?`Qvruum diff --git a/again.cmo b/again.cmo index b3c5c66a38d2bf1b89db2c9e77216f79ba89d44c..553a8bcf788c9fcac2b7459d403d1a451c9186ac 100644 GIT binary patch delta 9928 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 delta 7166 zcma)Adw5jUwLib%Oy-rxB$-U!$t08aV=^IuJP2e05rRgI5<+-rj535s-WgsN9cs~{ zq?)inaz9ZAUzZ9h0-vS#^7W=)p_jJUqF_ZYSJ2X{p9Kqw-dL%*Yp*jC(*Dug^JQoM z*4pd0UVEQ2XXc&naQVMrpV!{qRa#Y5b-TOFttbt9n-xWQ()xz|fv{2w!A=@oG*lW9 zG-87D-89Qf%Hg3|^oKi3CF6b?|F1RK_-R10@+E8aKf@B8hFmcmu5uj7`bTltKiP1W zli98LCs-47g;?pL(rANT+-khtWDR~aoQO;ij^qS!EHXtnOnHb9SMBLy zwaFp&X4`}(UKIh8(UcVAMT$2}u}BcdO-_?Js7n-AP4Tda5py#8H8vIfSxbgZTsAw!=rpTvSRAxoXURpJ=(HpYqbWh`wq%j+=azWH ziuWxQ(XwmN!6EC65*gw9sK&R#3lSyWj>?7gP)5X0Oou!fO?pw@WIfbcuq9WQ^k?zm z9k=PS{w!Q~exS?zN|+ZVt?*sbdKF223Tc2wJLyb8nI0l;G?P&N(zoP8bc# z74dAd-ERplB?jk^sqC(Fl}|%bWT(eIpO~0Qv%KV*?4?XYVrkPtLr+6qQWsA{uFGqx zy^L9}>2$PxXo)pt22CyS7qD9hyPMMgueIB>HX zAzK=Buh+K6DyBEYxMM`vZZ%h?6^y6kd=kd%a{e7ms
sZ!3j zz;D_h7wTZTK(p&UdOWsuukC7E)z#bXgNeKgRlqb(b1^S=`GRX^>1liMBHzlc&U@S1 z>IMedH^R)}n_*rpiLo&E$@wLiH%~g~@P-@=k%5#slj`2J;ZD zvF0PXh&2llJ`FOrKK$CeT&8yQ4RL!5N1$9BY>Vz3i&XXOe#lgC-{H0&M*&%!R< z>9GfPd8W(wRJF^~(>Cb!wY9HYIRLwl$aicu%teBa{r?ULqYT~w zv1OX?BH<(fy0sFBM7DPzu}?cTA0qJp+kAw?BY%@i;uxF$8HpzdsGE?ealb<1C1!ky zBpZXTku=QU8zhkr@;`uNt??5`Zk9_r9gtU>w?20ch85(VssBaeX(4lRZCaI~`K0XXhq@E{zNFBxx!W0=7Y z;5fqjuX_}ZF;+bW$3+H1aPa=>o0@`Wq@%9JLUzV2s*T~Xp{07-Zw!e;SAA<>GZ<1h|4%sg< zpl9`d3H;NH$fne2&4TQ63?h-kJ(?DcoN(6IkmF_$kDN*dNyxcJ0&GOiYSuWAGsM7& zoE;2ukaLPbK61`7C_*lkN33ngrSd4Ke>(EA7|lRl1A|KBX|8u6Pr5GQJ8sZ7(Am?` z*5UOb@0e`Sv<1i`uhgPUI>`A61owCXdu|B~AIxs%oYk4^EBeQWyzT8g^?BQlebxqzHJBfj;f`Sa;y z5aoH~k281}1+*cg*^2_LSudlYNj3|QqkvMSM(#%e?KRmPM!}1$If#N|66m5)aA|7j zxxKyJod0it7&zPD+(w~Kh6Eu-SH+bS*08s?QCQF54HQyD^8X$RS90h#QAqntn*T=O zIdN`P()~qllDE4;pOlMu%TPp~1U}M?YB-8j&f^k_t*nVbah7z5t0-Q6SHXVUm_D?;G(r}p@no&xD z2rNOVR>&wyPjTA+i_+`jiOw{?`YM#KkbWNNUy|F`f`Y?DZl^og?S4$pW6m~AZz9c& z*R6T0+XpZ`Ksxm_rXQv@3?D4%>Ge6~8vQ(I}KLh%#z8?_*4|zy{P$3HX$rr8l3z-EeKeFaNO}*+3JEbGVOpKX??E}8I&yFs<<=<< z1}7bqNe8)5evf1ql3Pf~3kgeQ0_C(jBYOQbl$TH84@~l>Oa5#q?;=@6asdf*LPBv} zq;$~84iZt`D&AaE=-1y3Hca0QWef?m zNa!bWPe@oR49CzHPCaUlIVQw>*a}&LtN=jDJg{V zW7zJ3ZR40etSBTrBvYsym65{=P#IugM&*8)w>zvJ%0AdG!1fm+-4qhOW6~A2orlVC z22NC|qNBGhDr^aqClI*`kq;56RlM8VSyk1*Hg}<_iNS1Ctq5i*-yw44JA|X!K?ggm zAIg)6JdMadkuV_E_sz3a@jitOp^9q^>q6C5@!LLoLRbLGFrt7c+KjM0At6U>?vEGG z^@WS{{;1R{t*AFqwU=W*g{s5cv!9^qthl8=H7e{aC?klPi70w=3Hz;B-|w|mY2{r* zl~&#vRIB1jzipWjia^wHM4cbg8%!bLk2l_OvK(}&X6kD-S8a$ywN~}#sHUog-VlXq zs)Rrcs*f;;L-iP+FGCHKov|w1fnoRR{7M<&+YBLchHeXoj0t8@-MJH1S>t&4V@x)a6#p) z%}nxR)>Z~>n6-oR-HchEGWY>%R0fZtCX2yisA&){52hs;o`doa}R^JP}4OfxBTEM31?@d_sM4v{UD-uj_Hj$aoM-fUo$3Y#st)8 zjTuMH8JU7H5wnXJq+mAPF{DYy>^=sWn9UU!voV`nZ_LB&bG%fDIb4d-g*il@d<7_y z8@gOeMjlZk-4)Lv`m6!bUyyXup`&XHP(7!TlX(ksJPcmN911<@B#&MM2Yp(njUPeT zgP2bcGeP{1g=2j~$(#VQ#xZ9vgR_`(n6vr@wc!k|qc)Gh1Zo?_uJw-iI4Cb5widBV z$Mhz9NZ8E%{dWC*CAD0v^q*;X83k+INdrkT@b-?;f03|^JG~$x7~hcbA#-PX`M0%^J$o=C#Ln{>kVlYo-It- z1kVtI74VEs<=#}csM*2XVZ{gYx3DA;cSPK>k+}Pr@)SJO21{0h`J&M$52Pd zCHUo1`x!}o*{VBAN>xSO$-i5q-L4R{Av zxApe6b1HX{SkI**cc|cXQ!s9OmvbexC2_&b)=XqLz$2tQluFVvFbF%JcUCS zdV72WUhkmGw}CTW1l>bewie4qC~R{`*i9bhhto4OMf`Pbl=#c{Vp`0bpxcJ!?_v2L z$@0OFa7jKF=kwV#w_^T~7L~uu<}L5zuR(Gj%|p-)VFj?Fh=d=7gxiFBFkWojv@31? zMY)&e4>11{gMY((s$lzez4=Qt>^S6l@Dt3QHS9Jo>^bu4p##6(7gztyzkm4kAx}VW iDGKP#a|8OYO@Zxd0paHZdec$TTL}jOdcz$adHo+o-lll~ diff --git a/again.ml b/again.ml index 8a8a415..4ae34a5 100644 --- a/again.ml +++ b/again.ml @@ -402,6 +402,32 @@ let build_danger_map (gd : game_data) = done; res ;; +let generate_gain_map (gd : game_data) = + let lines = Array.length gd.laby + and cols = Array.length gd.laby.(0) in + let bsize = gd.players.(gd.player_id).bomb_radius in + let res = Array.make_matrix lines cols 0 in + for l = 0 to lines -1 do + for c = 0 to cols -1 do + if (gd.laby.(l).(c) >= 3) || gd.laby.(l).(c) = 0 then begin + for dir = 0 to 3 do + for w = 0 to bsize do + if (w > 0) || dir = 0 then begin + let nx = l + w * (fst order.(dir)) + and ny = c + w * (snd order.(dir)) in + if is_valid nx ny lines cols then begin + res.(nx).(ny) <- res.(nx).(ny) + 1; + if (gd.laby.(l).(c) >= 3) then + res.(nx).(ny) <- res.(nx).(ny) + 1; + end + end + done + done + end + done + done; + res ;; + (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) @@ -449,6 +475,78 @@ let simulate_bomb_deconstruct (dgs : danger_map) (bx : int) (by : int) (bsize : (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) +let exists_opt f (arr : 'a array) = + if Array.length arr = 0 then + false + else + Array.exists f arr ;; + +let amt_free_adj_spaces (gd : game_data) (x : int) (y : int) = + let lines = Array.length gd.laby + and cols = Array.length gd.laby.(0) in + Array.fold_left + (fun acc (ox, oy) -> + if (is_valid (x+ox) (y+oy) lines cols && gd.laby.(x+ox).(y+oy) <> 1 && gd.laby.(x+ox).(y+oy) <> 2) then acc+1 else acc + ) + 0 + order ;; + +let max_depth = 4 ;; +let is_player_nearby (gd : game_data) = + let lines = Array.length gd.laby + and cols = Array.length gd.laby.(0) in + (* DFS to find whether or not there are nearby players *) + let visited = Hashtbl.create 40 in + Hashtbl.add visited ((gd.players.(gd.player_id).xy.x), (gd.players.(gd.player_id).xy.y)) 1 ; + let rec dfs x y depth = + if Hashtbl.find_opt visited (x, y) = None && depth <= max_depth && (is_valid x y lines cols && gd.laby.(x).(y) <> 1 && gd.laby.(x).(y) <> 2) then begin + Hashtbl.add visited (x, y) 1; + if Array.exists (fun (p : player) -> p.xy.x = x && p.xy.y = y) gd.players then + raise (ReturnBool true) + else begin + for dir = 0 to 3 do + dfs (x + fst order.(dir)) (y + snd order.(dir)) (depth+1) + done + end + end + in + try + dfs (gd.players.(gd.player_id).xy.x +1) (gd.players.(gd.player_id).xy.y) 0; + dfs (gd.players.(gd.player_id).xy.x -1) (gd.players.(gd.player_id).xy.y) 0; + dfs (gd.players.(gd.player_id).xy.x) (gd.players.(gd.player_id).xy.y +1) 0; + dfs (gd.players.(gd.player_id).xy.x) (gd.players.(gd.player_id).xy.y -1) 0; + false + with + | ReturnBool b -> b ;; + +let is_dead_end (gd : game_data) (xstart : int) (ystart : int) (xban : int) (yban : int) = + if not (is_player_nearby gd) then + false (* if no one is nearby, it's safe to go there (hopefully) *) + else begin + let lines = Array.length gd.laby + and cols = Array.length gd.laby.(0) in + let visited = Hashtbl.create 50 in + Hashtbl.add visited (xban, yban) 1 ; + let rec aux x y = + if Hashtbl.find_opt visited (x, y) = None then begin + Hashtbl.add visited (x, y) 1; + if (is_valid x y lines cols && gd.laby.(x).(y) <> 1 && gd.laby.(x).(y) <> 2) then begin + match (amt_free_adj_spaces gd x y) with + | 0 -> failwith "wtf john" + | 1 | 2 -> for dir = 0 to 3 do + aux (x + fst order.(dir)) (y + snd order.(dir)) + done + | _ -> raise (ReturnBool false) + end + end + in + try + aux xstart ystart; + true ; + with + | ReturnBool b -> b + end ;; + let reverse_simulate_bomb (dgs : danger_map) (save : (int * int, float) Hashtbl.t) = Hashtbl.iter (fun (x, y) dt -> @@ -554,6 +652,7 @@ let bfs_for_crate (gd : game_data) (dgs : danger_map) (x0 : int) (y0 : int) (sti let visited = Hashtbl.create 100 in let q = Queue.create () in let interval = Float.pow (0.9) (float_of_int gd.players.(gd.player_id).nspeed) in + let pid = gd.player_id in Queue.add (x0, y0, stime +. interval, 4, 1) q ; @@ -576,6 +675,7 @@ let bfs_for_crate (gd : game_data) (dgs : danger_map) (x0 : int) (y0 : int) (sti if (ct >= stime +. (float_of_int minDist) *. interval) && (is_empty_lst dgs.explosionTimes.(x).(y)) && (* safe *) + (*(not searchCrate || direction = 4 || not (is_dead_end gd (gd.players.(pid).xy.x + fst order.(direction)) (gd.players.(pid).xy.y + snd order.(direction)) gd.players.(pid).xy.x gd.players.(pid).xy.y)) &&*) (not searchCrate || (sees_a_crate gd dgs x y && not dgs.explodedCrates.(x).(y))) && (* sees a crate *) (not searchBonus || dgs.bonusMap.(x).(y)) (* is a bonus *) then begin @@ -635,9 +735,15 @@ let move_crate (gd : game_data) (dgs : danger_map) = (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) + + +(* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) +(* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) + let game_map = parse_input "entrees.txt" ;; if debug_all then print_game_data game_map ;; let danger_data = build_danger_map game_map ;; +let gain_map = generate_gain_map game_map ;; (*Printf.fprintf stderr "\n" ;; print_dangers danger_data ;;*) diff --git a/entrees.txt b/entrees.txt index 7179547..aba0b51 100644 --- a/entrees.txt +++ b/entrees.txt @@ -1,27 +1,25 @@ -6.0 +142.0 3 13 21 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 0 0 2 2 2 2 0 2 2 2 2 2 0 2 2 2 2 0 0 1 -1 0 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 0 1 -1 2 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 -1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 0 1 2 1 2 1 -1 2 0 2 0 0 2 2 2 0 2 2 0 2 2 2 2 2 2 2 1 -1 0 1 2 1 2 1 2 1 0 1 2 1 2 1 2 1 2 1 2 1 -1 2 2 0 2 2 2 2 2 2 2 2 2 0 2 0 2 2 2 2 1 -1 2 1 2 1 2 1 2 1 2 1 0 1 2 1 2 1 2 1 2 1 -1 2 2 2 2 2 0 0 0 2 2 2 2 2 2 2 2 2 2 2 1 -1 0 1 2 1 0 1 2 1 0 1 2 1 2 1 2 1 2 1 0 1 -1 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 1 +1 3 3 0 0 6 0 2 2 2 2 2 2 2 0 2 0 5 5 5 1 +1 3 1 3 1 6 1 2 1 2 1 2 1 2 1 0 1 5 1 5 1 +1 3 3 3 3 6 6 0 2 2 2 0 2 2 0 5 5 5 5 5 1 +1 3 1 3 1 6 1 2 1 2 1 0 1 2 1 0 1 5 1 5 1 +1 3 3 3 6 6 6 0 0 0 2 2 2 2 0 0 5 5 5 5 1 +1 3 1 3 1 6 1 2 1 3 1 2 1 0 1 5 1 4 1 0 1 +1 3 3 3 3 3 3 3 3 3 3 0 0 4 4 5 5 4 4 0 1 +1 3 1 3 1 3 1 3 1 3 1 2 1 4 1 5 1 4 1 4 1 +1 3 3 3 3 3 3 3 3 3 3 0 0 5 5 5 5 4 4 4 1 +1 3 1 6 1 3 1 3 1 3 1 0 1 5 1 5 1 4 1 4 1 +1 6 6 3 3 3 3 3 3 3 0 5 5 5 5 4 4 4 4 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -4 -2 1 1 6.5 -10 19 1 6.5 -2 19 1 6.5 -10 1 1 6.5 -4 -1 2 0 0 0 1 0 0 -11 18 1 0 0 1 0 0 -1 18 2 0 0 1 0 0 -11 2 3 0 0 1 0 0 -0 +2 +3 7 1 144.5 +9 11 4 144.80000000000047 +3 +11 10 0 1 3 4 3 1 +8 13 1 1 1 1 2 2 +2 5 3 0 1 1 2 1 +1 +7 12 4 diff --git a/sortie.txt b/sortie.txt index 7cc0f37..e69de29 100644 --- a/sortie.txt +++ b/sortie.txt @@ -1 +0,0 @@ -4 0 \ No newline at end of file