Advertisement
raedr7n

aoc13

Jan 11th, 2022 (edited)
380
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.95 KB | None | 0 0
  1. fn fold(lines: Vec<(char, usize)>, paper: &mut Vec<(usize, usize)>) {
  2.     for (axis, mag) in lines.iter() {
  3.         match axis {
  4.             'x' => {
  5.                 for (x, _) in paper.into_iter() {
  6.                     if *x > *mag {
  7.                         *x = *x - 2 * (*x - mag);
  8.                     }
  9.                 }
  10.             }
  11.             'y' => {
  12.                 for (_, y) in paper.into_iter() {
  13.                     if *y > *mag {
  14.                         *y = *y - 2 * (*y - mag);
  15.                     }
  16.                 }
  17.             }
  18.             _ => unreachable!(),
  19.         }
  20.     }
  21. }
  22.  
  23. fn prnt(paper: &[(usize, usize)]) {
  24.     for y in 0_usize
  25.         ..=(paper
  26.             .iter()
  27.             .fold(0, |ac, (_, el)| if *el > ac { *el } else { ac }))
  28.     {
  29.         for x in 0_usize
  30.             ..=(paper
  31.                 .iter()
  32.                 .fold(0, |ac, (el, _)| if *el > ac { *el } else { ac }))
  33.         {
  34.             print!("{}", if paper.contains(&(x, y)) { "█" } else { " " });
  35.         }
  36.         println!();
  37.     }
  38. }
  39.  
  40. fn main() {
  41.     let input = std::fs::read_to_string("inputs/input13.txt").unwrap();
  42.     let input: Vec<_> = input.split('\n').collect();
  43.     let input: Vec<_> = input.split(|x| *x == "").collect();
  44.  
  45.     let mut paper: Vec<_> = input[0]
  46.         .iter()
  47.         .map(|x| {
  48.             let mut m = x.split(",");
  49.             (
  50.                 m.next().unwrap().parse::<usize>().unwrap(),
  51.                 m.next().unwrap().parse::<usize>().unwrap(),
  52.             )
  53.         })
  54.         .collect();
  55.  
  56.     let lines: Vec<_> = input[1]
  57.         .iter()
  58.         .map(|x| {
  59.             let mut m = x.split(" ").nth(2).unwrap().split('=');
  60.             (
  61.                 m.next().unwrap().parse::<char>().unwrap(),
  62.                 m.next().unwrap().parse::<usize>().unwrap(),
  63.             )
  64.         })
  65.         .collect();
  66.  
  67.     fold(lines, &mut paper);
  68.     paper.sort();
  69.     paper.dedup();
  70.     prnt(&paper);
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement