diff --git a/src/encpt/math/derive.rs b/src/encpt/math/derive.rs new file mode 100644 index 0000000..47649d7 --- /dev/null +++ b/src/encpt/math/derive.rs @@ -0,0 +1 @@ +pub fn derive_fnct(drv_times: i32, fnct: Vec) {} diff --git a/src/encpt/math/matrix.rs b/src/encpt/math/matrix.rs index 1a2d68f..2d7f2f6 100644 --- a/src/encpt/math/matrix.rs +++ b/src/encpt/math/matrix.rs @@ -1,44 +1,69 @@ -use crate::shared::parse::split_string; +use std::f64; +pub fn calc_n(chunk_len: usize) -> usize { + let mut n = (chunk_len as f64).sqrt().round() as usize; + let dif = n * n; + if chunk_len > dif { + n = n + 1 + } + n +} -pub fn char_to_mtrx(chars: Vec>) -> Vec>> { - let final_vec: Vec>> = chars +pub fn char_to_mtrx(chars: Vec>) -> Vec> { + let final_vec: Vec> = chars .into_iter() - .map(|e| { - e.iter() - .map(|c| { - split_string(c.to_string()) - .iter() - .map(|r| r.parse::().unwrap()) - .collect() - }) - .collect() - }) + .map(|e| e.iter().map(|c| c.parse::().unwrap()).collect()) .collect(); final_vec } + // from [["145","456","789"],["741","789","123"]] // to [[[1,4,5],[4,5,6],[7,8,9]],[[7,4,1],[7,8,9],[1,2,3]]] +pub fn fill_mtrx_gaps(n: usize, orgnl_mtrx: Vec>) -> Vec> { + let filled_mtrx: Vec> = orgnl_mtrx + .iter() + .map(|c| { + let mut row = c.clone(); // Create a new row based on the original row + if row.len() < n { + // If the row is shorter than n, extend it with zeros + row.extend(std::iter::repeat(0).take(n - row.len())); + } + row // Return the modified row + }) + .collect(); + + filled_mtrx +} #[cfg(test)] mod tests { - use crate::shared::parse::str2String_vec; - use super::*; + use crate::shared::parse::str2_string_vec; #[test] fn mtrx_vals() { - let expected = vec![ - vec![vec![1, 4, 5], vec![4, 5, 6], vec![7, 8, 9]], - vec![vec![7, 4, 1], vec![7, 8, 9], vec![1, 2, 3]], - ]; + let expected = vec![vec![145, 456, 789], vec![741, 789, 123]]; let nstd_vec = vec![vec!["145", "456", "789"], vec!["741", "789", "123"]]; let res = char_to_mtrx( nstd_vec .iter() - .map(|c| str2String_vec(c.to_vec())) + .map(|c| str2_string_vec(c.to_vec())) .collect(), ); assert_eq!(res, expected) } + + #[test] + fn calc_n_test1() { + let e = 28; + let res = calc_n(e); + assert_eq!(res, 6); + } + + #[test] + fn calc_n_test2() { + let e = 25; + let res = calc_n(e); + assert_eq!(res, 5); + } } diff --git a/src/main.rs b/src/main.rs index f61654e..8c8f5dd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,7 @@ -use crate::{encpt::mapping::mapper::*, shared::parse::str2String_vec}; +use crate::{ + encpt::{mapping::mapper::*, math::matrix::fill_mtrx_gaps}, + shared::parse::str2_string_vec, +}; use encpt::{mapping::switcher::switch_chars, math::matrix::char_to_mtrx}; pub mod maps { pub mod chars; @@ -32,11 +35,24 @@ fn main() { // let res = chr_to_mxas(charvc); // println!("{:?}", res) - let vecs = vec![ - vec!["785", "535", "789", "987", "123"], - vec!["543", "528", "693", "285", "147"], - vec!["753"], + // let vecs = vec![ + // vec!["785", "535", "789", "987", "123"], + // vec!["543", "528", "693", "285", "147"], + // vec!["753"], + // ]; + // let res = char_to_mtrx(vecs.iter().map(|c| str2_string_vec(c.to_vec())).collect()); + // println!("{:?}", res); + + let vecs1 = vec![ + vec![785, 535, 789, 987, 123, 789], + vec![785, 535, 789, 987, 123, 787], + vec![785, 535, 789, 987, 123, 456], + vec![543, 528, 693, 285, 147, 556], + vec![753, 456, 456, 564], + vec![], ]; - let res = char_to_mtrx(vecs.iter().map(|c| str2String_vec(c.to_vec())).collect()); - println!("{:?}", res) + let res1 = fill_mtrx_gaps(6, vecs1); + for a in res1 { + println!("{:?}", a); + } } diff --git a/src/shared/parse.rs b/src/shared/parse.rs index 91e9f9a..3ffa71e 100644 --- a/src/shared/parse.rs +++ b/src/shared/parse.rs @@ -16,15 +16,20 @@ pub fn flatten_vec(nstd: Vec) -> Vec { flatten } -pub fn str2String_vec(nsrd: Vec<&str>) -> Vec { +pub fn str2_string_vec(nsrd: Vec<&str>) -> Vec { let nsrd_as_strings: Vec = nsrd.iter().map(|&s| s.to_string()).collect(); nsrd_as_strings } -pub fn split_by_five(chunk: Vec) -> Vec> { - let split_vectors: Vec> = chunk.chunks(5).map(|chunk| chunk.to_vec()).collect(); +// need to change +pub fn split_by_n(n: usize, chunk: Vec) -> Vec> { + let mut split_vectors: Vec> = chunk.chunks(n).map(|chunk| chunk.to_vec()).collect(); + if split_vectors.len() < n { + split_vectors.push(vec![]); + } split_vectors } + #[cfg(test)] mod tests { use super::*; @@ -62,7 +67,25 @@ mod tests { #[test] fn flatten_test() { let nsrd = vec!["Av", "bQ", "TG"]; - let res = flatten_vec(str2String_vec(nsrd)); + let res = flatten_vec(str2_string_vec(nsrd)); assert_eq!(res, vec!["A", "v", "b", "Q", "T", "G"]) } + #[test] + fn split_by_6_28_elemnets() { + let ele = vec![ + "785", "535", "789", "987", "123", "789", "785", "535", "789", "987", "123", "787", + "785", "535", "789", "987", "123", "456", "543", "528", "693", "285", "147", "556", + "753", "456", "456", "564", + ]; + let exp = vec![ + vec!["785", "535", "789", "987", "123", "789"], + vec!["785", "535", "789", "987", "123", "787"], + vec!["785", "535", "789", "987", "123", "456"], + vec!["543", "528", "693", "285", "147", "556"], + vec!["753", "456", "456", "564"], + vec![], + ]; + let res = split_by_n(6, str2_string_vec(ele)); + assert_eq!(res, exp) + } }