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