You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.5 KiB
46 lines
1.5 KiB
1 year ago
|
use std::fs::File;
|
||
|
use std::io::BufRead;
|
||
|
use std::io::BufReader;
|
||
|
use std::path::PathBuf;
|
||
|
|
||
|
use clap::Parser;
|
||
|
|
||
|
#[derive(Parser)]
|
||
|
struct Cli {
|
||
|
filename: PathBuf,
|
||
|
}
|
||
|
|
||
|
fn main() {
|
||
|
let cli = Cli::parse();
|
||
|
let file = File::open(cli.filename).expect("Can't read file");
|
||
|
let reader = BufReader::new(file);
|
||
|
|
||
|
let mut score = 0;
|
||
|
for line in reader.lines() {
|
||
|
let line = line.unwrap();
|
||
|
if line.is_empty() {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
let mut play = line.trim().split(' ');
|
||
|
let their_play = play.next().unwrap();
|
||
|
let play_result = play.next().unwrap();
|
||
|
|
||
|
// A = Rock (1), B = Paper (2), C = Scissors (3)
|
||
|
// X = Lose (0), Y = Draw (3), Z = Win (6)
|
||
|
score += match (their_play, play_result) {
|
||
|
("A", "X") => 0 + 3, // they play rock, I lose, I played scissors
|
||
|
("B", "X") => 0 + 1, // they play paper, I lose, I played rock
|
||
|
("C", "X") => 0 + 2, // they play scissors, I lose, I played paper
|
||
|
("A", "Y") => 3 + 1, // they play rock, we draw, I played rock
|
||
|
("B", "Y") => 3 + 2, // they play paper, we draw, I played paper
|
||
|
("C", "Y") => 3 + 3, // they play scissors, we draw, I played scissors
|
||
|
("A", "Z") => 6 + 2, // they play rock, I win, I played paper
|
||
|
("B", "Z") => 6 + 3, // they played paper, I win, I played scissors
|
||
|
("C", "Z") => 6 + 1, // they played sicssors, I win, I played rock
|
||
|
_ => 0,
|
||
|
};
|
||
|
}
|
||
|
println!("Your score; {}", score);
|
||
|
}
|