advent-of-code-2019/day4/src/main.rs

73 lines
2.0 KiB
Rust
Raw Normal View History

2019-12-06 04:32:45 +00:00
const INPUT_MIN: u32 = 245318;
const INPUT_MAX: u32 = 765747;
fn solve_part1() -> u32 {
let mut counter = 0;
for num in INPUT_MIN..=INPUT_MAX {
let num_string = num.to_string();
let mut previous = None;
let mut has_double = false;
let mut decreasing = false;
for c in num_string.chars() {
match previous {
None => previous = Some(c),
Some(p) => {
if p == c {
has_double = true;
}
if p.to_digit(10) > c.to_digit(10) {
decreasing = true;
break;
}
previous = Some(c);
}
}
}
if has_double && !decreasing {
counter += 1;
}
}
counter
}
fn solve_part2() -> u32 {
// too lazy to DRY it up
let mut counter = 0;
for num in INPUT_MIN..=INPUT_MAX {
let num_string = num.to_string();
let mut previous = None;
let mut has_double = false;
let mut matching_group_count = 1;
let mut decreasing = false;
for c in num_string.chars() {
match previous {
None => previous = Some(c),
Some(p) => {
if p == c {
matching_group_count += 1;
} else {
if matching_group_count == 2 {
has_double = true;
}
matching_group_count = 1;
}
if p.to_digit(10) > c.to_digit(10) {
decreasing = true;
break;
}
previous = Some(c);
}
}
}
if (matching_group_count == 2 || has_double) && !decreasing {
counter += 1;
}
}
counter
}
fn main() {
println!("Part 1: {}", solve_part1());
println!("Part 2: {}", solve_part2());
}