Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #![feature(destructuring_assignment)]
- use std::collections::VecDeque;
- use itertools::Itertools;
- use bitvec::prelude::*;
- pub fn day20() {
- //take input
- let input = include_str!("../temp20");
- let correct_string: BitVec = input.chars().take(512).map(|x| {
- !x.eq(&'.') }).collect();
- let mut image1: Vec<Vec<bool>> = Vec::with_capacity(250);
- image1.extend(input.lines().skip(2).map(|x| {
- let mut innerVec = Vec::with_capacity(250);
- innerVec.extend(
- x.chars().map(|x| {
- !x.eq(&'.') })
- );
- innerVec
- }));
- let mut newImage: Vec<Vec<bool>> = Vec::with_capacity(250);
- for i in 0..image1.len() + 2 {
- let mut inner_VEc = Vec::with_capacity(250);
- for j in 0..image1[0].len() + 2 {
- inner_VEc.push(false);
- }
- newImage.push(inner_VEc);
- }
- let mut outer_val = false;
- //loop for iters
- for iters in 0..50 {
- for (i, x) in newImage.iter_mut().enumerate() {
- for (j, v) in x.iter_mut().enumerate() {
- let (ii, jj) = (i as i32 - 1, j as i32 - 1);
- let mut count = 0;
- for k in ii - 1 ..= ii + 1 {
- for l in jj - 1 ..= jj + 1 {
- if k >= 0 && k < image1.len() as i32 && l >= 0 && l < image1[0].len() as i32
- {
- count <<= 1;
- count += image1[k as usize][l as usize] as usize;
- } else {
- count <<= 1;
- count += outer_val as usize;
- }
- }
- }
- *v = correct_string[count];
- }
- }
- (image1, newImage) = (newImage, image1);
- for i in newImage.iter_mut() {
- i.push(false);
- i.push(false);
- i.push(false);
- i.push(false);
- }
- newImage.push(vec![false; newImage[0].len() + 4]);
- newImage.push(vec![false; newImage[0].len() + 4]);
- newImage.push(vec![false; newImage[0].len() + 4]);
- newImage.push(vec![false; newImage[0].len() + 4]);
- outer_val = !outer_val;
- }
- println!("ANS: {}", image1.iter().fold(0, |a, x| a + x.iter().fold(0, |x, &y| x+ (y as i32) )));
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement