d05
This commit is contained in:
parent
4d132cbe7c
commit
5dffb6f929
4 changed files with 1482 additions and 1 deletions
28
res/05/example
Normal file
28
res/05/example
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
47|53
|
||||||
|
97|13
|
||||||
|
97|61
|
||||||
|
97|47
|
||||||
|
75|29
|
||||||
|
61|13
|
||||||
|
75|53
|
||||||
|
29|13
|
||||||
|
97|29
|
||||||
|
53|29
|
||||||
|
61|53
|
||||||
|
97|53
|
||||||
|
61|29
|
||||||
|
47|13
|
||||||
|
75|47
|
||||||
|
97|75
|
||||||
|
47|61
|
||||||
|
75|61
|
||||||
|
47|29
|
||||||
|
75|13
|
||||||
|
53|13
|
||||||
|
|
||||||
|
75,47,61,53,29
|
||||||
|
97,61,53,29,13
|
||||||
|
75,29,13
|
||||||
|
75,97,47,61,53
|
||||||
|
61,13,29
|
||||||
|
97,13,75,29,47
|
1371
res/05/input
Normal file
1371
res/05/input
Normal file
File diff suppressed because it is too large
Load diff
82
src/days/d05.rs
Normal file
82
src/days/d05.rs
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
use std::fs;
|
||||||
|
|
||||||
|
pub fn solve() {
|
||||||
|
let path = "res/05/input";
|
||||||
|
|
||||||
|
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
|
||||||
|
|
||||||
|
let (rules_str, updates_str) = contents.split_once("\n\n").unwrap();
|
||||||
|
|
||||||
|
let rules: Vec<(usize, usize)> = rules_str
|
||||||
|
.lines()
|
||||||
|
.map(|s| {
|
||||||
|
s.split_once("|")
|
||||||
|
.map(|(n1, n2)| (n1.parse::<usize>().unwrap(), n2.parse::<usize>().unwrap()))
|
||||||
|
.unwrap()
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
let updates: Vec<Vec<usize>> = updates_str
|
||||||
|
.lines()
|
||||||
|
.map(|line| {
|
||||||
|
line.split(",")
|
||||||
|
.map(|n| n.parse::<usize>().unwrap())
|
||||||
|
.collect::<Vec<usize>>()
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
let result: usize = updates
|
||||||
|
.iter()
|
||||||
|
.filter(|upd| {
|
||||||
|
upd.iter().enumerate().all(|(i, n)| {
|
||||||
|
rules
|
||||||
|
.iter()
|
||||||
|
.filter(|(n1, _)| *n1 == *n)
|
||||||
|
.all(|(_, n2)| upd.iter().take(i).all(|n| n != n2))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.map(|upd| upd[(upd.len() / 2) as usize])
|
||||||
|
.sum();
|
||||||
|
|
||||||
|
println!("Result 1: {}", result);
|
||||||
|
|
||||||
|
let result: usize = updates
|
||||||
|
.iter()
|
||||||
|
.filter(|upd| {
|
||||||
|
!upd.iter().enumerate().all(|(i, n)| {
|
||||||
|
rules
|
||||||
|
.iter()
|
||||||
|
.filter(|(n1, _)| *n1 == *n)
|
||||||
|
.all(|(_, n2)| upd.iter().take(i).all(|n| n != n2))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.map(|upd| {
|
||||||
|
let mut upd = upd.clone();
|
||||||
|
while upd.iter().enumerate().any(|(i, n)| {
|
||||||
|
rules
|
||||||
|
.iter()
|
||||||
|
.filter(|(n1, _)| *n1 == *n)
|
||||||
|
.any(|(_, n2)| upd.iter().take(i).any(|n| n == n2))
|
||||||
|
}) {
|
||||||
|
for i in 0..upd.len() {
|
||||||
|
let mut upd2 = upd.clone();
|
||||||
|
rules
|
||||||
|
.iter()
|
||||||
|
.filter(|(n1, _)| *n1 == upd[i])
|
||||||
|
.filter(|(_, n2)| upd.iter().take(i).any(|n| n == n2))
|
||||||
|
.take(1)
|
||||||
|
.for_each(|(_, n2)| {
|
||||||
|
let pos = upd.iter().position(|n| *n == *n2).unwrap();
|
||||||
|
upd2[pos] = upd[i];
|
||||||
|
upd2[i] = *n2;
|
||||||
|
});
|
||||||
|
upd = upd2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
upd
|
||||||
|
})
|
||||||
|
.map(|upd| upd[(upd.len() / 2) as usize])
|
||||||
|
.sum();
|
||||||
|
|
||||||
|
println!("Result 2: {}", result);
|
||||||
|
}
|
|
@ -29,11 +29,11 @@ fn _all_days() {
|
||||||
days::d04::solve();
|
days::d04::solve();
|
||||||
time = _print_elapsed(time);
|
time = _print_elapsed(time);
|
||||||
|
|
||||||
/*
|
|
||||||
println!("\nDay 5");
|
println!("\nDay 5");
|
||||||
days::d05::solve();
|
days::d05::solve();
|
||||||
time = _print_elapsed(time);
|
time = _print_elapsed(time);
|
||||||
|
|
||||||
|
/*
|
||||||
println!("\nDay 6");
|
println!("\nDay 6");
|
||||||
days::d06::solve();
|
days::d06::solve();
|
||||||
time = _print_elapsed(time);
|
time = _print_elapsed(time);
|
||||||
|
|
Loading…
Reference in a new issue