From 74317dc09285cd89fb2508956fcaa50d7c16900c Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Sun, 7 May 2023 09:17:58 +0300 Subject: [PATCH] init bruv --- .gitignore | 1 + Cargo.lock | 7 ++++++ Cargo.toml | 8 +++++++ src/main.rs | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 81 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml 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..a2b8f3f --- /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 = "disk_algs" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..ae26739 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "disk_algs" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..13454a8 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,65 @@ +fn main() { + let requests: Vec = vec![176, 79, 34, 60, 92, 11, 41, 114]; + let init_head = 50; + println!( + "FIFO seek distance is {}", + fcfs(init_head, 0, requests.clone()) + ); + println!("SSTF seek distance is {}", sstf(init_head, 0, requests)); +} + +fn fcfs(head: i32, seek_distance: i32, mut requests: Vec) -> i32 { + match requests.is_empty() { + true => seek_distance, + false => { + let new_head = requests.remove(0); + fcfs( + new_head, + seek_distance + new_head.abs_diff(head) as i32, + requests, + ) + } + } +} + +//shortest seek time first +fn sstf(head: i32, seek_distance: i32, mut requests: Vec) -> i32 { + match requests.is_empty() { + true => seek_distance, + false => { + requests.sort_by(|a, b| a.abs_diff(head).cmp(&b.abs_diff(head))); + //dbg!(requests.clone()); + let new_head = requests.remove(0); + + sstf( + new_head, + seek_distance + head.abs_diff(new_head) as i32, + requests, + ) + } + } +} +//defining initial direction here +fn scan(mut head: i32, disk_end: i32, mut requests: Vec, direction: Direction) -> i32 { + requests.push(disk_end); + match direction { + Direction::LEFT => { + requests.sort_by(|a, b| a.checked_sub(head).cmp(&b.checked_sub(head))); + } + Direction::RIGHT => { + requests.sort_by(|a, b| b.checked_sub(head).cmp(&a.checked_sub(head))); + } + } + requests + .iter() + .map(|request| { + let seek = request.abs_diff(head) as i32; //TODO turn to function params + head = *request; + seek + }) + .sum() +} +enum Direction { + LEFT, + RIGHT, +}