From 9a327407379a54d10fcee2eb38314804ffa2a684 Mon Sep 17 00:00:00 2001 From: Roger Bell_West Date: Thu, 26 Jun 2025 17:59:43 +0100 Subject: RogerBW solutions for challenge no. 327 --- challenge-327/roger-bell-west/rust/ch-1.rs | 32 ++++++++++++++++++++++++++ challenge-327/roger-bell-west/rust/ch-2.rs | 33 +++++++++++++++++++++++++++ challenge-327/roger-bell-west/tests.json | 36 ++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+) create mode 100755 challenge-327/roger-bell-west/rust/ch-1.rs create mode 100755 challenge-327/roger-bell-west/rust/ch-2.rs create mode 100644 challenge-327/roger-bell-west/tests.json diff --git a/challenge-327/roger-bell-west/rust/ch-1.rs b/challenge-327/roger-bell-west/rust/ch-1.rs new file mode 100755 index 0000000000..6588ef7a58 --- /dev/null +++ b/challenge-327/roger-bell-west/rust/ch-1.rs @@ -0,0 +1,32 @@ +#! /bin/sh +//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x --nocapture; rm -f ${0}x ; exit + +use std::collections::HashSet; + +#[test] +fn test_ex1() { + assert_eq!(missingintegers(vec![1, 2, 1, 3, 2, 5]), vec![4, 6]); +} + +#[test] +fn test_ex2() { + assert_eq!(missingintegers(vec![1, 1, 1]), vec![2, 3]); +} + +#[test] +fn test_ex3() { + assert_eq!(missingintegers(vec![2, 2, 1]), vec![3]); +} + +#[test] +fn test_ex4() { + assert_eq!(missingintegers(vec![2, 1]), Vec::::new()); +} + +fn missingintegers(a: Vec) -> Vec { + let range = (1..=a.len() as i32).collect::>(); + let present = a.into_iter().collect::>(); + let mut b = range.difference(&present).copied().collect::>(); + b.sort_unstable(); + b +} diff --git a/challenge-327/roger-bell-west/rust/ch-2.rs b/challenge-327/roger-bell-west/rust/ch-2.rs new file mode 100755 index 0000000000..1a0737f4df --- /dev/null +++ b/challenge-327/roger-bell-west/rust/ch-2.rs @@ -0,0 +1,33 @@ +use permutator::Combination; + +#[test] +fn test_ex1() { + assert_eq!(mad(vec![4, 1, 2, 3]), vec![vec![1, 2], vec![2, 3], vec![3, 4]]); +} + +#[test] +fn test_ex2() { + assert_eq!(mad(vec![1, 3, 7, 11, 15]), vec![vec![1, 3]]); +} + +#[test] +fn test_ex3() { + assert_eq!(mad(vec![1, 5, 3, 8]), vec![vec![1, 3], vec![3, 5]]); +} + +fn mad(a: Vec) -> Vec> { + let mut combs: Vec> = Vec::new(); + a.combination(2).for_each(|l| { + let mut m = l.clone(); + m.sort(); + combs.push(vec![*m[0], *m[1]]); + }); + let dif = combs.iter().map(|x| x[1] - x[0]).min().unwrap(); + let mut res = combs + .iter() + .cloned() + .filter(|x| x[1] - x[0] == dif) + .collect::>>(); + res.sort_unstable(); + res +} diff --git a/challenge-327/roger-bell-west/tests.json b/challenge-327/roger-bell-west/tests.json new file mode 100644 index 0000000000..4e25363528 --- /dev/null +++ b/challenge-327/roger-bell-west/tests.json @@ -0,0 +1,36 @@ +{ + "ch-1" : [ + { + "function" : "missingintegers", + "arguments" : [ 1, 2, 1, 3, 2, 5 ], + "result" : [ 4, 6 ] + }, + { + "arguments" : [ 1, 1, 1 ], + "result" : [ 2, 3 ] + }, + { + "arguments" : [ 2, 2, 1 ], + "result" : [ 3 ] + }, + { + "arguments" : [ 2, 1 ], + "result" : [ ] + } + ], + "ch-2" : [ + { + "function" : "mad", + "arguments" : [ 4, 1, 2, 3 ], + "result" : [ [1,2], [2,3], [3,4] ] + }, + { + "arguments" : [ 1, 3, 7, 11, 15 ], + "result" : [ [ 1, 3 ] ] + }, + { + "arguments" : [ 1, 5, 3, 8 ], + "result" : [ [1,3], [3,5] ] + } + ] +} -- cgit