Advertisement
Guest User

AoC Day 20

a guest
Dec 20th, 2021
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 2.35 KB | None | 0 0
  1. #![feature(destructuring_assignment)]
  2.  
  3. use std::collections::VecDeque;
  4. use itertools::Itertools;
  5. use bitvec::prelude::*;
  6.  
  7. pub fn day20() {
  8.     //take input
  9.     let input = include_str!("../temp20");
  10.     let correct_string: BitVec = input.chars().take(512).map(|x| {
  11.         !x.eq(&'.') }).collect();
  12.     let mut image1: Vec<Vec<bool>> = Vec::with_capacity(250);
  13.     image1.extend(input.lines().skip(2).map(|x| {
  14.         let mut innerVec = Vec::with_capacity(250);
  15.         innerVec.extend(
  16.         x.chars().map(|x| {
  17.             !x.eq(&'.') })
  18.         );
  19.         innerVec
  20.     }));
  21.     let mut newImage: Vec<Vec<bool>> = Vec::with_capacity(250);
  22.     for i in 0..image1.len() + 2 {
  23.         let mut inner_VEc = Vec::with_capacity(250);
  24.         for j in 0..image1[0].len() + 2 {
  25.             inner_VEc.push(false);
  26.         }
  27.         newImage.push(inner_VEc);
  28.     }
  29.     let mut outer_val = false;
  30.     //loop for iters
  31.     for iters in 0..50 {
  32.         for (i, x) in newImage.iter_mut().enumerate() {
  33.             for (j, v) in x.iter_mut().enumerate() {
  34.                 let (ii, jj) = (i as i32 - 1, j as i32 - 1);
  35.                 let mut count = 0;
  36.                 for k in ii - 1 ..= ii + 1 {
  37.                     for l in jj - 1 ..= jj + 1 {
  38.                         if k >= 0 && k < image1.len() as i32 && l >= 0 && l < image1[0].len() as i32
  39.                         {
  40.                             count <<= 1;
  41.                             count += image1[k as usize][l as usize] as usize;
  42.                         } else {
  43.                             count <<= 1;
  44.                             count += outer_val as usize;
  45.                         }
  46.                     }
  47.                 }
  48.                 *v = correct_string[count];
  49.             }
  50.         }
  51.  
  52.         (image1, newImage) = (newImage, image1);
  53.  
  54.         for i in newImage.iter_mut() {
  55.             i.push(false);
  56.             i.push(false);
  57.             i.push(false);
  58.             i.push(false);
  59.         }
  60.         newImage.push(vec![false; newImage[0].len() + 4]);
  61.         newImage.push(vec![false; newImage[0].len() + 4]);
  62.         newImage.push(vec![false; newImage[0].len() + 4]);
  63.         newImage.push(vec![false; newImage[0].len() + 4]);
  64.         outer_val = !outer_val;
  65.     }
  66.     println!("ANS: {}", image1.iter().fold(0, |a, x|  a + x.iter().fold(0, |x, &y| x+ (y as i32) )));
  67.     return;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement