Add solution for 2020 day 15
[?]
Jun 23, 2021, 8:34 PM
AUANWDXPFRRFSWULJTVTWGSYY3EYIWHBSQQT7XU3UCP54UVR3ZBQCDependencies
- [2]
B527MN66Solve day 1 for 2020
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),}}