commit be733b3c3aa63bb85cefa42f012757b81f780906 Author: dongho Date: Sat Sep 7 20:13:11 2024 +0900 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..43c66b3 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "sparse_compress" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..370285d --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "sparse_compress" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/spec.txt b/spec.txt new file mode 100644 index 0000000..2a47aed --- /dev/null +++ b/spec.txt @@ -0,0 +1,2 @@ +cmd::compress_in_time::compress_in_size +zip::3m18.627::1% diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..9502a28 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,48 @@ +use core::num; +use std::fs::{self, File}; +use std::io::{self, BufReader, Read}; +use std::path::Path; + +fn create_matrix_wigh_given_size(size: usize) {} + +fn calculate_matrix_size(num_elements: usize) -> (usize, usize) { + let sqrt_elements = num_elements as f64().sqrt() as usize; + + let mut best_x = sqrt_elements; + let mut best_y = sqrt_elements; + let mut best_dff = usize::MAX; + + for x in (1..=sqrt_elements).rev() { + let y = num_elements/x; + if y * x == num_elements { + return (x, y) + } + let diff = (num_elements - x * y).abs(); + if diff < best_diff { + best_x = x; + best_y = y; + best_diff = diff; + } + } + (best_x, best_y) +} + +fn main() -> io::Result<()> { + let input_file_path: &str = "/mnt/c/Users/dongho/Desktop/sparse_compress/ubuntu.iso"; + let output_file_path: &str = "/mnt/c/Users/dongho/Desktop/sparse_compress/ubuntu.dhm"; + let path: &Path = Path::new(input_file_path); + + if !path.exists() { + println!("File does not exists"); + return Ok(()); + } + + let metadata = fs::metadata(path).unwrap(); + let file_size = metadata.len(); + let file_size_usize:usize = (file_size*8) as usize; + println!("File size: {} bytes", file_size); + println!("File size: {} bits", file_size * 8); + let (x, y) = calculate_matrix_size(fil); + println!("Optimal Matrix size: {} x {}", x, y); + Ok(()) +}