AdventOfCode/day5/src/main.rs

45 lines
1.0 KiB
Rust
Raw Normal View History

2018-12-05 07:45:16 +01:00
use std::fs;
use std::char;
fn main() {
let lines = fs::read_to_string("input").expect("Unable to read file");
//Part 1
println!("{}", reduce(lines.clone()));
//Part 2
let mut all_lengths: Vec<i32> = Vec::new();
for i in 0..26 {
let big_char = char::from_u32(65+i).unwrap();
let little_char = char::from_u32(97+i).unwrap();
let string = lines.clone().replace(big_char, "").replace(little_char, "");
all_lengths.push(reduce(string));
}
println!("{}", all_lengths.iter().min().unwrap());
}
fn reduce(string: String) -> i32 {
2018-12-05 08:22:03 +01:00
let all_chars: Vec<char> = string.chars().into_iter().collect();
2018-12-05 07:45:16 +01:00
2018-12-05 08:22:03 +01:00
let mut stack: Vec<char> = Vec::new();
2018-12-05 07:45:16 +01:00
2018-12-05 08:22:03 +01:00
for c in all_chars{
if !stack.is_empty(){
let sub = *stack.last().unwrap() as i32 - c as i32;
if sub == 32 || sub == -32 {
stack.pop();
} else{
stack.push(c.clone());
2018-12-05 07:45:16 +01:00
}
2018-12-05 08:22:03 +01:00
} else {
stack.push(c.clone());
2018-12-05 07:45:16 +01:00
}
}
2018-12-05 08:22:03 +01:00
return stack.len() as i32
}