From c1a5ce449455823380f106c55501a0f67bfa5580 Mon Sep 17 00:00:00 2001 From: daviddoji Date: Sun, 17 May 2026 17:10:17 +0200 Subject: [PATCH] Minimales en Rust --- src/Rust/004.rs | 57 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/Rust/004.rs diff --git a/src/Rust/004.rs b/src/Rust/004.rs new file mode 100644 index 0000000..36a7456 --- /dev/null +++ b/src/Rust/004.rs @@ -0,0 +1,57 @@ +use std::collections::HashSet; + +fn minimales(values: &[Vec]) -> Vec> { + let mut res: Vec> = Vec::new(); + + for (index, candidate) in values.iter().enumerate() { + let candidate_set: HashSet = candidate.iter().copied().collect(); + + // let mut is_subset_of_another = false; + + // for (other_index, other) in values.iter().enumerate() { + // let result = if index == other_index { + // false + // } else { + // let other_set: HashSet = other.iter().copied().collect(); + // candidate_set.is_subset(&other_set) + // }; + + // if result { + // is_subset_of_another = true; + // break; + // } + // } + + let is_subset_of_another = values.iter().enumerate().any(|(other_index, other)| { + if index == other_index { + return false; + } + + let other_set: HashSet = other.iter().copied().collect(); + candidate_set.is_subset(&other_set) + }); + + if is_subset_of_another { + continue; + } + + let already_present = res.iter().any(|existing| { + let existing_set: HashSet = existing.iter().copied().collect(); + candidate_set == existing_set + }); + + if !already_present { + res.push(candidate.clone()); + } + } + + res +} + +fn main() { + let check = vec![vec![1, 3], vec![2, 3, 1], vec![3, 2, 5]]; + println!("{:?}", minimales(&check)); // [[2, 3, 1], [3, 2, 5]] + + let check = vec![vec![1, 3], vec![2, 3, 1], vec![3, 2, 5], vec![3, 1]]; + println!("{:?}", minimales(&check)); // [[2, 3, 1], [3, 2, 5]] +}