From 77828d0eb94b3bcb71b0a42478400fc08ed40523 Mon Sep 17 00:00:00 2001 From: Felix Martin Date: Sat, 12 Dec 2020 10:53:27 -0500 Subject: [PATCH] Finish assignments for course 2 --- misc/two_sums.py | 25 +++++++++++++++++++++++++ src/main.rs | 8 +++++++- src/two_sum.rs | 25 ++++++++++++++++++++++--- 3 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 misc/two_sums.py diff --git a/misc/two_sums.py b/misc/two_sums.py new file mode 100644 index 0000000..c71f212 --- /dev/null +++ b/misc/two_sums.py @@ -0,0 +1,25 @@ + +def two_sum(t, xs_list, xs_set): + for x in xs: + y = t - x + if x != y and y in xs_set: + return True + return False + + +if __name__ == "__main__": + with open("../data/c2a4.txt") as f: + xs = list(map(int, f.readlines())) + + xs_min = [x for x in xs if x < 0] + xs_max_set = set([x for x in xs if x > 0]) + + limit = 10000 + two_sums = 0 + for t in range(-limit, limit + 1): + if t % 10 == 0: + print(t) + if two_sum(t, xs_min, xs_max_set): + two_sums += 1 + + print(two_sums) diff --git a/src/main.rs b/src/main.rs index a04d0d1..37b17fa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -83,6 +83,11 @@ fn c2a4() { println!("c2a4={:?}", r); } +#[allow(dead_code)] +fn c3a1() { + println!("continue here"); +} + fn main() { // c1a2(); // c1a3(); @@ -90,5 +95,6 @@ fn main() { // c2a1(); // c2a2(); // c2a3(); - c2a4(); + // c2a4(); + c3a1(); } diff --git a/src/two_sum.rs b/src/two_sum.rs index cd38aa0..495d3a4 100644 --- a/src/two_sum.rs +++ b/src/two_sum.rs @@ -1,13 +1,32 @@ +use std::collections::HashSet; +use std::iter::FromIterator; -fn two_sum(t: i64, xs_vec: &Vec) { - +fn two_sum(t: i64, xs: &Vec, ys: &HashSet) -> bool { + for &x in xs { + let y = t - x; + if x != y && ys.contains(&y) { + return true; + } + } + false } pub fn find_two_sums(xs: Vec) -> usize { + let mut xs_min: Vec = xs.to_vec(); + xs_min.retain(|&i| i < 0); + let mut xs_max: Vec = xs.to_vec(); + xs_max.retain(|&i| i >= 0); + let xs_max_set: HashSet = HashSet::from_iter(xs_max); - 0 + let mut r: usize = 0; + for t in -10000..10001 { + if two_sum(t, &xs_min, &xs_max_set) { + r += 1 + } + } + r }