Add solution for 2020 day 15

[?]
Jun 23, 2021, 8:34 PM
AUANWDXPFRRFSWULJTVTWGSYY3EYIWHBSQQT7XU3UCP54UVR3ZBQC

Dependencies

Change contents

  • file addition: day15.rs (----------)
    [2.17]
    #![feature(iter_advance_by)]
    use std::collections::HashMap;
    use std::env;
    struct ElfGame {
    history: HashMap<usize, usize>,
    last: usize,
    len: usize,
    }
    impl ElfGame {
    fn new() -> Self {
    ElfGame {
    history: HashMap::new(),
    last: 0,
    len: 0,
    }
    }
    fn push(&mut self, num: usize) {
    self.history.insert(self.last, self.len);
    self.len += 1;
    self.last = num;
    }
    }
    impl Iterator for ElfGame {
    type Item = usize;
    fn next(&mut self) -> Option<Self::Item> {
    let nxt = self.history.get(&self.last)
    .map_or_else(|| 0, |p| self.len - p);
    self.push(nxt);
    Some(nxt)
    }
    }
    fn main() {
    use std::io::BufReader;
    use std::io::BufRead;
    use std::fs::File;
    use std::path::Path;
    use std::str::FromStr;
    let mut eg = ElfGame::new();
    let args: Vec<_> = env::args().collect();
    let file = BufReader::new(File::open(<String as AsRef<Path>>::as_ref(&args[2])).unwrap());
    for strnum in file.split(b',') {
    match <usize as FromStr>::from_str(String::from_utf8(strnum.unwrap_or(vec![])).unwrap_or("".to_string()).trim()) {
    Ok(num) => {
    eg.push(num);
    }
    Err(_) => ()
    }
    }
    match eg.advance_by(<usize as FromStr>::from_str(args[1].as_ref()).unwrap() - eg.len - 1) {
    Ok(_) => println!("{}", eg.next().unwrap()),
    Err(err) => eprintln!("{:?}", err),
    }
    }