Add README and solution for day4

This commit is contained in:
Tobias Eidelpes 2019-12-07 12:53:43 +01:00
parent ffbe0f66a1
commit 40e0caa31a
4 changed files with 67 additions and 0 deletions

24
day4/README.md Normal file
View File

@ -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?

15
day4/python/day4.py Normal file
View File

@ -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)) \
) \
) \
) \
)

10
day4/rust/Cargo.toml Normal file
View File

@ -0,0 +1,10 @@
[package]
name = "day4"
version = "0.1.0"
authors = ["Tobias Eidelpes <tobias@eidelpes.info>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
itertools = "0.8"

18
day4/rust/src/main.rs Normal file
View File

@ -0,0 +1,18 @@
use itertools::Itertools;
fn main() {
let passwords = (152_086_usize..670_282_usize)
.map(|x| x.to_string().chars().collect::<Vec<char>>())
.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);
}