Introduce Cut
Dependencies
- [2]
LXMNVVD2Change to proper measurements - [3]
Q7IWKL57Calculate required length once and reuse - [4]
JCYHD3FDMinimum size plank is 300mm - [5]
ZJPL7VNQSeparate planks from main - [6]
SMYRM2CFUse the MaterialStorage - [7]
OK5CKW6ERework everything, use references - [8]
C5VVJ5SOPrint how many rows - [9]
MLUGR2LLAdd default impl and some basic plank logic - [10]
VSG6UWDYCan now build floors - [11]
JPTYS433Cleanup, clippy - [12]
CT3VONTOIntroduce PLANKMIN and work with the neverending rows - [*]
B75B3UUKCreate a MaterialStorage - [*]
5TH3AA4610 mm extra space
Change contents
- replacement in src/lib.rs at line 3
use constants::{AVAILABLEPLANKS, PLANKMAX, PLANKMIN, SAWBLADE};use constants::{AVAILABLEPLANKS, CUTADJACENCY, PLANKMAX, PLANKMIN, PLAY, ROOMLENGTH, SAWBLADE}; - edit in src/lib.rs at line 65
}}// Define a plank cut structure#[derive(Debug, Clone, Copy)]pub struct Cut {pub coordinate: u32,}impl Cut {pub fn new(coordinate: u32) -> Self {Cut { coordinate } - replacement in src/lib.rs at line 160
planks_used: u32,cut_coordinates: Vec<Cut>, - replacement in src/lib.rs at line 170
planks_used: 1,cut_coordinates: vec![], - edit in src/lib.rs at line 244
pub fn get_cut_coordinates(&self) -> Vec<Cut> {return self.cut_coordinates.clone();}pub fn check_if_cut_is_valid(&self, new_cut: Cut) -> bool {// If we have no cuts, no need to check themif !self.cut_coordinates.is_empty() {for cut in &self.cut_coordinates {println!("Cut coordinate {}", cut.coordinate);if cut.coordinate.abs_diff(new_cut.coordinate) < CUTADJACENCY {// Invalid, cut is too close!return false;}}}return true;} - edit in src/constants.rs at line 7
/// The smalles allowed space between plank cutspub static CUTADJACENCY: u32 = 400; - replacement in src/bin/main.rs at line 4
use parkett::{Floor, MaterialStorage, Row};use parkett::{Cut, Floor, MaterialStorage, Row}; - replacement in src/bin/main.rs at line 112
let required_length = ROOMLENGTH - row.get_coverage();let required_length = row.get_max_length() - row.get_coverage();if let Some(adjacent_row) = adjacent_row {println!("Cut coordinates: {:?}", row.get_cut_coordinates());// Check if the new plank lands too close to a previous cut// Or a new oneif !adjacent_row.check_if_cut_is_valid(Cut::new(required_length)) {println!("Invalid cut at {required_length}!!! Handle this");} else if !adjacent_row.check_if_cut_is_valid(Cut::new(PLANKMAX)) {println!("Invalid cut at {PLANKMAX}!!! Handle this");}}