day2: both solutions first attempt
This commit is contained in:
74
src/day2.rs
Normal file
74
src/day2.rs
Normal file
@@ -0,0 +1,74 @@
|
||||
use aoc_runner_derive::{aoc, aoc_generator};
|
||||
use itertools::Itertools;
|
||||
use std::ops::RangeInclusive;
|
||||
|
||||
#[aoc_generator(day2)]
|
||||
fn parse(input: &str) -> Vec<RangeInclusive<u64>> {
|
||||
input
|
||||
.split(',')
|
||||
.map(|r| r.split_once('-').unwrap())
|
||||
.map(|(start, end)| RangeInclusive::new(start.parse().unwrap(), end.parse().unwrap()))
|
||||
.collect()
|
||||
}
|
||||
|
||||
#[aoc(day2, part1, Brute)]
|
||||
fn part1(input: &[RangeInclusive<u64>]) -> u64 {
|
||||
let mut invalid_sum = 0;
|
||||
|
||||
for r in input {
|
||||
for product in r.clone() {
|
||||
let prod_s = product.to_string();
|
||||
if prod_s.len() % 2 != 0 {
|
||||
continue;
|
||||
}
|
||||
let (left, right) = prod_s.split_at(prod_s.len() / 2);
|
||||
if left == right {
|
||||
invalid_sum += product
|
||||
}
|
||||
}
|
||||
}
|
||||
invalid_sum
|
||||
}
|
||||
|
||||
#[aoc(day2, part2, Brute)]
|
||||
fn part2(input: &[RangeInclusive<u64>]) -> u64 {
|
||||
let mut invalid_sum = 0;
|
||||
for r in input {
|
||||
for product in r.clone() {
|
||||
let prod_s = product.to_string();
|
||||
for n in 1..=prod_s.len() / 2 {
|
||||
if prod_s.len() % n != 0 {
|
||||
continue;
|
||||
}
|
||||
if prod_s
|
||||
.chars()
|
||||
.chunks(n)
|
||||
.into_iter()
|
||||
.map(|c| c.collect::<String>())
|
||||
.all_equal()
|
||||
{
|
||||
invalid_sum += product;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
invalid_sum
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
const EXAMPLE: &str = "11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124";
|
||||
|
||||
#[test]
|
||||
fn part1_example() {
|
||||
assert_eq!(part1(&parse(EXAMPLE)), 1227775554);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn part2_example() {
|
||||
assert_eq!(part2(&parse(EXAMPLE)), 4174379265);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user