Guest User

Untitled

a guest
Dec 5th, 2018
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.79 KB | None | 0 0
  1. use std::collections::HashMap;
  2.  
  3. const INPUT: &str = include_str!("../data/input.txt");
  4.  
  5. pub fn main() {
  6.     let claims = INPUT
  7.         .lines()
  8.         .filter_map(|l| {
  9.             let mut nums = l
  10.                 .split(|c| c == '#' || c == '@' || c == ',' || c == ':' || c == 'x')
  11.                 .filter_map(|num| num.trim().parse::<usize>().ok());
  12.  
  13.             let c = Claim {
  14.                 id: nums.next().unwrap(),
  15.                 x: nums.next().unwrap(),
  16.                 y: nums.next().unwrap(),
  17.                 width: nums.next().unwrap(),
  18.                 height: nums.next().unwrap(),
  19.             };
  20.  
  21.             Some(c)
  22.         }).collect::<Vec<_>>();
  23.  
  24.     let mut inserted = HashMap::new();
  25.     let mut all_claims = claims.iter().map(|c| c.id).collect::<Vec<_>>();
  26.  
  27.     for claim in claims {
  28.         for x in claim.x..claim.x + claim.width {
  29.             for y in claim.y..claim.y + claim.height {
  30.                 *inserted.entry((x, y)).or_insert(0) += 1;
  31.  
  32.                 if *inserted.entry((x, y)).or_default() > 1 {
  33.                     if let Some(index) = all_claims.iter().position(|c| c == &claim.id) {
  34.                         all_claims.remove(index);
  35.                     }
  36.                 }
  37.             }
  38.         }
  39.     }
  40.  
  41.     println!(
  42.         "{}",
  43.         inserted
  44.             .iter()
  45.             .fold(0, |acc, (_, v)| if *v > 1 { acc + 1 } else { acc })
  46.     );
  47.  
  48.     println!("{:?}", all_claims);
  49. }
  50.  
  51. struct Claim {
  52.     id: usize,
  53.  
  54.     x: usize,
  55.     y: usize,
  56.  
  57.     width: usize,
  58.     height: usize,
  59. }
  60.  
  61. impl fmt::Debug for Claim {
  62.     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  63.         write!(
  64.             f,
  65.             "Claim #{} @{},{}: {}x{}",
  66.             self.id, self.x, self.y, self.width, self.height
  67.         )
  68.     }
  69. }
Add Comment
Please, Sign In to add comment