day 2
This commit is contained in:
parent
c5d6c5142d
commit
cede3289dc
8
day2/Cargo.toml
Normal file
8
day2/Cargo.toml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "day2"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
2500
day2/input.txt
Normal file
2500
day2/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
3
day2/sample_input.txt
Normal file
3
day2/sample_input.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
A Y
|
||||||
|
B X
|
||||||
|
C Z
|
86
day2/src/main.rs
Normal file
86
day2/src/main.rs
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
#[derive(PartialEq)]
|
||||||
|
#[repr(u8)]
|
||||||
|
enum Move {
|
||||||
|
ROCK = 1,
|
||||||
|
PAPER = 2,
|
||||||
|
SCISSORS = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
#[repr(u8)]
|
||||||
|
enum Outcome {
|
||||||
|
LOSS = 0,
|
||||||
|
DRAW = 3,
|
||||||
|
WIN = 6
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TryFrom<char> for Move {
|
||||||
|
type Error = ();
|
||||||
|
|
||||||
|
fn try_from(c: char) -> Result<Self, Self::Error> {
|
||||||
|
match c {
|
||||||
|
'A' | 'X' => Ok(Move::ROCK),
|
||||||
|
'B' | 'Y' => Ok(Move::PAPER),
|
||||||
|
'C' | 'Z' => Ok(Move::SCISSORS),
|
||||||
|
_ => Err(()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::fmt::Display for Move {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
match self {
|
||||||
|
Move::ROCK => f.write_str("Rock").unwrap(),
|
||||||
|
Move::PAPER => f.write_str("Paper").unwrap(),
|
||||||
|
Move::SCISSORS => f.write_str("Scissors").unwrap(),
|
||||||
|
};
|
||||||
|
|
||||||
|
std::fmt::Result::Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
const INPUT: &str = include_str!("../input.txt");
|
||||||
|
|
||||||
|
|
||||||
|
let mut your_score: u64 = 0;
|
||||||
|
let mut their_score: u64 = 0;
|
||||||
|
|
||||||
|
let lines = INPUT.split("\n");
|
||||||
|
for line in lines {
|
||||||
|
let mut tokens = line.split(' ');
|
||||||
|
|
||||||
|
let their_move = tokens.next().unwrap();
|
||||||
|
let your_move = tokens.next().unwrap();
|
||||||
|
|
||||||
|
let their_move = Move::try_from(their_move.chars().next().unwrap()).unwrap();
|
||||||
|
let your_move = Move::try_from(your_move.chars().next().unwrap()).unwrap();
|
||||||
|
|
||||||
|
let outcome: Outcome;
|
||||||
|
if their_move == your_move {
|
||||||
|
outcome = Outcome::DRAW
|
||||||
|
}
|
||||||
|
else if their_move == Move::ROCK {
|
||||||
|
outcome = if your_move == Move::PAPER { Outcome::WIN } else { Outcome::LOSS };
|
||||||
|
}
|
||||||
|
else if their_move == Move::PAPER {
|
||||||
|
outcome = if your_move == Move::SCISSORS { Outcome::WIN } else { Outcome::LOSS };
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
outcome = if your_move == Move::ROCK { Outcome::WIN } else { Outcome::LOSS };
|
||||||
|
}
|
||||||
|
|
||||||
|
let outcome: u64 = outcome as u64;
|
||||||
|
your_score += outcome;
|
||||||
|
their_score += 6 - (outcome);
|
||||||
|
|
||||||
|
let your_move: u64 = your_move as u64;
|
||||||
|
let their_move: u64 = their_move as u64;
|
||||||
|
your_score += your_move;
|
||||||
|
their_score += their_move;
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("Your score: {your_score}");
|
||||||
|
println!("Their score: {their_score}");
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user