Implement taking strings from crossword

This commit is contained in:
Bearmine
2025-05-28 17:01:56 -05:00
parent 5f8eb40a8d
commit 2d6a15510e
2 changed files with 42 additions and 0 deletions

View File

@@ -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<Crossword, Box<dyn Error>> {
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 {