Add day 20
This commit is contained in:
parent
47a7381575
commit
a264e1e6d3
7
day20_test.txt
Normal file
7
day20_test.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
1
|
||||||
|
2
|
||||||
|
-3
|
||||||
|
3
|
||||||
|
-2
|
||||||
|
0
|
||||||
|
4
|
@ -1,3 +1,52 @@
|
|||||||
|
use base::read_file;
|
||||||
|
|
||||||
|
fn do_encryption(key: &Vec<(usize, i64)>, data: &mut Vec<(usize, i64)>) {
|
||||||
|
let wrap_size = data.len() - 1;
|
||||||
|
for (index_to_find, enc_datum) in key {
|
||||||
|
let index = data.iter().position(|(org_index, _)| org_index == index_to_find).unwrap();
|
||||||
|
if *enc_datum == 0 {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
let element = data.remove(index);
|
||||||
|
|
||||||
|
if *enc_datum > 0 {
|
||||||
|
let enc_datum = *enc_datum as usize;
|
||||||
|
data.rotate_left((enc_datum % wrap_size) as usize);
|
||||||
|
} else {
|
||||||
|
let enc_datum = enc_datum.abs() as usize;
|
||||||
|
data.rotate_right((enc_datum % wrap_size) as usize);
|
||||||
|
}
|
||||||
|
|
||||||
|
data.insert(index, element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn calc_result(data: Vec<(usize, i64)>) -> i64 {
|
||||||
|
let zero_index = data.iter().position(|(_, value)| *value == 0).unwrap();
|
||||||
|
println!("Found zero at {}", zero_index);
|
||||||
|
let wrap_size = data.len();
|
||||||
|
let number_1 = data[(zero_index + 1000) % wrap_size].1;
|
||||||
|
let number_2 = data[(zero_index + 2000) % wrap_size].1;
|
||||||
|
let number_3 = data[(zero_index + 3000) % wrap_size].1;
|
||||||
|
|
||||||
|
number_1 + number_2 + number_3
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
println!("Not ready");
|
let enc_data = read_file("day20.txt").iter().filter_map(|line| line.parse().ok()).enumerate().collect::<Vec<(usize, i64)>>();
|
||||||
|
|
||||||
|
let mut result = enc_data.clone();
|
||||||
|
do_encryption(&enc_data, &mut result);
|
||||||
|
|
||||||
|
|
||||||
|
println!("Task 1: {}", calc_result(result));
|
||||||
|
|
||||||
|
let enc_data = enc_data.iter().map(|(idx, value)| (*idx, value * 811589153)).collect::<Vec<_>>();
|
||||||
|
let mut result = enc_data.clone();
|
||||||
|
for _ in 0..10 {
|
||||||
|
do_encryption(&enc_data, &mut result);
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("Task 2: {}", calc_result(result));
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user