mirror of
https://github.com/mx42/aoc2016.git
synced 2026-01-14 05:39:51 +01:00
feat: add day 6
This commit is contained in:
@@ -1,18 +1,17 @@
|
||||
advent_of_code::solution!(5);
|
||||
|
||||
fn get_valid_digests(prefix: &str) -> impl Iterator<Item = String> + '_ {
|
||||
(1..)
|
||||
.flat_map(move |x| {
|
||||
let data = format!("{}{:?}", prefix, x);
|
||||
let digest = format!("{:x}", md5::compute(data));
|
||||
if digest.starts_with("00000") {
|
||||
Some(digest)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
})
|
||||
// .filter(|x| x.is_some())
|
||||
// .map(|x| x.unwrap())
|
||||
(1..).flat_map(move |x| {
|
||||
let data = format!("{}{:?}", prefix, x);
|
||||
let digest = format!("{:x}", md5::compute(data));
|
||||
if digest.starts_with("00000") {
|
||||
Some(digest)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
})
|
||||
// .filter(|x| x.is_some())
|
||||
// .map(|x| x.unwrap())
|
||||
}
|
||||
|
||||
pub fn part_one(input: &str) -> Option<String> {
|
||||
@@ -43,7 +42,7 @@ pub fn part_two(input: &str) -> Option<String> {
|
||||
// println!(" - put {} in {:?} - digest {}", char_to_put, pos_nth, digest);
|
||||
}
|
||||
}
|
||||
Some(*state) // .clone())
|
||||
Some(*state) // .clone())
|
||||
})
|
||||
.filter(|s| s.iter().all(|x| x.is_some()))
|
||||
.take(1)
|
||||
|
||||
65
src/bin/06.rs
Normal file
65
src/bin/06.rs
Normal file
@@ -0,0 +1,65 @@
|
||||
advent_of_code::solution!(6);
|
||||
|
||||
use std::collections::HashMap;
|
||||
|
||||
fn compute_frequencies(input: &str) -> HashMap<usize, HashMap<char, usize>> {
|
||||
let frequencies: HashMap<usize, HashMap<char, usize>> = HashMap::new();
|
||||
input.split("\n").fold(frequencies, |mut frq, str| {
|
||||
str.chars().enumerate().for_each(|(n, c)| {
|
||||
let slot_frq = frq.entry(n).or_default();
|
||||
*slot_frq.entry(c).or_default() += 1;
|
||||
});
|
||||
frq
|
||||
})
|
||||
}
|
||||
|
||||
pub fn part_one(input: &str) -> Option<String> {
|
||||
let input = input.strip_suffix("\n").unwrap_or(input);
|
||||
let mut res = compute_frequencies(input)
|
||||
.into_iter()
|
||||
.map(|(k, v)| {
|
||||
(
|
||||
k,
|
||||
v.into_iter()
|
||||
.max_by_key(|(_, cnt)| *cnt)
|
||||
.map(|(chr, _)| chr),
|
||||
)
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
res.sort_by_key(|(k, _)| *k);
|
||||
Some(res.into_iter().map(|(_, v)| v.unwrap()).collect::<String>())
|
||||
}
|
||||
|
||||
pub fn part_two(input: &str) -> Option<String> {
|
||||
let input = input.strip_suffix("\n").unwrap_or(input);
|
||||
let mut res = compute_frequencies(input)
|
||||
.into_iter()
|
||||
.map(|(k, v)| {
|
||||
(
|
||||
k,
|
||||
v.into_iter()
|
||||
.min_by_key(|(_, cnt)| *cnt)
|
||||
.map(|(chr, _)| chr),
|
||||
)
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
res.sort_by_key(|(k, _)| *k);
|
||||
Some(res.into_iter().map(|(_, v)| v.unwrap()).collect::<String>())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_part_one() {
|
||||
let result = part_one(&advent_of_code::template::read_file("examples", DAY));
|
||||
assert_eq!(result, Some("easter".into()));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part_two() {
|
||||
let result = part_two(&advent_of_code::template::read_file("examples", DAY));
|
||||
assert_eq!(result, Some("advent".into()));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user