Added day 1 and day 2 2022

This commit is contained in:
strNophix 2022-12-11 13:28:42 +01:00
parent dadbc79893
commit beefa83b7c
6 changed files with 4864 additions and 0 deletions

2250
aoc2022/inputs/day_1.txt Normal file

File diff suppressed because it is too large Load Diff

2500
aoc2022/inputs/day_2.txt Normal file

File diff suppressed because it is too large Load Diff

41
aoc2022/src/day_1.rs Normal file
View File

@ -0,0 +1,41 @@
fn solution_part1(text: String) -> i32 {
text.split("\n\n")
.map(|e| e.lines().map(|c| c.parse::<i32>().unwrap()).sum())
.max()
.unwrap()
}
fn solution_part2(text: String) -> i32 {
let mut cals = text
.split("\n\n")
.map(|e| e.lines().map(|c| c.parse::<i32>().unwrap()).sum())
.collect::<Vec<i32>>();
cals.sort();
return cals.iter().rev().take(3).sum();
}
#[cfg(test)]
mod tests {
use std::fs;
use super::*;
#[test]
fn basic_example() {
let input =
"1000\n2000\n3000\n\n4000\n\n5000\n6000\n\n7000\n8000\n9000\n\n10000".to_string();
assert_eq!(solution_part1(input), 24000);
}
#[test]
fn answer_part1() {
let input = fs::read_to_string("inputs/day_1.txt").unwrap();
println!("Answer to part 1 of day 1: {:#?}", solution_part1(input));
}
#[test]
fn answer_part2() {
let input = fs::read_to_string("inputs/day_1.txt").unwrap();
println!("Answer to part 2 of day 1: {:#?}", solution_part2(input));
}
}

68
aoc2022/src/day_2.rs Normal file
View File

@ -0,0 +1,68 @@
fn calc_score(opponent: char, me: char) -> u32 {
let mut score = 0;
score += match (opponent, me) {
('A', 'Z') | ('B', 'X') | ('C', 'Y') => 0,
('C', 'X') | ('A', 'Y') | ('B', 'Z') => 6,
_ => 3,
};
score += match me {
'X' => 1,
'Y' => 2,
'Z' => 3,
_ => unreachable!(),
};
return score;
}
fn find_move(opponent: char, result: char) -> char {
match (opponent, result) {
(_, 'Y') => char::from_u32(opponent as u32 - 'A' as u32 + 'X' as u32).unwrap(),
('B', 'X') | ('C', 'Z') => 'X',
('C', 'X') | ('A', 'Z') => 'Y',
('A', 'X') | ('B', 'Z') => 'Z',
_ => unreachable!(),
}
}
fn solution_part1(text: String) -> u32 {
text.lines()
.filter(|g| g.len() == 3)
.map(|g| {
let mut chars = g.chars();
calc_score(chars.next().unwrap(), chars.next_back().unwrap())
})
.sum()
}
fn solution_part2(text: String) -> u32 {
text.lines()
.filter(|g| g.len() == 3)
.map(|g| {
let mut chars = g.chars();
let opponent = chars.next().unwrap();
let me = find_move(opponent, chars.next_back().unwrap());
calc_score(opponent, me)
})
.sum()
}
#[cfg(test)]
mod tests {
use std::fs;
use super::*;
#[test]
fn answer_part1() {
let input = fs::read_to_string("inputs/day_2.txt").unwrap();
println!("Answer to part 1 of day 2: {:#?}", solution_part1(input));
}
#[test]
fn answer_part2() {
let input = fs::read_to_string("inputs/day_2.txt").unwrap();
println!("Answer to part 2 of day 2: {:#?}", solution_part2(input));
}
}

View File

@ -1,3 +1,6 @@
#[derive(Debug)]
struct Range(i32, i32);

View File

@ -1,3 +1,5 @@
#![allow(dead_code)]
mod day_1;
mod day_2;
mod day_4;
mod day_6;