From 04f22c276308a4baeea50354223355bcefd46d8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20Kaan=20G=C3=9CM=C3=9C=C5=9E?= <96421894+Tahinli@users.noreply.github.com> Date: Mon, 15 Jan 2024 23:08:11 +0300 Subject: [PATCH] feat: restart fix: error handling build: optimization and forbid unsafe --- Cargo.toml | 5 ++ src/main.rs | 238 ++++++++++++++++++++++++++++++++++------------------ 2 files changed, 162 insertions(+), 81 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 0c683c5..cf283a7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,11 @@ strip = "symbols" opt-level = 3 overflow-checks = true lto = true +codegen-units = 1 +panic = "abort" + +[lints.rust] +unsafe_code = "forbid" [dependencies] rand = "0.8.5" diff --git a/src/main.rs b/src/main.rs index 9132788..4f28f4c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,109 +5,185 @@ const PROCESS_COUNT:usize = 5; const RESOURCE_COUNT:usize = 3; fn main() { println!("Hello, world!"); - - println!("Max A Resource"); - let mut a:String = String::new(); - io::stdin().read_line(&mut a).unwrap(); - let a:u8 = a.trim().parse().unwrap(); - println!("Max B Resource"); - let mut b:String = String::new(); - io::stdin().read_line(&mut b).unwrap(); - let b:u8 = b.trim().parse().unwrap(); - - println!("Max C Resource"); - let mut c:String = String::new(); - io::stdin().read_line(&mut c).unwrap(); - let c:u8 = c.trim().parse().unwrap(); - - println!("\n\tA = {}\n\tB = {}\n\tC = {}", a,b,c); - if a <= 0 || b <= 0 || c <= 0 + let mut restart:bool = true; + while restart { - println!("Exit: Zero as a Input Invalid"); - return; - } + println!("Max A Resource"); + let a:u8; + let b:u8; + let c:u8; + let mut resource_input:String = String::new(); + if let Err(err_val) = io::stdin().read_line(&mut resource_input) + { + println!("Failed to Read: {}", err_val); + return; + } + match resource_input.trim().parse::() + { + Ok(value) => + { + a = value; + } + Err(err_val) => + { + println!("Failed to Convert: {}", err_val); + return; + } + } - let mut max_needs_matrix = [[0_u8;RESOURCE_COUNT];PROCESS_COUNT]; - let mut assigned_resources_matrix = [[0_u8;RESOURCE_COUNT];PROCESS_COUNT]; - let mut info:(bool, Vec) = (false, Vec::with_capacity(PROCESS_COUNT)); - while !info.0 - { + println!("Max B Resource"); + let mut resource_input:String = String::new(); + if let Err(err_val) = io::stdin().read_line(&mut resource_input) + { + println!("Failed to Read: {}", err_val); + return; + } + match resource_input.trim().parse::() + { + Ok(value) => + { + b = value; + } + Err(err_val) => + { + println!("Failed to Convert: {}", err_val); + return; + } + } + + println!("Max C Resource"); + let mut resource_input:String = String::new(); + if let Err(err_val) = io::stdin().read_line(&mut resource_input) + { + println!("Failed to Read: {}", err_val); + return; + } + match resource_input.trim().parse::() + { + Ok(value) => + { + c = value; + } + Err(err_val) => + { + println!("Failed to Convert: {}", err_val); + return; + } + } + + + println!("\n\tA = {}\n\tB = {}\n\tC = {}", a,b,c); + if a == 0 || b == 0 || c == 0 + { + println!("Exit: Zero as a Input Invalid"); + return; + } + + let mut max_needs_matrix = [[0_u8;RESOURCE_COUNT];PROCESS_COUNT]; + let mut assigned_resources_matrix = [[0_u8;RESOURCE_COUNT];PROCESS_COUNT]; + let mut info:(bool, Vec) = (false, Vec::with_capacity(PROCESS_COUNT)); + while !info.0 + { + for i in 0..PROCESS_COUNT + { + let mut rng = rand::thread_rng(); + let random = rng.gen_range(0..a); + max_needs_matrix[i][0] = random; + if random != 0 + { + assigned_resources_matrix[i][0] = rng.gen_range(0..random); + } + else + { + assigned_resources_matrix[i][0] = 0; + } + } + for i in 0..PROCESS_COUNT + { + let mut rng = rand::thread_rng(); + let random = rng.gen_range(0..b); + max_needs_matrix[i][1] = random; + if random != 0 + { + assigned_resources_matrix[i][1] = rng.gen_range(0..random); + } + else + { + assigned_resources_matrix[i][1] = 0; + } + } + for i in 0..PROCESS_COUNT + { + let mut rng = rand::thread_rng(); + let random = rng.gen_range(0..c); + max_needs_matrix[i][2] = random; + if random != 0 + { + assigned_resources_matrix[i][2] = rng.gen_range(0..random); + } + else + { + assigned_resources_matrix[i][2] = 0; + } + } + info = banker(a, b, c, max_needs_matrix, assigned_resources_matrix); + } + println!("Max Needs Matrix"); + print_matrix(max_needs_matrix); + println!("Assigned Resources Matrix"); + print_matrix(assigned_resources_matrix); + let mut answers:[u8;PROCESS_COUNT] = [0;PROCESS_COUNT]; for i in 0..PROCESS_COUNT { - let mut rng = rand::thread_rng(); - let random = rng.gen_range(0..a); - max_needs_matrix[i][0] = random; - if random != 0 + println!("Which Process Should be Done Now ?"); + let mut input = String::new(); + io::stdin().read_line(&mut input).unwrap(); + let input:u8 = input.trim().parse().unwrap(); + answers[i] = input; + if info.1[i] == input { - assigned_resources_matrix[i][0] = rng.gen_range(0..random); + println!("Correct"); } else { - assigned_resources_matrix[i][0] = 0; + println!("Wrong it should be = {}", info.1[i]); } } + println!("Your Answers"); for i in 0..PROCESS_COUNT { - let mut rng = rand::thread_rng(); - let random = rng.gen_range(0..b); - max_needs_matrix[i][1] = random; - if random != 0 - { - assigned_resources_matrix[i][1] = rng.gen_range(0..random); - } - else - { - assigned_resources_matrix[i][1] = 0; - } + println!("P{}", answers[i]); } + println!("Correct Answers"); for i in 0..PROCESS_COUNT { - let mut rng = rand::thread_rng(); - let random = rng.gen_range(0..c); - max_needs_matrix[i][2] = random; - if random != 0 + println!("P{}", info.1[i]); + } + + + let mut resource_input:String = String::new(); + println!("Press 'r' to Restart"); + if let Err(err_val) = io::stdin().read_line(&mut resource_input) + { + println!("Failed to Read: {}", err_val); + return; + } + resource_input = resource_input.trim().to_string(); + match resource_input.as_str() + { + "r" => { - assigned_resources_matrix[i][2] = rng.gen_range(0..random); + restart = true; + println!("-------------------------------"); } - else + _ => { - assigned_resources_matrix[i][2] = 0; + return; } } - info = banker(a, b, c, max_needs_matrix, assigned_resources_matrix); + } - println!("Max Needs Matrix"); - print_matrix(max_needs_matrix); - println!("Assigned Resources Matrix"); - print_matrix(assigned_resources_matrix); - let mut answers:[u8;PROCESS_COUNT] = [0;PROCESS_COUNT]; - for i in 0..PROCESS_COUNT - { - println!("Which Process Should be Done Now ?"); - let mut input = String::new(); - io::stdin().read_line(&mut input).unwrap(); - let input:u8 = input.trim().parse().unwrap(); - answers[i] = input; - if info.1[i] == input - { - println!("Correct"); - } - else - { - println!("Wrong it should be = {}", info.1[i]); - } - } - println!("Your Answers"); - for i in 0..PROCESS_COUNT - { - println!("P{}", answers[i]); - } - println!("Correct Answers"); - for i in 0..PROCESS_COUNT - { - println!("P{}", info.1[i]); - } } fn print_matrix(matrix:[[u8;RESOURCE_COUNT];PROCESS_COUNT])