summaryrefslogtreecommitdiff
path: root/src/day1.rs
blob: 113cd37971db9e192da3bef454c5a96e7fabf9dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
use std::fs;
fn parse_input(input_string: &str, column1: &mut Vec<i32>, column2: &mut Vec<i32>) {
    let mut counter = 0;
    input_string.split('\n').for_each(|line| {
        if line.is_empty() {
            return;
        }
        let values = line
            .split_once(' ')
            .expect("Expected line to split successfully");
        // println!("{}, {}", values.0, values.1);
        let first = values.0.trim().parse::<i32>().unwrap();
        let second = values.1.trim().parse::<i32>().unwrap();
        column1.insert(counter, first);
        column2.insert(counter, second);
        counter += 1;
    });
}
pub fn part1(input_path: &str) {
    println!("Part 1, Day 1");
    let input = fs::read_to_string(input_path)
        .expect("Expected to read the file");
    let mut loc1: Vec<i32> = Vec::new();
    let mut loc2: Vec<i32> = Vec::new();
    parse_input(&input, &mut loc1, &mut loc2);
    let mut sum = 0;
    for i in 0..loc1.len() {
        let diff = (loc1[i] - loc2[i]).abs();
        // println!("1: {}, 2: {}, d: {}", loc1[i], loc2[i], diff);
        sum += diff;
    }
    println!("Solution: {}", sum);
}
pub fn part2(input_path: &str) {
    println!("Part 2, Day 1");
    let input = fs::read_to_string(input_path)
        .expect("Expected to read file normally");
    let mut list1: Vec<i32> = Vec::new();
    let mut list2: Vec<i32> = Vec::new();
    parse_input(&input, &mut list1, &mut list2);
    let mut similarity_score_sum = 0;
    for elem in &list1 {
        let mut occurences = 0;
        for i in &list2 {
            if elem == i {
                occurences += 1;
            }
        }
        similarity_score_sum += elem * occurences;
    }
    println!("Solution: {}", similarity_score_sum);
}