Select Git revision
fetch-upstream-changes.sh
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(())
}