From 465d18ea67cad9aec39f439662d04e55c22d7213 Mon Sep 17 00:00:00 2001 From: Bearmine Date: Wed, 28 May 2025 17:01:56 -0500 Subject: [PATCH] Implement taking strings from crossword --- day_04/src/crossword.rs | 34 ++++++++++++++++++++++++++++++++++ day_04/src/main.rs | 8 ++++++++ 2 files changed, 42 insertions(+) diff --git a/day_04/src/crossword.rs b/day_04/src/crossword.rs index 229e6e9..fd1c4b6 100644 --- a/day_04/src/crossword.rs +++ b/day_04/src/crossword.rs @@ -2,6 +2,9 @@ use std::error::Error; use std::fmt::Display; use std::fs::File; use std::io::{BufReader, prelude::*}; +use std::num; + + #[derive(Debug)] pub struct Crossword { @@ -10,6 +13,28 @@ pub struct Crossword { height: usize, } +pub struct WordPuller<'a> { + x: usize, + y: usize, + direction: (isize, isize), + crossword: &'a Crossword, +} + +impl<'a> WordPuller<'a> { + pub fn take(&self, num_of_letters: usize) -> String { + let mut word = String::new(); + + + for i in 0..num_of_letters { + let x= self.x as isize + (i as isize * self.direction.0); + let y= self.y as isize + (i as isize * self.direction.1); + word.push(self.crossword.data[x as usize][y as usize]); + } + + word + } +} + impl Crossword { pub fn new(file: File) -> Result> { let mut input_buffer = BufReader::new(file); @@ -44,6 +69,15 @@ impl Crossword { pub fn height(&self) -> usize { self.height } + + pub fn n(&self, x: usize, y: usize) -> WordPuller { WordPuller {x, y, direction:(-1, 0), crossword: self}} + pub fn ne(&self, x: usize, y: usize) -> WordPuller { WordPuller {x, y, direction:(-1, 1), crossword: self}} + pub fn e(&self, x: usize, y: usize) -> WordPuller { WordPuller {x, y, direction:(0, 1), crossword: self}} + pub fn se(&self, x: usize, y: usize) -> WordPuller { WordPuller {x, y, direction:(1, 1), crossword: self}} + pub fn s(&self, x: usize, y: usize) -> WordPuller { WordPuller {x, y, direction:(1, 0), crossword: self}} + pub fn sw(&self, x: usize, y: usize) -> WordPuller { WordPuller {x, y, direction:(1, -1), crossword: self}} + pub fn w(&self, x: usize, y: usize) -> WordPuller { WordPuller {x, y, direction:(0, -1), crossword: self}} + pub fn nw(&self, x: usize, y: usize) -> WordPuller { WordPuller {x, y, direction:(-1, -1), crossword: self}} } impl Display for Crossword { diff --git a/day_04/src/main.rs b/day_04/src/main.rs index 44f5d8d..27bb464 100644 --- a/day_04/src/main.rs +++ b/day_04/src/main.rs @@ -24,6 +24,14 @@ fn main() -> Result<(), Box> { let crossword = Crossword::new(File::open(input_file_string)?)?; println!("{}", crossword); + println!("n: {}", crossword.n(3,3).take(4)); + println!("ne: {}", crossword.ne(3,3).take(4)); + println!("e: {}", crossword.e(3,3).take(4)); + println!("se: {}", crossword.se(3,3).take(4)); + println!("s: {}", crossword.s(3,3).take(4)); + println!("sw: {}", crossword.sw(3,3).take(4)); + println!("w: {}", crossword.w(3,3).take(4)); + println!("nw: {}", crossword.nw(3,3).take(4)); Ok(()) }