From e894185e742ab4b0acc85256dcc3ab6fc5ee1d1d Mon Sep 17 00:00:00 2001 From: Reiner Herrmann Date: Thu, 19 Dec 2019 17:53:42 +0100 Subject: day16 part2 --- src/main.rs | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 5ce7835..985a560 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1617,7 +1617,7 @@ fn fft_pattern(i: usize, j: usize) -> i8 { } fn fft(input: &[i8]) -> Vec { - let mut output = vec![0; input.len()]; + let mut output = vec![0; input.len()/2]; for i in 0..input.len()/2 { let mut sum : i32 = 0; @@ -1632,6 +1632,15 @@ fn fft(input: &[i8]) -> Vec { } output[i] = (sum % 10).abs() as i8; } + let mut half2 = fft_2nd_half(&input).split_off(input.len()/2); + output.append(&mut half2); + + output +} + +fn fft_2nd_half(input: &[i8]) -> Vec { + let mut output = vec![0; input.len()]; + let mut sum = 0; for i in (input.len()/2..input.len()).rev() { sum += input[i]; @@ -1656,17 +1665,25 @@ fn day16() { } println!(); - /* part 2 let mut long_input = String::new(); long_input.reserve(input.len() * 10_000); - for _ in 0..=10_000 { + for _ in 0..10_000 { long_input += input; } let mut values : Vec = long_input.chars().map(|x| x.to_digit(10).unwrap() as i8).collect(); + let mut pos : usize = 0; + for i in values.iter().take(7) { + pos *= 10; + pos += *i as usize; + } for _ in 0..100 { - values = fft(&values); + values = fft_2nd_half(&values); } - */ + print!("16b: "); + for d in values.iter().skip(pos).take(8) { + print!("{}", d); + } + println!(); } fn is_scaffold(map: &[Vec], pos: Point) -> bool { -- cgit v1.2.3