Skip to content

Commit 8bec836

Browse files
committed
feat: part 1 of day 4
1 parent 75083d7 commit 8bec836

File tree

3 files changed

+80
-0
lines changed

3 files changed

+80
-0
lines changed

day04/Cargo.toml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[package]
2+
name = "day04"
3+
version = "0.1.0"
4+
authors = ["Dennis Pettersson <mail@dennispettersson.se>"]
5+
edition = "2018"
6+
7+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8+
9+
[dependencies]

day04/src/main.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#![feature(label_break_value)]
2+
3+
use std::io::Result;
4+
5+
mod part_01;
6+
7+
use part_01::main as part_01;
8+
9+
const PUZZLE_INPUT: &'static str = "347312-805915";
10+
11+
fn main() -> Result<()> {
12+
'part_01: {
13+
println!("part_01: {}", part_01(&PUZZLE_INPUT).unwrap());
14+
}
15+
16+
'part_02: {}
17+
Ok(())
18+
}
19+
20+
#[cfg(test)]
21+
mod tests {
22+
use super::*;
23+
24+
#[test]
25+
fn it_gets_the_right_answer_for_examples() {
26+
assert_eq!(true, part_01::meet_criteria("111111"));
27+
assert_eq!(false, part_01::meet_criteria("223450"));
28+
assert_eq!(false, part_01::meet_criteria("123789"));
29+
}
30+
}

day04/src/part_01.rs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
use std::io::Result;
2+
3+
pub fn meet_criteria(input: &str) -> bool {
4+
let bytes: Vec<_> = input
5+
.chars()
6+
.map(|c| c.to_string().parse::<u8>().unwrap())
7+
.collect();
8+
9+
let mut pairs = false;
10+
let mut never_decrese = true;
11+
for i in 1..bytes.len() {
12+
let current = bytes[i];
13+
let prev = bytes[i - 1];
14+
if never_decrese == false {
15+
break;
16+
}
17+
18+
pairs = pairs || current == prev;
19+
20+
never_decrese = current >= prev;
21+
}
22+
23+
pairs && never_decrese
24+
}
25+
26+
pub fn main(input: &str) -> Result<u32> {
27+
let range = &input
28+
.split('-')
29+
.map(|part| part.parse::<u32>().unwrap())
30+
.collect::<Vec<u32>>();
31+
32+
let mut count = 0;
33+
for i in range[0]..range[1] {
34+
let string = i.to_string();
35+
if meet_criteria(&string) {
36+
count += 1;
37+
}
38+
}
39+
40+
Ok(count)
41+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy