From 4e7420463d1af0c7e0f7da2d1585f805f5223de6 Mon Sep 17 00:00:00 2001 From: kageru Date: Mon, 5 Dec 2022 10:26:36 +0100 Subject: [PATCH] add 2022/04 --- 2022/src/bin/day04.rs | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/2022/src/bin/day04.rs b/2022/src/bin/day04.rs index d0c2dde..5f45471 100644 --- a/2022/src/bin/day04.rs +++ b/2022/src/bin/day04.rs @@ -1,29 +1,46 @@ #![feature(test)] extern crate test; +use std::ops::RangeInclusive; + use aoc2022::{boilerplate, common::*}; const DAY: usize = 4; -type Parsed = Vec; +type Parsed = Vec<(RangeInclusive, RangeInclusive)>; + +fn parse_range(r: &str) -> RangeInclusive { + let (a, b) = r.split_once('-').unwrap(); + parse_num(a)..=parse_num(b) +} fn parse_input(raw: &str) -> Parsed { - parse_nums(raw) + raw.lines() + .map(|line| { + let (a, b) = line.split_once(',').unwrap(); + (parse_range(a), parse_range(b)) + }) + .collect() } fn part1(parsed: &Parsed) -> usize { - unimplemented!() + parsed.iter().filter(|(a, b)| (a.start() <= b.start() && a.end() >= b.end()) || (b.start() <= a.start() && b.end() >= a.end())).count() } fn part2(parsed: &Parsed) -> usize { - unimplemented!() + parsed.iter().filter(|(a, b)| a.contains(b.start()) || a.contains(b.end()) || b.contains(a.start()) || b.contains(a.end())).count() } boilerplate! { - TEST_INPUT == "", + TEST_INPUT == "2-4,6-8 +2-3,4-5 +5-7,7-9 +2-8,3-7 +6-6,4-6 +2-6,4-8", tests: { - part1: { TEST_INPUT => 0 }, - part2: { TEST_INPUT => 0 }, + part1: { TEST_INPUT => 2 }, + part2: { TEST_INPUT => 4 }, }, - bench1 == 0, - bench2 == 0, - bench_parse: Vec::len => 0, + bench1 == 494, + bench2 == 833, + bench_parse: Vec::len => 1000, }