domino_lib/utils/
get_n.rs

1use super::{error::DominoError, types::Puzzle};
2
3pub fn get_n(puzzle: &Puzzle) -> Result<i32, DominoError> {
4    if puzzle.0.len() == 0 {
5        return Err(DominoError::InvalidLength);
6    }
7    let mut tmp: f32 = (-3.0 + (1.0 as f32 + 8.0 as f32 * puzzle.0.len() as f32).sqrt()) / 2.0;
8    if tmp - tmp.floor() == 0.0 {
9        return Ok(tmp as i32);
10    }
11    tmp = -1.0 + (2.0 as f32 * puzzle.0.len() as f32).sqrt();
12    if tmp - tmp.floor() == 0.0 {
13        return Ok(tmp as i32);
14    }
15    tmp = (-1.0 + (1.0 as f32 + 4.0 * puzzle.0.len() as f32).sqrt()) / 2.0;
16    if tmp - tmp.floor() == 0.0 {
17        return Ok(tmp as i32);
18    }
19    tmp = (puzzle.0.len() as f32).sqrt();
20    if tmp - tmp.floor() == 0.0 {
21        return Ok(tmp as i32);
22    }
23    Err(DominoError::InvalidLength)
24}