init
This commit is contained in:
70
d02/src/a1.rs
Normal file
70
d02/src/a1.rs
Normal file
@ -0,0 +1,70 @@
|
||||
|
||||
fn eval_score(enemy_move :&str, ally_move :&str) -> i32 {
|
||||
|
||||
let diff = ally_move.chars().nth(0).unwrap() as i32 - (enemy_move.chars().nth(0).unwrap() as i32 + ('W' as i32 - 'A' as i32));
|
||||
|
||||
let bonus = ally_move.chars().nth(0).unwrap() as i32 - 'W' as i32;
|
||||
|
||||
|
||||
let tmp = match diff {
|
||||
1 => 3,
|
||||
2 | -1 => 6,
|
||||
_ => 0
|
||||
} + bonus;
|
||||
|
||||
tmp
|
||||
}
|
||||
|
||||
pub fn run(inp :Vec<String>) {
|
||||
|
||||
let mut score = 0;
|
||||
|
||||
inp.iter().for_each(|elem| {
|
||||
let moves = elem.split(' ').collect::<Vec<&str>>();
|
||||
let a = eval_score(moves[0], moves[1]);
|
||||
score += a;
|
||||
|
||||
});
|
||||
|
||||
println!("a1: {}", score);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
win: 2, -1
|
||||
Draw: 1
|
||||
Lose: 3, 0
|
||||
|
||||
88 - 87 = 1 -> Draw
|
||||
89 - 87 = 2 -> Win
|
||||
90 - 87 = 3 -> Lose
|
||||
X - (A + (W - A)) = 0 -> draw
|
||||
A - Y + W = -1 -> Win
|
||||
A - Z + W = -2 -> Lose
|
||||
|
||||
88 - 88 = 0 -> Lose
|
||||
89 - 88 = 1 -> Draw
|
||||
90 - 88 = 2 -> Win
|
||||
B - X + W = 1 -> Lose
|
||||
B - Y + W = 0 -> draw
|
||||
B - Z + W = -1 -> Win
|
||||
|
||||
88 - 89 = -1 -> Win
|
||||
89 - 89 = 0 -> Lose
|
||||
90 - 89 = 1 -> Draw
|
||||
C - X + W = 2 -> Win
|
||||
Y - (C + (W - A)) = 1 -> Lose
|
||||
C - Z + W = 0 -> draw
|
||||
|
||||
A: Stein
|
||||
B: Papier
|
||||
C: Schere
|
||||
X: Stein (1)
|
||||
Y: Papier (2)
|
||||
Z: Schere (3)
|
||||
|
||||
win: 6
|
||||
tie: 3
|
||||
loose: 0
|
||||
|
||||
*/
|
74
d02/src/a2.rs
Normal file
74
d02/src/a2.rs
Normal file
@ -0,0 +1,74 @@
|
||||
|
||||
|
||||
fn eval_score(enemy_move :&str, ally_move :&str) -> i32 {
|
||||
|
||||
let ally_char = ally_move.chars().nth(0).unwrap();
|
||||
let enemy_char = enemy_move.chars().nth(0).unwrap();
|
||||
|
||||
let diff = ally_char as i32 - (enemy_char as i32 + ('W' as i32 - 'A' as i32));
|
||||
|
||||
let move_score = match enemy_char {
|
||||
'A' => {if diff == 1 {diff + 2} else {(diff + 2) % 3}}
|
||||
'B' => {diff + 1}
|
||||
'C' => {if diff == 1 {diff} else {diff + 3}}
|
||||
_ => {0}
|
||||
};
|
||||
|
||||
let win_score = match ally_char {
|
||||
'X' => 0,
|
||||
'Y' => 3,
|
||||
'Z' => 6,
|
||||
_ => 0
|
||||
};
|
||||
|
||||
move_score + win_score
|
||||
}
|
||||
|
||||
pub fn run(inp :Vec<String>) {
|
||||
|
||||
let mut score = 0;
|
||||
|
||||
inp.iter().for_each(|elem| {
|
||||
let moves = elem.split(' ').collect::<Vec<&str>>();
|
||||
let a = eval_score(moves[0], moves[1]);
|
||||
score += a;
|
||||
|
||||
});
|
||||
|
||||
println!("a2: {}", score);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Stein: 0, 1, 2
|
||||
Schere: 0, 1, 2
|
||||
Papier: -1, 1, 3
|
||||
|
||||
X - (A + (W-A)) = 1 -> Schere (3)
|
||||
Y - (A + (W-A)) = 2 -> Stein (1)
|
||||
Z - (A + (W-A)) = 3 -> Papier (2)
|
||||
|
||||
X - (B + (W-A)) = 0 -> Stein (1)
|
||||
Y - (B + (W-A)) = 1 -> Papier (2)
|
||||
Z - (B + (W-A)) = 2 -> Schere (3)
|
||||
|
||||
X - (C + (W-A)) = -1 -> Papier (2)
|
||||
Y - (C + (W-A)) = 0 -> Schere (3)
|
||||
Z - (C + (W-A)) = 1 -> Stein (1)
|
||||
|
||||
A: Stein
|
||||
B: Papier
|
||||
C: Schere
|
||||
X: loose
|
||||
Y: draw
|
||||
Z: win
|
||||
|
||||
scere: 1
|
||||
stein: 2
|
||||
paier: 3
|
||||
|
||||
win: 6
|
||||
tie: 3
|
||||
loose: 0
|
||||
|
||||
*/
|
41
d02/src/main.rs
Normal file
41
d02/src/main.rs
Normal file
@ -0,0 +1,41 @@
|
||||
use std::io::BufRead;
|
||||
|
||||
mod a1;
|
||||
mod a2;
|
||||
|
||||
fn read_file(path :&str) -> Vec<String> {
|
||||
|
||||
let file = std::fs::File::open(path);
|
||||
|
||||
return match file {
|
||||
|
||||
Ok(handle) => {
|
||||
|
||||
let reader = std::io::BufReader::new(handle);
|
||||
|
||||
let mut vec : Vec<String> = vec![];
|
||||
|
||||
reader.lines().for_each(|elem| {
|
||||
vec.push(elem.unwrap());
|
||||
});
|
||||
|
||||
vec
|
||||
|
||||
}
|
||||
|
||||
Err(_) => vec![]
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
||||
let inp :Vec<String> = read_file("input.txt");
|
||||
|
||||
a1::run(inp.clone());
|
||||
|
||||
a2::run(inp);
|
||||
|
||||
}
|
Reference in New Issue
Block a user