Added day 1 and day 2 2022
This commit is contained in:
parent
dadbc79893
commit
beefa83b7c
2250
aoc2022/inputs/day_1.txt
Normal file
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
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
41
aoc2022/src/day_1.rs
Normal 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
68
aoc2022/src/day_2.rs
Normal 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));
|
||||
}
|
||||
}
|
@ -1,3 +1,6 @@
|
||||
|
||||
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Range(i32, i32);
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
#![allow(dead_code)]
|
||||
mod day_1;
|
||||
mod day_2;
|
||||
mod day_4;
|
||||
mod day_6;
|
||||
|
Loading…
x
Reference in New Issue
Block a user