blob: 9a84dd4a3448f6f61a8a97f1979f2a3d0f549685 (
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
|
use std::collections::HashSet;
fn solve_part_one(input: &str) -> i32 {
let mut seen = HashSet::new();
let numbers: Vec<i32> = input
.lines()
.map(|line| line.trim().parse().unwrap())
.collect();
for &number in &numbers {
let complement = 2020 - number;
if seen.contains(&complement) {
return number * complement;
}
seen.insert(number);
}
panic!("No two numbers sum to 2020!");
}
fn solve_part_two(input: &str) -> i32 {
let numbers: Vec<i32> = input
.lines()
.map(|line| line.trim().parse().unwrap())
.collect();
for (i, &first) in numbers.iter().enumerate() {
let mut seen = HashSet::new();
let target_sum = 2020 - first;
for &second in &numbers[i + 1..] {
let complement = target_sum - second;
if seen.contains(&complement) {
return first * second * complement;
}
seen.insert(second);
}
}
panic!("No three numbers sum to 2020!");
}
fn main() {
let test = include_str!("../input/day_1.test");
let prod = include_str!("../input/day_1.prod");
println!("Test_1: {}", solve_part_one(test));
println!("Prod_1: {}", solve_part_one(prod));
println!("Test_2: {}", solve_part_two(test));
println!("Prod_2: {}", solve_part_two(prod));
}
|