Add README and solution for day4
This commit is contained in:
parent
ffbe0f66a1
commit
40e0caa31a
24
day4/README.md
Normal file
24
day4/README.md
Normal 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
15
day4/python/day4.py
Normal 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
10
day4/rust/Cargo.toml
Normal 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
18
day4/rust/src/main.rs
Normal 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);
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user