domino_lib/utils/
get_n.rs1use 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}