Skip to content

Instantly share code, notes, and snippets.

Created December 12, 2016 09:56
Show Gist options
  • Save anonymous/8c69268f952879ddb47060d57a64dd9f to your computer and use it in GitHub Desktop.
Save anonymous/8c69268f952879ddb47060d57a64dd9f to your computer and use it in GitHub Desktop.
Shared via Rust Playground
use std::collections::HashMap;
#[derive(Clone, Debug)]
struct Data {
values: Vec<i32>,
pass_to: Option<usize>,
}
impl Data {
fn has_complete_values(&self) -> bool {
self.values.len() == 2
}
}
fn get_data() -> HashMap<usize, Data> {
let mut data = HashMap::new();
data.insert(1, Data{ values: vec![3, 2], pass_to: Some(2) });
data.insert(2, Data{ values: vec![1], pass_to: Some(4) });
data.insert(3, Data{ values: vec![5, 9], pass_to: Some(4) });
data.insert(4, Data{ values: vec![], pass_to: None });
data
}
fn main() {
let mut data = get_data();
loop {
if data.values().all(|d| d.has_complete_values()) {
break;
}
let mut mutable_data = data.clone();
for d in data.values() {
if d.has_complete_values() {
if let Some(pass_to) = d.pass_to {
let value = d.values[0];
let entry = mutable_data.get_mut(&pass_to).unwrap();
if !entry.values.contains(&value) && !entry.has_complete_values() {
entry.values.push(value);
}
}
}
}
data = mutable_data;
}
println!("{:#?}", data);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment