Skip to content
Snippets Groups Projects
Select Git revision
  • df01cd47fe1a9e489e8a11b14e8e55e5e683be33
  • master default
  • testing
3 results

fetch-upstream-changes.sh

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    main.rs 1.75 KiB
    use std::fs::File;
    use std::io::{self, prelude::*, BufReader};
    
    const WANTED_SUM: i64 = 2020;
    
    fn find_sum(numbers: &[i64], first: &mut usize, last: &mut usize, wanted_sum: i64) {
        while first < last {
            let sum = numbers[*first] + numbers[*last];
            if sum < wanted_sum {
                *first += 1;
            } else if sum > wanted_sum {
                *last -= 1;
            } else {
                break;
            }
        }
    }
    
    fn main() -> io::Result<()> {
        println!("Advent of Code 2020 – Day 1:");
    
        let file = File::open("input.txt")?;
        let reader = BufReader::new(file);
    
        let mut input_numbers: Vec<i64> = reader
            .lines()
            .map(|l| {
                l.unwrap()
                    .parse::<i64>()
                    .expect("Error: Could not parse each line")
            })
            .collect();
    
        input_numbers.sort();
    
        let mut first = 0;
        let mut last = input_numbers.len() - 1; 
    
        find_sum(&input_numbers, &mut first, &mut last, WANTED_SUM);
    
        let product: i64 = input_numbers[first] * input_numbers[last];
    
        println!("Answer Part 1: {} * {} = {}", input_numbers[first], input_numbers[last], product);
    
        let mut middle = 0;
    
        for index in 0..(input_numbers.len() - 1) {
            first = index + 1;
            last = input_numbers.len() - 1;
            find_sum(&input_numbers, &mut first, &mut last, WANTED_SUM-input_numbers[index]);
            let sum = input_numbers[first] + input_numbers[index] + input_numbers[last];
            if sum == WANTED_SUM {
                middle = index;
                break;
            }
        }
    
        let product2: i64 = input_numbers[first] * input_numbers[middle] * input_numbers[last];
    
        println!("Answer Part 2: {} * {} * {} = {}", input_numbers[first], input_numbers[middle], input_numbers[last], product2);
    
        Ok(())
    }