aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReiner Herrmann <reiner@reiner-h.de>2019-12-19 17:53:42 +0100
committerReiner Herrmann <reiner@reiner-h.de>2019-12-19 17:53:42 +0100
commite894185e742ab4b0acc85256dcc3ab6fc5ee1d1d (patch)
tree792f0907765058a76ec68e0942891b1fad4bd68e
parente0df7e7e036793228449b19b260d9af911deb5b9 (diff)
day16 part2
-rw-r--r--src/main.rs27
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 {