Day 1 Part 2
This commit is contained in:
parent
cf5e0af3af
commit
90edac903a
2 changed files with 87 additions and 0 deletions
1
day1/answer2
Normal file
1
day1/answer2
Normal file
|
@ -0,0 +1 @@
|
|||
24869388
|
86
day1/p2.rs
Normal file
86
day1/p2.rs
Normal file
|
@ -0,0 +1,86 @@
|
|||
use std::env;
|
||||
use std::fs;
|
||||
use std::process;
|
||||
use std::{thread, time};
|
||||
use std::collections::HashMap;
|
||||
|
||||
fn main() {
|
||||
//println!("Hello world!");
|
||||
|
||||
let args: Vec<String> = env::args().collect();
|
||||
let mut path = String::from("");
|
||||
|
||||
if args.len() > 1 {
|
||||
path = args[1].clone();
|
||||
} else {
|
||||
println!("Specify an input file!");
|
||||
process::exit(1);
|
||||
}
|
||||
|
||||
if ! fs::metadata(path.clone()).is_ok() {
|
||||
println!("Path does not exist!");
|
||||
process::exit(1);
|
||||
}
|
||||
|
||||
//let rawInput = fs::read_to_string(path.clone()).unwrap();
|
||||
//let splitInput: Vec<&str> = rawInput.lines().collect();
|
||||
|
||||
let mut left: Vec<i32> = vec![];
|
||||
let mut right: Vec<i32> = vec![];
|
||||
|
||||
for line in fs::read_to_string(path.clone()).unwrap().lines() {
|
||||
//let line = splitInput[i];
|
||||
let split: Vec<&str> = line.split(" ").collect();
|
||||
|
||||
//println!("{}",split[0]);
|
||||
|
||||
left.push(split[0].parse().unwrap());
|
||||
right.push(split[1].parse().unwrap());
|
||||
}
|
||||
|
||||
left.sort();
|
||||
right.sort();
|
||||
|
||||
let mut leftDup = HashMap::new();
|
||||
let mut rightDup = HashMap::new();
|
||||
|
||||
// This is kinda ass but I don't care :)
|
||||
let mut i: usize = 0;
|
||||
while i < left.len() {
|
||||
let mut k: usize = i;
|
||||
while k < left.len() && left[i] == left[k] {
|
||||
k+=1;
|
||||
}
|
||||
|
||||
leftDup.insert(left[i],k-i);
|
||||
|
||||
i = k;
|
||||
}
|
||||
|
||||
//println!("{}", leftDup[&3]);
|
||||
|
||||
i = 0;
|
||||
while i < right.len() {
|
||||
let mut k: usize = i;
|
||||
while k < right.len() && right[i] == right[k] {
|
||||
k+=1;
|
||||
}
|
||||
|
||||
rightDup.insert(right[i],k-i);
|
||||
|
||||
i = k;
|
||||
}
|
||||
|
||||
//println!("{}", rightDup[&3]);
|
||||
|
||||
let mut accum: i32 = 0;
|
||||
for (left, num) in &leftDup {
|
||||
let shit = match rightDup.get(left) {
|
||||
Some(val) => *val,
|
||||
None => 0,
|
||||
};
|
||||
accum += (*left * (*num as i32)) * (shit as i32);
|
||||
}
|
||||
|
||||
println!("{}", accum);
|
||||
}
|
Loading…
Reference in a new issue