a few days
This commit is contained in:
@ -1,4 +1,95 @@
|
||||
|
||||
pub fn run(inp :Vec<String>) {
|
||||
|
||||
}
|
||||
fn decript_message(mut mes: Vec<(i32, usize)>) -> Vec<(i32, usize)> {
|
||||
|
||||
|
||||
let n = mes.len();
|
||||
let mut index = 0;
|
||||
|
||||
while index < n {
|
||||
|
||||
// look for current index
|
||||
let i = mes.iter().position(|elem| elem.1 == index).unwrap();
|
||||
|
||||
let e = mes[i].0;
|
||||
let rang_num = mes[i].1;
|
||||
|
||||
if e == 0 {
|
||||
println!("{}, {}, {}", e, i, rang_num);
|
||||
}
|
||||
|
||||
if e > 0 {
|
||||
|
||||
|
||||
let mut new_index = i as i32 + e;
|
||||
|
||||
//let mut to_add = new_index;
|
||||
//while {
|
||||
// to_add /= mes.len() as i32;
|
||||
// to_add >= mes.len() as i32
|
||||
//} {}
|
||||
|
||||
//new_index = (new_index % mes.len() as i32) + to_add;
|
||||
|
||||
|
||||
while new_index >= mes.len() as i32 {
|
||||
new_index -= mes.len() as i32;
|
||||
new_index += 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
mes.remove(i);
|
||||
mes.insert(new_index as usize, (e, rang_num));
|
||||
|
||||
|
||||
} else if e < 0 {
|
||||
|
||||
let mut new_index = i as i32 + e;
|
||||
//let to_sub = new_index.abs() / mes.len() as i32;
|
||||
//new_index = (new_index % mes.len() as i32) - to_sub;
|
||||
while new_index < 0 {
|
||||
new_index += mes.len() as i32;
|
||||
new_index -= 1;
|
||||
}
|
||||
|
||||
mes.remove(i);
|
||||
mes.insert(new_index as usize, (e, rang_num));
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
index += 1;
|
||||
|
||||
}
|
||||
|
||||
|
||||
mes
|
||||
|
||||
}
|
||||
|
||||
pub fn run(inp: Vec<String>) {
|
||||
let parsed_inp: Vec<(i32, usize)> = inp
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|elem| (elem.1.parse::<i32>().unwrap(), elem.0))
|
||||
.collect();
|
||||
|
||||
|
||||
let decripted_message = decript_message(parsed_inp);
|
||||
println!("{:?}", decripted_message);
|
||||
|
||||
// find index of 0:
|
||||
for (i, e) in decripted_message.iter().enumerate() {
|
||||
if e.0 == 0 {
|
||||
let a = decripted_message[(i + 1000) % decripted_message.len()].0;
|
||||
let b = decripted_message[(i + 2000) % decripted_message.len()].0;
|
||||
let c = decripted_message[(i + 3000) % decripted_message.len()].0;
|
||||
|
||||
println!("a:{}; b:{}, c:{}", a, b, c);
|
||||
|
||||
println!("a1: {}", a + b + c);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
107
d20/src/a2.rs
107
d20/src/a2.rs
@ -1,5 +1,106 @@
|
||||
|
||||
|
||||
pub fn run(inp :Vec<String>) {
|
||||
fn decript_message(mut mes: Vec<(i64, usize)>) -> Vec<(i64, usize)> {
|
||||
|
||||
}
|
||||
let n = mes.len();
|
||||
|
||||
for _ in 0..10 {
|
||||
|
||||
let mut index = 0;
|
||||
|
||||
while index < n {
|
||||
|
||||
// look for current index
|
||||
let i = mes.iter().position(|elem| elem.1 == index).unwrap();
|
||||
|
||||
let e = mes[i].0;
|
||||
let rang_num = mes[i].1;
|
||||
|
||||
if e == 0 {
|
||||
println!("{}, {}, {}", e, i, rang_num);
|
||||
}
|
||||
|
||||
if e > 0 {
|
||||
|
||||
|
||||
let mut new_index = i as i64 + e;
|
||||
|
||||
|
||||
/*
|
||||
let mut to_add = new_index / mes.len() as i64;
|
||||
while {
|
||||
to_add = to_add / mes.len() as i64;
|
||||
to_add >= mes.len() as i64
|
||||
|
||||
} {}
|
||||
*/
|
||||
|
||||
//let to_add = new_index / mes.len() as i64;
|
||||
//new_index = (new_index % mes.len() as i64) + to_add;
|
||||
|
||||
/*
|
||||
while new_index >= mes.len() as i64 {
|
||||
new_index -= mes.len() as i64;
|
||||
new_index += 1;
|
||||
}
|
||||
*/
|
||||
mes.remove(i);
|
||||
mes.insert(new_index as usize, (e, rang_num));
|
||||
|
||||
|
||||
} else if e < 0 {
|
||||
|
||||
let mut new_index = i as i64 + e;
|
||||
//let to_sub = new_index.abs() / mes.len() as i64;
|
||||
//new_index = (new_index % mes.len() as i64) - to_sub;
|
||||
|
||||
while new_index < 0 {
|
||||
new_index += mes.len() as i64;
|
||||
new_index -= 1;
|
||||
}
|
||||
|
||||
mes.remove(i);
|
||||
mes.insert(new_index as usize, (e, rang_num));
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
index += 1;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
mes
|
||||
|
||||
}
|
||||
|
||||
pub fn run(inp: Vec<String>) {
|
||||
const DECRIPTION_KEY :i64 = 811589153;
|
||||
|
||||
let parsed_inp: Vec<(i64, usize)> = inp
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|elem| (elem.1.parse::<i64>().unwrap() * DECRIPTION_KEY, elem.0))
|
||||
.collect();
|
||||
|
||||
|
||||
let decripted_message = decript_message(parsed_inp);
|
||||
|
||||
println!("{:?}", decripted_message);
|
||||
|
||||
|
||||
// find index of 0:
|
||||
for (i, e) in decripted_message.iter().enumerate() {
|
||||
if e.0 == 0 {
|
||||
let a = decripted_message[(i + 1000) % decripted_message.len()].0;
|
||||
let b = decripted_message[(i + 2000) % decripted_message.len()].0;
|
||||
let c = decripted_message[(i + 3000) % decripted_message.len()].0;
|
||||
|
||||
println!("a:{}; b:{}, c:{}", a, b, c);
|
||||
|
||||
println!("a2: {}", a + b + c);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3,7 +3,7 @@ use std::io::BufRead;
|
||||
mod a1;
|
||||
mod a2;
|
||||
|
||||
fn read_file(path :&str) -> Vec<String> {
|
||||
pub fn read_file(path :&str) -> Vec<String> {
|
||||
|
||||
let file = std::fs::File::open(path);
|
||||
|
||||
@ -32,7 +32,7 @@ fn read_file(path :&str) -> Vec<String> {
|
||||
|
||||
fn main() {
|
||||
|
||||
let inp :Vec<String> = read_file("input.txt");
|
||||
let inp :Vec<String> = read_file("test_input.txt");
|
||||
|
||||
a1::run(inp.clone());
|
||||
|
||||
|
Reference in New Issue
Block a user