Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- fn p1(v: &[(u64, u64)]) -> u64 {
- v.iter().fold(0, |h, &(low, high)| {
- if low > h {
- return h;
- }
- std::cmp::max(h, high + 1)
- })
- }
- fn p2(v: &[(u64, u64)]) -> u64 {
- v.iter()
- .chain(std::iter::once(&(1 << 32, 1 << 32)))
- .fold((0, 0), |(h, c), &(low, high)| if low > h {
- (high + 1, c + low - h)
- } else {
- (std::cmp::max(h, high + 1), c)
- })
- .1
- }
- fn main() {
- let mut pairs: Vec<_> = include_str!("../../20.input")
- .lines()
- .map(|line| {
- let v: Vec<_> = line.split('-').map(|w| w.parse::<u64>().unwrap()).collect();
- (v[0], v[1])
- })
- .collect();
- pairs.sort();
- println!("P1 = {}", p1(&pairs));
- println!("P2 = {}", p2(&pairs));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement