Added 2022 day 4

This commit is contained in:
strNophix 2022-12-04 20:56:40 +01:00
parent 422c1a4124
commit 44e5a16b48
4 changed files with 1088 additions and 0 deletions

8
aoc2022/Cargo.toml Normal file
View File

@ -0,0 +1,8 @@
[package]
name = "aoc2022"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

1000
aoc2022/inputs/day_4.txt Normal file

File diff suppressed because it is too large Load Diff

78
aoc2022/src/day_4.rs Normal file
View File

@ -0,0 +1,78 @@
#[derive(Debug)]
struct Range(i32, i32);
impl Range {
fn contains(&self, other: &Range) -> bool {
return self.0 <= other.0 && self.1 >= other.1;
}
fn from_str(string: &str) -> Range {
let (start, end) = string.split_once('-').unwrap();
return Range(start.parse::<i32>().unwrap(), end.parse::<i32>().unwrap());
}
}
fn parse_pairs(line: &str) -> (Range, Range) {
let (left, right) = line.split_once(',').unwrap();
return (Range::from_str(left), Range::from_str(right));
}
fn solution_part1(input: &str) -> i32 {
let mut result: i32 = 0;
for line in input.lines() {
let (left, right) = parse_pairs(line);
if left.contains(&right) || right.contains(&left) {
result += 1;
}
}
return result;
}
fn solution_part2(input: &str) -> i32 {
let mut result: i32 = 0;
for line in input.lines() {
let (left, right) = parse_pairs(line);
if left.0 <= right.1 && left.1 >= right.0 {
result += 1;
}
}
return result;
}
#[cfg(test)]
mod tests {
use std::fs;
use super::*;
#[test]
fn contains() {
assert!(Range(4, 6).contains(&Range(6, 6)))
}
#[test]
fn basic_example() {
let input = "2-4,6-8\n2-3,4-5\n5-7,7-9\n2-8,3-7\n6-6,4-6\n2-6,4-8";
let expected = 2;
let result = solution_part1(input);
assert_eq!(result, expected);
}
#[test]
fn answer_part1() {
let input = fs::read_to_string("inputs/day_4.txt").unwrap();
println!(
"Answer to part 1 of day 4: {:#?}",
solution_part1(input.as_str())
);
}
#[test]
fn answer_part2() {
let input = fs::read_to_string("inputs/day_4.txt").unwrap();
println!(
"Answer to part 2 of day 4: {:#?}",
solution_part2(input.as_str())
);
}
}

2
aoc2022/src/lib.rs Normal file
View File

@ -0,0 +1,2 @@
#[allow(dead_code)]
mod day_4;