- Commit
- da8a21d5fbbe6a552c4b86b30db9771e5828a784
- Parent
- 050490bc01d8f86060f91d6c94c159278473251f
- Author
- Gark Garcia <37553739+GarkGarcia@users.noreply.github.com>
- Date
Merge branch 'rust'
An exercise on polyglossy: the same problem solved on multiple languages
Merge branch 'rust'
3 files changed, 12 insertions, 158 deletions
Status | File Name | N° Changes | Insertions | Deletions |
Modified | Rust/Cargo.lock | 128 | 0 | 128 |
Modified | Rust/Cargo.toml | 5 | 2 | 3 |
Modified | Rust/src/main.rs | 37 | 10 | 27 |
diff --git a/Rust/Cargo.lock b/Rust/Cargo.lock @@ -1,17 +1,4 @@ [[package]] -name = "bitflags" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "cloudabi" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] name = "crossterm" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -101,24 +88,9 @@ version = "0.1.0" dependencies = [ "crossterm 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] name = "libc" version = "0.2.44" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -132,92 +104,6 @@ dependencies = [ ] [[package]] -name = "rand" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_chacha 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_pcg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_xorshift 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_chacha" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "rand_hc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_isaac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_pcg" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_xorshift" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] name = "termios" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -245,8 +131,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] -"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" -"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" "checksum crossterm 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "91f04a703cb52c7ea4f800cda4e6839fb61c33955703dea2a8252d81d87178b3" "checksum crossterm_cursor 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e91c25e521708bd85fbdbdc34a854d1582793ab36e9aff2cee58fc79d7728e82" "checksum crossterm_input 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "937c314942c75a7893303e3fa1857cfbafdd8a7d8ee369389c79b55cc268c7a7" @@ -255,20 +139,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum crossterm_terminal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f1b61af4ef3ed3624994e8af7ac87b6a483c2936e63eebe38d9a2810cd4a6d44" "checksum crossterm_utils 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d26f24386ea91f9c55a85531dd3ee3673e4c82729e64567928665aca3a47c741" "checksum crossterm_winapi 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f63b02344710452064687251b49cb0c275df10ea70dcd6038b1eec11665efc0a" -"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" "checksum libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)" = "10923947f84a519a45c8fefb7dd1b3e8c08747993381adee176d7a82b4195311" "checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30" -"checksum rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ae9d223d52ae411a33cf7e54ec6034ec165df296ccd23533d671a28252b6f66a" -"checksum rand_chacha 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "771b009e3a508cb67e8823dda454aaa5368c7bc1c16829fb77d3e980440dd34a" -"checksum rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0905b6b7079ec73b314d4c748701f6931eb79fd97c668caa3f1899b22b32c6db" -"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -"checksum rand_pcg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "086bd09a33c7044e56bb44d5bdde5a60e7f119a9e95b0775f545de759a32fe05" -"checksum rand_xorshift 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "effa3fcaa47e18db002bdde6060944b6d2f9cfd8db471c30e873448ad9187be3" -"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" "checksum termios 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "72b620c5ea021d75a735c943269bb07d30c9b77d6ac6b236bc8b5c496ef05625" "checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0" "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
diff --git a/Rust/Cargo.toml b/Rust/Cargo.toml @@ -5,5 +5,4 @@ authors = ["Gark Garcia <37553739+GarkGarcia@users.noreply.github.com>"] [dependencies] crossterm = "0.6" -num_cpus = "1.0" -rand = "0.6.1"- \ No newline at end of file +num_cpus = "1.0"+ \ No newline at end of file
diff --git a/Rust/src/main.rs b/Rust/src/main.rs @@ -5,31 +5,10 @@ extern crate crossterm; extern crate num_cpus; -extern crate rand; use std::{env, thread, time::Instant, sync::{Arc, mpsc::{self, Sender, Receiver}}}; use crossterm::{terminal, input}; -struct ArithmeticProg { - curr: usize, - delta: usize -} - -impl ArithmeticProg { - pub fn new(start: usize, delta: usize) -> Self { - ArithmeticProg {curr: start, delta} - } -} - -impl Iterator for ArithmeticProg { - type Item = usize; - - fn next(&mut self) -> Option<Self::Item> { - self.curr += self.delta; - Some(self.curr) - } -} - fn main() { let args: Vec<String> = env::args().collect(); let prompt = terminal(); @@ -70,6 +49,7 @@ fn main() { } } +/// Distributes calculations across threads and collect the results fn get_countrexpl(max: usize, n_threads: usize) -> Option<(usize, usize)> { let sums_cache = Arc::new(get_sums(max)); @@ -80,13 +60,11 @@ fn get_countrexpl(max: usize, n_threads: usize) -> Option<(usize, usize)> { for i in 0..n_threads { let thread_countr_sd = coutexpl_sender.clone(); - let thread_range = ArithmeticProg::new(i, n_threads).take_while(move |&x| x <= max); + let thread_range = (i..max).step_by(n_threads); let thread_sums = sums_cache.clone(); - let child = thread::spawn(move || { - thread_countr_sd.send(get_range_countrexpl(thread_range, thread_sums, max)) - .expect(&format!("Thread n°{} was unable to sent a message trought the channel", i)); - }); + let child = thread::spawn(move || thread_countr_sd.send(get_range_countrexpl(thread_range, thread_sums, max)) + .expect(&format!("Thread n°{} was unable to sent a message trought the channel", i))); child_threads.push(child); if let Ok(Some(c_expl)) = coutexpl_reciever.recv() { @@ -104,7 +82,12 @@ fn get_countrexpl(max: usize, n_threads: usize) -> Option<(usize, usize)> { } } -fn get_range_countrexpl<T: IntoIterator<Item = usize>>(range: T, sums_cache: Arc<Vec<isize>>, max: usize) -> Option<(usize, usize)> { +/// Search for counterexamples among the items of a specif iterator. +fn get_range_countrexpl<T: IntoIterator<Item = usize>>( + range: T, + sums_cache: Arc<Vec<isize>>, + max: usize +) -> Option<(usize, usize)> { for a in range { for b in a..max { let diff = sums_cache[a + b] - sums_cache[a] - sums_cache[b];