diff --git a/src/battlesnake.rs b/src/battlesnake.rs index 1881e19..1817ff7 100644 --- a/src/battlesnake.rs +++ b/src/battlesnake.rs @@ -40,6 +40,20 @@ pub struct Coord { pub y: usize, } +pub struct Line<'a> { + pub start: &'a Coord, + pub end: &'a Coord, +} + +impl Line { + fn manhattan<'a>(self: &'a Line) -> u32 { + let abs_x = (self.end.x as i32 - self.start.y as i32).abs(); + let abs_y = (self.end.y as i32 - self.start.y as i32).abs(); + + (abs_x - abs_y) as u32 + } +} + #[derive(Default, Debug, Clone, PartialEq, serde_derive::Serialize, serde_derive::Deserialize)] pub struct Snake { pub id: String, diff --git a/src/main.rs b/src/main.rs index 389ae39..8bf1b85 100644 --- a/src/main.rs +++ b/src/main.rs @@ -33,29 +33,26 @@ fn make_move(msg: Json) -> Json &battlesnake::Coord { - let head = gs.you.body[0]; +fn find_target<'a>(gs: &'a battlesnake::SnakeRequest, g: &Grid) -> &'a battlesnake::Coord { + let head = &gs.you.body[0]; if gs.you.health > 30 { - let mut lowestScore: usize = 99999; - let mut coord: &battlesnake::Coord; + let mut lowestScore: u32 = 99999; + let mut coord: &battlesnake::Coord = &gs.you.body.last().unwrap(); for food in &gs.board.food { - let score = g.distance(&(head.x, head.y), &(food.x, food.y)); + let score = battlesnake::Line{start: head, end: food}.manhattan(); if score < lowestScore { lowestScore = score; coord = food; @@ -73,5 +70,6 @@ fn main() { index, begin, ping, + make_move, ]).launch(); }