Skip to content

Instantly share code, notes, and snippets.

Created December 12, 2016 09:56
Show Gist options
  • Select an option

  • Save anonymous/8c69268f952879ddb47060d57a64dd9f to your computer and use it in GitHub Desktop.

Select an option

Save anonymous/8c69268f952879ddb47060d57a64dd9f to your computer and use it in GitHub Desktop.

Revisions

  1. @invalid-email-address Anonymous created this gist Dec 12, 2016.
    48 changes: 48 additions & 0 deletions playground.rs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,48 @@
    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);
    }