diff --git a/day4/README.md b/day4/README.md new file mode 100644 index 0000000..f8db273 --- /dev/null +++ b/day4/README.md @@ -0,0 +1,24 @@ +# Day4: Secure Container + +## Problem + +You arrive at the Venus fuel depot only to discover it's protected by a +password. The Elves had written the password on a sticky note, but someone +threw it out. + +However, they do remember a few key facts about the password: + +* It is a six-digit number. +* The value is within the range given in your puzzle input. +* Two adjacent digits are the same (like 22 in 122345). +* Going from left to right, the digits never decrease; they only ever increase +or stay the same (like 111123 or 135679). + +Other than the range rule, the following are true: + +* 111111 meets these criteria (double 11, never decreases). +* 223450 does not meet these criteria (decreasing pair of digits 50). +* 123789 does not meet these criteria (no double). + +How many different passwords within the range given in your puzzle input meet +these criteria? diff --git a/day4/python/day4.py b/day4/python/day4.py new file mode 100644 index 0000000..48d9cdc --- /dev/null +++ b/day4/python/day4.py @@ -0,0 +1,15 @@ +from collections import Counter + +low = 152085 +high = 670283 + +print(len(list( \ + filter( \ + lambda x: len(set(x)) != len(x) \ + and list(x) == sorted(x) \ + and 2 in set(Counter(x).values())\ + , map(str,range(low,high+1)) \ + ) \ + ) \ + ) \ +) diff --git a/day4/rust/Cargo.toml b/day4/rust/Cargo.toml new file mode 100644 index 0000000..26079ea --- /dev/null +++ b/day4/rust/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "day4" +version = "0.1.0" +authors = ["Tobias Eidelpes "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +itertools = "0.8" diff --git a/day4/rust/src/main.rs b/day4/rust/src/main.rs new file mode 100644 index 0000000..54b2805 --- /dev/null +++ b/day4/rust/src/main.rs @@ -0,0 +1,18 @@ +use itertools::Itertools; + +fn main() { + let passwords = (152_086_usize..670_282_usize) + .map(|x| x.to_string().chars().collect::>()) + .filter(|x| x.iter().zip(x.iter().skip(1)).all(|(x,y)| x <= y)) + .filter(|x| { + for (_,g) in &x.iter().group_by(|&y| y) { + if g.count() == 2 { + return true; + } + } + false + }) + .count(); + + println!("Solution: {:?}", passwords); +}