From fc1d4fbb98323b34829da9393f366fb07d2f1605 Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Mon, 4 Jan 2021 13:59:27 +0000 Subject: [rust] Queen Attack --- rust/queen-attack/src/lib.rs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 rust/queen-attack/src/lib.rs (limited to 'rust/queen-attack/src') diff --git a/rust/queen-attack/src/lib.rs b/rust/queen-attack/src/lib.rs new file mode 100644 index 0000000..cbdc2c7 --- /dev/null +++ b/rust/queen-attack/src/lib.rs @@ -0,0 +1,36 @@ +#[derive(Debug)] +pub struct ChessPosition { + rank: i32, + file: i32, +} + +#[derive(Debug)] +pub struct Queen { + pos: ChessPosition, +} + +fn in_range(n: T, min: T, max: T) -> bool { + min <= n && n < max +} + +impl ChessPosition { + pub fn new(rank: i32, file: i32) -> Option { + if in_range(rank, 0, 8) && in_range(file, 0, 8) { + Some(ChessPosition { rank, file }) + } else { + None + } + } +} + +impl Queen { + pub fn new(pos: ChessPosition) -> Self { + Queen { pos } + } + + pub fn can_attack(&self, other: &Queen) -> bool { + self.pos.file == other.pos.file + || self.pos.rank == other.pos.rank + || (self.pos.rank - other.pos.rank).abs() == (self.pos.file - other.pos.file).abs() + } +} -- cgit v1.2.3