diff --git a/72_Queen/rust/Cargo.toml b/72_Queen/rust/Cargo.toml new file mode 100644 index 00000000..3b1d02f5 --- /dev/null +++ b/72_Queen/rust/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "rust" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +rand = "0.8.5" diff --git a/72_Queen/rust/src/draw.rs b/72_Queen/rust/src/draw.rs new file mode 100644 index 00000000..4ded922f --- /dev/null +++ b/72_Queen/rust/src/draw.rs @@ -0,0 +1,75 @@ +pub fn draw_board(q: u8) { + let mut blocks = Vec::new(); + let mut block = 91; + + for _ in 0..8 { + for _ in 0..8 { + block -= 10; + blocks.push(block); + println!("{}", block); + } + block += 91; + } + + let draw_h_border = |top: Option| { + let corners; + + if let Some(top) = top { + if top { + corners = ("┌", "┐", "┬"); + } else { + corners = ("└", "┘", "┴"); + } + } else { + corners = ("├", "┤", "┼"); + } + + print!("{}", corners.0); + + for i in 0..8 { + let corner = if i == 7 { corners.1 } else { corners.2 }; + + print!("───{}", corner); + } + println!(); + }; + + draw_h_border(Some(true)); + + let mut column = 0; + let mut row = 0; + + for block in blocks.iter() { + let block = *block as u8; + + let n = if block == q { + " Q ".to_string() + } else { + block.to_string() + }; + + if block > 99 { + print!("│{}", n); + } else { + print!("│{} ", n); + } + + column += 1; + + if column != 1 && (column % 8) == 0 { + column = 0; + row += 1; + + print!("│"); + println!(); + + if row == 8 { + draw_h_border(Some(false)); + } else { + draw_h_border(None); + } + } + } + + println!(); +} diff --git a/72_Queen/rust/src/main.rs b/72_Queen/rust/src/main.rs new file mode 100644 index 00000000..75c3d4de --- /dev/null +++ b/72_Queen/rust/src/main.rs @@ -0,0 +1,9 @@ +use draw::draw_board; + +mod draw; +mod util; + +fn main() { + draw_board(158); + println!("{}",util::is_move_legal(32,63)); +} diff --git a/72_Queen/rust/src/util.rs b/72_Queen/rust/src/util.rs new file mode 100644 index 00000000..291eaa04 --- /dev/null +++ b/72_Queen/rust/src/util.rs @@ -0,0 +1,34 @@ +pub fn is_move_legal(loc: u8, mov: u8) -> bool { + let dt: i32 = (mov - loc).into(); + + if dt.is_negative() { + return false; + } + + if (dt % 21) == 0 || (dt % 10) == 0 || (dt % 11) == 0 { + return true; + } + + false +} + +pub fn is_legal_start(loc: u8) -> bool { + let mut legal_spots = Vec::new(); + let start: u8 = 11; + + legal_spots.push(start); + + for i in 1..=7 { + legal_spots.push(start + (10 * i)); + } + + for i in 1..=7 { + legal_spots.push(start + (11 * i)); + } + + if legal_spots.contains(&loc) { + true + } else { + false + } +}