diff options
| author | Reiner Herrmann <reiner@reiner-h.de> | 2019-12-19 17:53:42 +0100 |
|---|---|---|
| committer | Reiner Herrmann <reiner@reiner-h.de> | 2019-12-19 17:53:42 +0100 |
| commit | e894185e742ab4b0acc85256dcc3ab6fc5ee1d1d (patch) | |
| tree | 792f0907765058a76ec68e0942891b1fad4bd68e | |
| parent | e0df7e7e036793228449b19b260d9af911deb5b9 (diff) | |
day16 part2
| -rw-r--r-- | src/main.rs | 27 |
1 files changed, 22 insertions, 5 deletions
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<i8> { - 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<i8> { } 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<i8> { + 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<i8> = 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<char>], pos: Point) -> bool { |
