diff --git a/again b/again index e0fe12e..0dceb20 100755 Binary files a/again and b/again differ diff --git a/again.cmi b/again.cmi index 1737866..09a98ab 100644 Binary files a/again.cmi and b/again.cmi differ diff --git a/again.cmx b/again.cmx index 13f6c12..e853c0e 100644 Binary files a/again.cmx and b/again.cmx differ diff --git a/again.ml b/again.ml index b1f6e5d..81a5941 100644 --- a/again.ml +++ b/again.ml @@ -1162,50 +1162,67 @@ let rec move_land (gd : game_data) (dgs : danger_map) (gn : int array array) = 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.(gd.player_id).nspeed) in if logg then Printf.fprintf stderr "going at (%d, %d) [score=%d]\n" xmax ymax gn.(xmax).(ymax); - (* try to place a bomb *) - let is_safe = is_empty_lst dgs.explosionTimes.(cxi).(cyi) in - let saved_p = simulate_bomb_deconstruct gd dgs cxi cyi gd.players.(pid).bomb_radius (gd.dt +. 5.5) in - let is_good = ref false in + try + if gd.players.(pid).bomb_to_place > 0 && Array.exists (fun (p : player) -> p.id <> pid && p.xy.x = cxi && p.xy.y = cyi) gd.players && (is_empty_lst dgs.explosionTimes.(cxi).(cyi)) then begin + if logg then Printf.fprintf stderr "go away (_2)\n" ; + let saved_ppl = simulate_bomb_deconstruct gd dgs cxi cyi gd.players.(pid).bomb_radius (gd.dt +. 5.5) in + let is_good_p = ref false in + let directn = bfs_for_land ~return_ok:is_good_p true gd dgs cxi cyi xmax ymax (gd.dt -. !remaining_dash *. interval) 1 80 in + if !is_good_p then begin + if logg then Printf.fprintf stderr "fire in the hole (%d)\n" directn ; + action := 1 ; + raise (ReturnInt directn) + end; + reverse_simulate_bomb dgs saved_ppl ; + end; - let result_bomb = bfs_for_land ~return_ok:is_good true gd dgs cxi cyi xmax ymax gd.dt 1 80 in - if is_safe && gd.players.(pid).bomb_to_place > 0 && !is_good && !action <> 2 then begin - if logg then Printf.fprintf stderr "kaboom\n" ; - action := 1 ; - result_bomb - end - else begin - reverse_simulate_bomb dgs saved_p ; + (* try to place a bomb *) + let is_safe = is_empty_lst dgs.explosionTimes.(cxi).(cyi) in + let saved_p = simulate_bomb_deconstruct gd dgs cxi cyi gd.players.(pid).bomb_radius (gd.dt +. 5.5) in + let is_good = ref false in - let res = bfs_for_land ~return_ok:is_good false gd dgs cxi cyi xmax ymax gd.dt 1 80 in - if !is_good then begin - if logg then Printf.fprintf stderr "going to kaboom\n" ; - res + let result_bomb = bfs_for_land ~return_ok:is_good true gd dgs cxi cyi xmax ymax (gd.dt -. !remaining_dash *. interval) 1 80 in + if is_safe && gd.players.(pid).bomb_to_place > 0 && !is_good && !action <> 2 then begin + if logg then Printf.fprintf stderr "kaboom\n" ; + action := 1 ; + result_bomb end else begin - if logg then Printf.fprintf stderr "no explosion ?\n" ; - let res = bfs_for_land ~leniency:20 ~return_ok:is_good false gd dgs cxi cyi xmax ymax gd.dt 1 80 in + reverse_simulate_bomb dgs saved_p ; + + let res = bfs_for_land ~return_ok:is_good false gd dgs cxi cyi xmax ymax (gd.dt -. !remaining_dash *. interval) 1 80 in if !is_good then begin - if logg then Printf.fprintf stderr "found\n"; + if logg then Printf.fprintf stderr "going to kaboom\n" ; res end else begin - if logg then Printf.fprintf stderr "Needs dash lmao (_2)\n"; - if !remaining_dash <> 0. && gd.players.(pid).ndash > 0 then begin - if logg then Printf.fprintf stderr "-------------- Lets rewind time for a bit (_2) --------------\n"; - remaining_dash := 3. ; - action := 2 ; - move_land gd dgs gn + if logg then Printf.fprintf stderr "no explosion ?\n" ; + let res = bfs_for_land ~leniency:20 ~return_ok:is_good false gd dgs cxi cyi xmax ymax (gd.dt -. !remaining_dash *. interval) 1 80 in + if !is_good then begin + if logg then Printf.fprintf stderr "found\n"; + res end else begin - if logg then Printf.fprintf stderr "Now you're screwed (_2)\n" ; - 4 + if logg then Printf.fprintf stderr "Needs dash lmao (_2)\n"; + if !remaining_dash <> 0. && gd.players.(pid).ndash > 0 then begin + if logg then Printf.fprintf stderr "-------------- Lets rewind time for a bit (_2) --------------\n"; + remaining_dash := 3. ; + action := 2 ; + move_land gd dgs gn + end + else begin + if logg then Printf.fprintf stderr "Now you're screwed (_2)\n" ; + 4 + end end end - end - end ;; + end + with + | ReturnInt k -> k ;; (* ---------------------------------------------------------------------------------------------------------------------------------------------------- *) diff --git a/again.o b/again.o index 6ab9cc2..2b7a498 100644 Binary files a/again.o and b/again.o differ diff --git a/entrees.txt b/entrees.txt index 0cf82b0..15ab15d 100644 --- a/entrees.txt +++ b/entrees.txt @@ -1,31 +1,26 @@ -169.0 -1 +250.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 3 3 3 3 6 6 6 4 4 4 4 4 4 4 4 4 4 5 5 1 -1 3 1 3 1 6 1 6 1 0 1 0 1 0 1 4 1 5 1 5 1 -1 3 6 6 6 6 6 3 6 3 0 0 4 5 4 4 4 4 4 5 1 -1 6 1 3 1 3 1 3 1 3 1 0 1 5 1 4 1 5 1 5 1 -1 6 0 6 6 6 3 3 3 3 3 3 3 3 3 3 3 5 4 5 1 -1 6 1 3 1 3 1 3 1 3 1 3 1 5 1 4 1 5 1 5 1 -1 6 3 3 3 3 3 3 3 3 3 3 3 5 5 4 5 5 5 5 1 -1 6 1 6 1 3 1 3 1 3 1 3 1 5 1 4 1 5 1 4 1 -1 6 6 3 3 3 5 5 5 3 5 3 5 5 5 5 5 5 5 5 1 -1 6 1 6 1 3 1 3 1 0 1 3 1 0 1 5 1 5 1 4 1 -1 6 3 3 3 3 3 3 3 3 0 5 5 5 5 5 5 5 5 5 1 +1 3 6 6 6 6 6 3 6 4 6 3 5 6 5 6 5 5 5 5 1 +1 3 1 3 1 6 1 3 1 4 1 3 1 3 1 6 1 5 1 5 1 +1 6 3 3 3 4 3 6 3 3 3 3 4 3 4 6 4 4 5 5 1 +1 3 1 3 1 4 1 4 1 6 1 3 1 3 1 6 1 5 1 5 1 +1 3 3 4 4 4 4 4 6 6 6 3 6 6 6 6 6 3 3 5 1 +1 6 1 4 1 4 1 4 1 6 1 3 1 3 1 6 1 5 1 4 1 +1 4 3 6 4 4 3 3 3 3 3 3 3 3 3 6 3 3 3 5 1 +1 6 1 4 1 4 1 4 1 6 1 3 1 3 1 6 1 5 1 4 1 +1 3 6 6 6 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 1 +1 6 1 4 1 6 1 4 1 6 1 3 1 3 1 3 1 4 1 4 1 +1 6 6 4 3 6 3 6 3 3 3 3 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -7 -6 13 5 169.34300000000087 -3 10 4 169.5 -7 12 5 170.8010000000009 -2 11 4 171.5 -6 15 5 173.40000000000057 -1 10 4 173.5 -9 12 5 174.44600000000096 +4 +3 14 4 251.5 +9 12 3 252.5 +8 13 3 254.5 +11 10 6 255.00000000000082 3 -8 15 0 1 1 5 4 2 -1 9 1 0 0 4 3 1 -9 11 2 3 0 5 3 4 -2 -10 9 0 -4 11 1 +11 9 0 1 2 6 1 4 +6 13 1 0 0 3 4 2 +6 13 3 0 1 4 2 4 +0