From be733b3c3aa63bb85cefa42f012757b81f780906 Mon Sep 17 00:00:00 2001 From: dongho Date: Sat, 7 Sep 2024 20:13:11 +0900 Subject: [PATCH] first commit --- .gitignore | 1 + Cargo.lock | 7 +++++++ Cargo.toml | 6 ++++++ spec.txt | 2 ++ src/main.rs | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 64 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 spec.txt create mode 100644 src/main.rs 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(()) +}