From 1f47adad37b14eeb206f0174cd4d29841a30d190 Mon Sep 17 00:00:00 2001 From: Alexandre Date: Mon, 11 Nov 2024 21:40:29 +0100 Subject: [PATCH] added claim function + tweaked some numbers --- entrees.txt | 44 +++++----- main | Bin 231154 -> 236052 bytes main.cmi | Bin 9462 -> 9916 bytes main.cmo | Bin 32972 -> 38799 bytes main.ml | 227 ++++++++++++++++++++++++++++++++++++++++------------ main_2.sav | 2 +- 6 files changed, 202 insertions(+), 71 deletions(-) diff --git a/entrees.txt b/entrees.txt index 5145141..75b2d07 100644 --- a/entrees.txt +++ b/entrees.txt @@ -1,24 +1,26 @@ -182.62000000000037 -2 +205.50000000000065 +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 3 3 3 3 3 3 3 3 3 2 0 0 5 5 5 5 5 5 5 1 -1 3 1 3 1 3 1 0 1 0 1 2 1 0 1 5 1 5 1 5 1 -1 3 3 3 3 3 3 3 2 3 2 2 2 2 5 5 5 5 5 5 1 -1 3 1 3 1 3 1 3 1 3 1 2 1 2 1 5 1 5 1 5 1 -1 3 0 3 3 3 3 3 3 3 3 3 0 2 0 5 5 5 5 5 1 -1 0 1 0 1 3 1 3 1 3 1 4 1 0 1 5 1 5 1 2 1 -1 0 0 6 6 3 3 3 3 3 0 4 0 5 5 5 5 5 4 4 1 -1 0 1 6 1 6 1 3 1 3 1 4 1 4 1 5 1 4 1 4 1 -1 6 6 6 6 6 6 4 4 3 4 4 4 4 4 4 4 4 5 4 1 -1 6 1 6 1 6 1 6 1 3 1 4 1 4 1 5 1 4 1 4 1 -1 6 6 6 6 6 6 6 0 3 4 4 4 4 4 4 4 4 4 4 1 +1 6 3 3 3 4 4 4 4 6 6 6 6 6 6 4 6 5 6 6 1 +1 6 1 3 1 6 1 6 1 4 1 6 1 6 1 4 1 5 1 5 1 +1 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 4 6 5 1 +1 6 1 3 1 6 1 6 1 4 1 6 1 6 1 4 1 4 1 5 1 +1 6 6 6 6 6 6 6 6 4 6 6 4 6 4 4 4 4 4 4 1 +1 6 1 6 1 6 1 6 1 3 1 6 1 6 1 4 1 4 1 4 1 +1 6 6 6 6 6 6 4 4 4 4 6 4 4 4 4 4 4 4 4 1 +1 6 1 6 1 6 1 6 1 3 1 6 1 6 1 4 1 4 1 4 1 +1 6 6 6 6 3 3 3 4 3 3 6 3 3 3 4 4 4 4 4 1 +1 6 1 6 1 6 1 6 1 3 1 6 1 3 1 3 1 4 1 4 1 +1 6 6 6 3 6 3 3 3 3 3 3 3 3 3 3 3 4 3 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -2 -6 11 2 185.56136399999963 -9 13 4 186.85000000000056 -2 -8 13 1 2 3 4 1 3 -7 15 2 2 3 2 1 1 -1 -2 9 1 +4 +5 9 5 206.50000000000063 +5 18 2 207.00000000000085 +7 10 5 209.20000000000064 +11 15 4 209.69300000000123 +3 +11 17 1 3 2 4 1 3 +3 19 2 1 2 2 1 3 +8 9 3 1 4 5 4 3 +0 diff --git a/main b/main index ef1fc65cda517f559142a4f80fe48236f5e6ba47..ae859d2dfa8af438f92985da7580388e64391c25 100755 GIT binary patch delta 4587 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 J8r*{RzX8?s0|x*A diff --git a/main.cmi b/main.cmi index bd5ae92000a722b7bf7eed21777641240c86eaf3..3bc2c548e054bb837fe7e92452b4628f97903afd 100644 GIT binary patch delta 4688 zcmZu#X+Tuh6@KT})h5P3 zPK;~nmZVXmA;C3OgZmcIn8Y=17}tpV);7-M-aB*Oy+8Vg`ObIG`ObH@H*a|K^4472 z^NtB+saaWBFQ=rX%$WDdc13BwSy6n$6vaA9QDTnO+aja39c^l?TiJeGMMc?*_By+& zKfI{e!F8cNH!XZS8Ph@~_G0~eUE%BcCJVIGpG*yJqT?ab_$9PLBJ99^&>k*hF{Hsy zxCjQqPP_{7a1H&{bhwIkwKrVBH`PI~3lFL`)pZ+hsy$TKEwq_3R97qh-qc5R-NXf^ zKJYUhH)X&L4AwH?I{rq>h21z$i&I^9aii8tb=|>MZDjZ!YUE#%k$X5o?-8+=&Q04c z@%M4D-ZNq!<3E)62iT&gMeJvMuEamYPCi}X0FLlU2zEV^1|H)~pHw)An|%^M$1^_t zK*MK!2StO(ajOzG;SAp#P;i&8J=oj)`Sn#@PjQ%E|6teuq>*26g

9`Y*Ql z^$T`Akw*T5ss5wj5WeL<9DMP-za4zg_RNNqZ;m$Yu+u3I5Xo*ovNSDH?9cbu{S4{> zy#^lk6lv*FP5{%<9!gXok%^JwAVVhDKp{9YAO)HmHw6R&9KqdzHVDPbfk|)_!-A|3 zhFyc=;aeOWWDN?Jq#|%iP`A#<$l@>8p;U+BWlfDb6iFFvBpiv&K`Fz(^SIX45z>&E z+1AxRNSx*W9dCD(;W^qsF*qzZ8NNqnur0 zuo)=cKnds*lG5b|uVGj(mACU4hAk4;9`i$@J0}|D9SqdbK%ETK8CQg4n2&SuW=W_E z^%jt1q$XoXXlCjOo~lWyUFm`+NkliJsyj{%?UsF#RcZO&$AdeC7}rd+O1c#8RHLeg zfzt3|XcnA8YnT;!GDp3Pv2+|6*4uL0fip>#esppNP`BKs=r15Sk9%wYq#U5=kQ!jX{ zw53wgAgV0eA8b?&!NqMdEf zk*|>H<~G^+UN>4#Db+!n%EUOMw!lDzc+{M2zU*nOtNo?=B8<00bSS1Ozm@0`qjtQ3 zN^!I$m3(c@u~;Ksqmwns=jc!PMWh9fShCGmy?r1}5-i8KsMthsS4iAM3BPW%sl+i+ z8GWvCkwH>Y68!=D_Lb65wS*^OgW1x#p-I;o0qP*VEu<%qU_B4I+U?7AZ5JpF z_GJyr($Q`;J3+hd-5Fh*Eon{Vi#}H(-{9o?5?RB^MH2ZYCz~X)mXmu8(gN;3GggPU z4HDebupv4w2i#7BQ~o00bgz!-U3T=u2~z$llKzH)F)>bYBbC4Ns*hNe_=ZzvimF*W zX&p(b)3r-tNUVW35 zrm@gFHC?>ID2q7fC-N3^E?96&I4AC<@*(HM^HupLS76)N z=#eW0@sU?l3u3#Zi;Jy%EV4e~Sy6PuO{HQ)ye}%B;@sF6=PEI_nj0P~xHY6+8zbV+ z_;Ro1U>ygabI`!S7aV-aK_dt2y}+q#;M7JAHgT|-gDq@t7X#dZ0U8YOBU`(K2R62~ zYd|?cuXeYBit=hlX?ay%L8YU*2(+KQPZf2rn8a7~fU9>Y;q)A^fAdaTS*Nw2Ccu#O zFl007w2lXRS*LBF+@YOPORMr6o-TRiMUKjGZ-91_H*<()+xT9L@Z77>Y)jU76XMA& z5%22C*P^b8th|2IUWX@RW82fCeHhdZFmwbA9ZiB}9=yg(odx9)#>YiCTe*YjLTNX5 zFxlgvhB-JS67~ovo=?g?dUU3Wq5XV~4sdXgEmkY2{bBe97`~-Rcj~uzw1*jc3SgqE zl~hnvR+cxhvZA=O8nj#d{^>h~{vm$+_6zPCwo`e6ILv!Db8v*3@bLll9mwC65Bd8@ zdYopIi%sV&;M08B|xGahQnh{i%5)H01v0rIKa?uA9;CY9usI3^V35!(*X?sL(B!tfm` zx=_S-`Lf(&8@dWi-Js?;)SM=bR`bAlopss*FphTW;OPO{1M=fgH;LbM%6%rX0Zi#o zyBuoi+HT~*8m6%appa^GEOeBY6jfG%_K=FGsdVAg6t;Y;g}nz1;>LJ$-vdDY1892S*%E~_PhnAmtdL|ro|D7+dN2Q5-xxeDv>;a z*vNAfRF_szH&1YTLR9bDVpdQ2qPysN`6^%<0MmNFv~&`X$B`%KPbGar0mfr!ySUI3 ab5i{0M< delta 4264 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 E1Y4szu>b%7 delta 8744 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 diff --git a/main.ml b/main.ml index c39c49b..b9c1383 100755 --- a/main.ml +++ b/main.ml @@ -329,6 +329,21 @@ let evaluate_dangers (gd : game_data) = done done ; + (* add players *) + for p = 0 to gd.nplayers -1 do + if p <> gd.player_id then begin + let player_dgr = (Danger (gd.dt +. 5.5)) in + for d = 0 to 3 do + for o = 0 to gd.players.(p).bomb_radius do + let nx = gd.players.(p).xy.x + o*(fst order.(d)) + and ny = gd.players.(p).xy.y + o*(snd order.(d)) in + if is_valid nx ny lines cols then + res.(nx).(ny) <- danger_priority res.(nx).(ny) player_dgr ; + done + done + end + done; + (* add bonuses *) for b = 0 to gd.nboosts -1 do res.(gd.boosts.(b).xy.x).(gd.boosts.(b).xy.y) <- danger_priority (res.(gd.boosts.(b).xy.x).(gd.boosts.(b).xy.y)) Bonus @@ -401,8 +416,10 @@ let cell_values (gd : game_data) = let cx = ln + w*(fst order.(dir)) and cy = cl + w*(snd order.(dir)) in if not !halt && is_valid (cx) (cy) lines cols then begin - if gd.laby.(cx).(cy) <> 1 && gd.laby.(cx).(cy) <> 2 then (* non-wall *) + if gd.laby.(cx).(cy) = 0 then (* unclaimed tile *) res.(cx).(cy) <- res.(cx).(cy) + 1 + else if gd.laby.(cx).(cy) >= 3 then (* opponent tile *) + res.(cx).(cy) <- res.(cx).(cy) + 2 else halt := true ; end @@ -486,7 +503,6 @@ let has_a_safe_path_origin_2 (cx0 : int) (cy0 : int) (lines : int) (cols : int) Hashtbl.add visited (cx0, cy0) 1 ; - Queue.add (cx0+1, cy0, simt +. interval, 2) q ; Queue.add (cx0-1, cy0, simt +. interval, 0) q ; Queue.add (cx0, cy0+1, simt +. interval, 1) q ; @@ -498,6 +514,7 @@ let has_a_safe_path_origin_2 (cx0 : int) (cy0 : int) (lines : int) (cols : int) let (cx, cy, cur_t, direct) = Queue.pop q in if (Hashtbl.find_opt visited (cx, cy) = None && is_valid cx cy lines cols && level_of_danger dgs.(cx).(cy) >= cur_t) then begin + (* cell is unvisited, wont kill the player and is within range *) Hashtbl.add visited (cx, cy) 1 ; if cur_t > simt +. (float_of_int maxdepth) *. interval then (* too deep *) raise (ReturnInt 4) @@ -526,48 +543,9 @@ let has_a_safe_path_origin_2 (cx0 : int) (cy0 : int) (lines : int) (cols : int) (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) -let is_safe = function - | Safe | Danger _ | Bonus -> true - | Fatal _ | Blocked -> false ;; - -let move_safe (gd : game_data) (dgs : danger array array) = - (* use this whenever you are standing on a non-safe tile *) - (* Strat : find the shortest, safest path *) - let pid = gd.player_id in - let interval = Float.pow 0.9 (float_of_int gd.players.(pid).nspeed) in - - if debug_all then Printf.fprintf stderr "I = %f\n" interval ; - - let lines = Array.length gd.laby - and cols = Array.length gd.laby.(0) in - - (* BFS to find the nearest safe spot (if it exists) *) - try - (* 0. if you're standing on a safe tile, stay there *) - let (cx, cy) = (gd.players.(pid).xy.x, gd.players.(pid).xy.y) in - if dgs.(cx).(cy) = Safe then begin - current_status := BlowUpCrates ; - raise (ReturnInt 4) ; - end; - - (*let result = has_a_safe_path (cx) (cy) gd.dt in*) - let result = has_a_safe_path_origin_2 cx cy lines cols gd.dt interval gd dgs [|Bonus|] [||] [|Blocked|] [||] 20 in - - if result <> 4 then result else begin - let result2 = has_a_safe_path_origin_2 cx cy lines cols gd.dt interval gd dgs [|Safe|] [||] [|Blocked|] [||] 80 in - if result2 <> 4 then result2 - else begin - (* you're probably dead if the code reaches here... *) - if debug_all then Printf.fprintf stderr "[escape] Attempt F...\n"; - Printf.fprintf stderr "well shit\n" ; - 4 - end - end - with - | ReturnInt k -> k ;; - -(* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) -(* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) +let contains_crate (gd : game_data) = + Array.fold_left + (fun b1 lst -> b1 || (Array.fold_left (fun b2 tile -> b2 || (tile = 2)) false lst)) false gd.laby ;; let is_a_crate_nearby (gd : game_data) (dgs : danger array array) = let pid = gd.player_id @@ -622,7 +600,7 @@ let move_explore (gd: game_data) (dgs : danger array array) = res2 end else begin - if false && exit then (* TODO *) + if exit then (* TODONE *) current_status := ClaimLand ; Printf.fprintf stderr "Exited.\n" ; 4 @@ -672,9 +650,157 @@ let move_explore (gd: game_data) (dgs : danger array array) = (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) +let cell_profit (d_from_p : int) (gain : int) = + (100000 * gain * (1 + ln_b 7 gain)) / d_from_p ;; + +let move_claim (gd : game_data) (dgs : danger array array) (gns : int array array) = + let lines = Array.length gd.laby + and cols = Array.length gd.laby.(0) in + let pid = gd.player_id in + let cxi = gd.players.(pid).xy.x + and cyi = gd.players.(pid).xy.y in + let interval = Float.pow 0.9 (float_of_int gd.players.(pid).nspeed) in + + let distances = Array.make_matrix lines cols (-1) in + + (* 1st BFS to calculate the distances *) + let visited = Hashtbl.create 100 in + let q = Queue.create () in + + Hashtbl.add visited (cxi, cyi) 1 ; + distances.(cxi).(cyi) <- 1 ; + + Queue.add (cxi+1, cyi, gd.dt +. interval, 2) q ; + Queue.add (cxi-1, cyi, gd.dt +. interval, 2) q ; + Queue.add (cxi, cyi+1, gd.dt +. interval, 2) q ; + Queue.add (cxi, cyi-1, gd.dt +. interval, 2) q ; + + while not (Queue.is_empty q) do + let (cx, cy, cur_t, dist) = Queue.pop q in + + if (Hashtbl.find_opt visited (cx, cy) = None && is_valid cx cy lines cols && dgs.(cx).(cy) <> Blocked && level_of_danger dgs.(cx).(cy) >= cur_t) then begin + (* cell is unvisited, is not a wall, wont kill the player and is within range *) + Hashtbl.add visited (cx, cy) 1 ; + distances.(cx).(cy) <- dist ; + for dir = 0 to 3 do + let newx = cx + fst order.(dir) + and newy = cy + snd order.(dir) in + Queue.add (newx, newy, cur_t +. interval, dist+1) q + done + end + done; + + (* compute the best value *) + let maxi_gain = ref 0 in + let maxi_i = ref (-1) + and maxi_j = ref (-1) in + Array.iteri + (fun i lst -> Array.iteri + ( + fun j elt -> + if (distances.(i).(j) <> -1) then begin maxi_gain := max (!maxi_gain) (cell_profit distances.(i).(j) gns.(i).(j)); maxi_i := i ; maxi_j := j end + ) + lst + ) + gd.laby ; + + (* 2nd BFS to find the direction, if you're not standing on the tile *) + try + if cell_profit distances.(cxi).(cyi) gns.(cxi).(cyi) = !maxi_gain then begin + if gd.players.(pid).nbomb_atonce > 0 then begin + (* simulate the placement of a bomb to ensure a safe escape route*) + let bsize = gd.players.(pid).bomb_radius in + + let bomb_hash = Hashtbl.create (4 * (bsize +1)) in + let saved_dgs = Hashtbl.create (4 * (bsize +1)) in + for dir = 0 to 3 do + for w = 0 to bsize do + Hashtbl.add bomb_hash (cxi + w*(fst order.(dir)), cyi + w*(snd order.(dir))) (Danger (gd.dt +. 5.5)) ; + done + done; + Hashtbl.iter + (fun (kx, ky) v -> + if is_valid kx ky lines cols then begin + Hashtbl.add saved_dgs (kx, ky) dgs.(kx).(ky) ; + dgs.(kx).(ky) <- danger_priority dgs.(kx).(ky) v + end + ) + bomb_hash ; + let result0 = has_a_safe_path_origin_2 cxi cyi lines cols gd.dt interval gd dgs [|Safe; Bonus|] [||] [|Blocked|] [||] 80 in + Hashtbl.iter (fun (k1, k2) v -> dgs.(k1).(k2) <- v) saved_dgs ; + + if result0 <> 4 then begin + action := 1 ; + current_status := EscapeDeath ; + raise (ReturnInt result0) + end + end; + raise (ReturnInt 4) + end + else if !maxi_i = (-1) then begin + current_status := EscapeDeath ; + raise (ReturnInt (has_a_safe_path_origin_2 cxi cyi lines cols gd.dt interval gd dgs [|Bonus; Safe|] [||] [|Blocked|] [||] 80)) + end + else begin + let memo = gd.laby.(!maxi_i).(!maxi_j) in + gd.laby.(!maxi_i).(!maxi_j) <- (-2) ; + let result = has_a_safe_path_origin_2 cxi cyi lines cols gd.dt interval gd dgs [||] [|-2|] [|Blocked|] [||] 80 in + gd.laby.(!maxi_i).(!maxi_j) <- memo ; + result + end + with + | ReturnInt k -> k ;; + +(* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) +(* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) + +let move_safe (gd : game_data) (dgs : danger array array) (gns : int array array)= + (* use this whenever you are standing on a non-safe tile *) + (* Strat : find the shortest, safest path *) + let pid = gd.player_id in + let interval = Float.pow 0.9 (float_of_int gd.players.(pid).nspeed) in + + if debug_all then Printf.fprintf stderr "I = %f\n" interval ; + + let lines = Array.length gd.laby + and cols = Array.length gd.laby.(0) in + + (* BFS to find the nearest safe spot (if it exists) *) + try + (* 0. if you're standing on a safe tile, switch mode *) + let (cx, cy) = (gd.players.(pid).xy.x, gd.players.(pid).xy.y) in + if dgs.(cx).(cy) = Safe then begin + if contains_crate gd then begin + current_status := BlowUpCrates ; + raise (ReturnInt (move_explore gd dgs)) ; + end else begin + current_status := ClaimLand ; + raise (ReturnInt (move_claim gd dgs gns)) ; + end + end; + + (*let result = has_a_safe_path (cx) (cy) gd.dt in*) + let result = has_a_safe_path_origin_2 cx cy lines cols gd.dt interval gd dgs [|Bonus|] [||] [|Blocked|] [||] 20 in + + if result <> 4 then result else begin + let result2 = has_a_safe_path_origin_2 cx cy lines cols gd.dt interval gd dgs [|Safe|] [||] [|Blocked|] [||] 80 in + if result2 <> 4 then result2 + else begin + (* you're probably dead if the code reaches here... *) + Printf.fprintf stderr "well shit\n" ; + 4 + end + end + with + | ReturnInt k -> k ;; + +(* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) +(* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) + let update_strat (gd : game_data) (dgs : danger array array) = match dgs.(gd.players.(gd.player_id).xy.x).(gd.players.(gd.player_id).xy.y) with | Safe -> () - | Danger k -> current_status := EscapeDeath + | Danger k when k < 3.0 -> current_status := EscapeDeath + | Danger k -> () | Bonus -> () | Fatal k -> (* should not happen *) current_status := EscapeDeath | Blocked -> failwith "did you just suffocate the player ?" ;; @@ -691,6 +817,8 @@ let debug_game_data (gd : game_data) = (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) +Printf.fprintf stderr "XXXXXXXX\n" ;; + let game_d = parse_input "entrees.txt" ;; let dangers = evaluate_dangers game_d ;; let gains = cell_values game_d ;; @@ -711,7 +839,7 @@ let chosen = ref 0 ;; let main_actions () = match !current_status with | EscapeDeath -> - chosen := move_safe game_d dangers ; + chosen := move_safe game_d dangers gains ; Printf.printf "%d " !chosen | BlowUpCrates -> if dangers.(game_d.players.(game_d.player_id).xy.x).(game_d.players.(game_d.player_id).xy.y) = Safe then begin @@ -720,11 +848,12 @@ let main_actions () = match !current_status with end else begin current_status := EscapeDeath ; - chosen := move_safe game_d dangers ; + chosen := move_safe game_d dangers gains ; Printf.printf "%d " !chosen end | ClaimLand -> - () + chosen := move_claim game_d dangers gains ; + Printf.printf "%d " !chosen | KillPlayers -> () ;; diff --git a/main_2.sav b/main_2.sav index 56a6051..d8263ee 100644 --- a/main_2.sav +++ b/main_2.sav @@ -1 +1 @@ -1 \ No newline at end of file +2 \ No newline at end of file