Up.
This commit is contained in:
parent
3a4782b32e
commit
6c9ada0614
1 changed files with 91 additions and 0 deletions
91
coders-strike-back/code2.ml
Normal file
91
coders-strike-back/code2.ml
Normal file
|
@ -0,0 +1,91 @@
|
|||
(* Auto-generated code below aims at helping you parse *)
|
||||
(* the standard input according to the problem statement. *)
|
||||
let open Printf in
|
||||
let debug = fprintf stderr in
|
||||
|
||||
let first_turn = ref true in
|
||||
let old_x = ref 0 in
|
||||
let old_y = ref 0 in
|
||||
|
||||
(* game loop *)
|
||||
while true do
|
||||
(* nextcheckpointx: x position of the next check point *)
|
||||
(* nextcheckpointy: y position of the next check point *)
|
||||
(* nextcheckpointdist: distance to the next checkpoint *)
|
||||
(* nextcheckpointangle: angle between your pod orientation and the direction of the next checkpoint *)
|
||||
|
||||
let line = input_line stdin in
|
||||
let x, y, nextcheckpointx, nextcheckpointy, nextcheckpointdist, nextcheckpointangle =
|
||||
Scanf.sscanf line "%d %d %d %d %d %d" (fun x y nextcheckpointx nextcheckpointy nextcheckpointdist nextcheckpointangle -> (x, y, nextcheckpointx, nextcheckpointy, nextcheckpointdist, nextcheckpointangle))
|
||||
in
|
||||
|
||||
if !first_turn then begin
|
||||
old_x := x ;
|
||||
old_y := y ;
|
||||
first_turn := false
|
||||
end ;
|
||||
|
||||
let d_x = x - !old_x in
|
||||
let d_y = y - !old_y in
|
||||
|
||||
let future_x = x + 2 * d_x in
|
||||
let future_y = x + 2 * d_y in
|
||||
|
||||
let line = input_line stdin in
|
||||
let opponentx, opponenty = Scanf.sscanf line "%d %d" (fun opponentx opponenty -> (opponentx, opponenty)) in
|
||||
|
||||
(* Write an action using print_endline *)
|
||||
(* To debug: prerr_endline "Debug message"; *)
|
||||
|
||||
let ckpt_ray = 600 in
|
||||
|
||||
(* You have to output the target position *)
|
||||
(* followed by the power (0 <= thrust <= 100) *)
|
||||
(* i.e.: "x y thrust" *)
|
||||
let is_here = nextcheckpointdist < ckpt_ray in
|
||||
let is_near = nextcheckpointdist < ckpt_ray * 4 in
|
||||
let is_far = nextcheckpointdist >= ckpt_ray * 6 in
|
||||
|
||||
let is_aligned = nextcheckpointangle > -5 && nextcheckpointangle < 5 in
|
||||
let is_near_aligned = nextcheckpointangle > -15 && nextcheckpointangle < 15 in
|
||||
let is_wide_aligned = nextcheckpointangle > -30 && nextcheckpointangle < 30 in
|
||||
|
||||
let is_aside = nextcheckpointangle > -60 || nextcheckpointangle < 60 in
|
||||
let is_behind = nextcheckpointangle >= 90 || nextcheckpointangle <= -90 in
|
||||
let use_boost = is_aligned && is_far in
|
||||
|
||||
let target_x = (future_x + nextcheckpointx) / 2 in
|
||||
let target_y = (future_y + nextcheckpointy) / 2 in
|
||||
|
||||
debug "angle = %d\n%!" nextcheckpointangle ;
|
||||
|
||||
let thrust =
|
||||
(*
|
||||
if is_aligned && is_far then 100
|
||||
else if is_aligned && is_near then 80
|
||||
|
||||
else if is_near_aligned && is_far then 80
|
||||
else if is_near_aligned && is_near then 70
|
||||
|
||||
else if is_wide_aligned && is_far then 60
|
||||
else if is_wide_aligned && is_near then 50
|
||||
|
||||
else if is_aside then 40
|
||||
else
|
||||
|
||||
*)
|
||||
|
||||
if is_aside then 20
|
||||
else if is_behind then 2
|
||||
else 100
|
||||
in
|
||||
|
||||
let power_str = match use_boost with
|
||||
| false -> string_of_int thrust
|
||||
| true -> "BOOST"
|
||||
in
|
||||
|
||||
printf "%d %d %s\n%!" target_x target_y power_str ;
|
||||
();
|
||||
done;
|
||||
|
Loading…
Reference in a new issue