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.
82 lines
1.7 KiB
82 lines
1.7 KiB
use std::fs;
|
|
|
|
fn collect_data() -> Vec<String> {
|
|
let data = fs::read_to_string("src/day2/input.txt").expect("Unable to read file");
|
|
let eachline: Vec<String> = data.split("\n").map(str::to_string).collect();
|
|
return eachline;
|
|
}
|
|
|
|
fn get_points_for_match(mat: &str) -> i32 {
|
|
let items: Vec<String> = mat.split(" ").map(str::to_string).collect();
|
|
|
|
let mut points = 0;
|
|
|
|
if items[1] == "X" {
|
|
points += 1;
|
|
} else if items[1] == "Y" {
|
|
points += 2;
|
|
} else if items[1] == "Z" {
|
|
points += 3;
|
|
}
|
|
|
|
if (items[0] == "C" && items[1] == "X")
|
|
|| (items[0] == "B" && items[1] == "Z")
|
|
|| (items[0] == "A" && items[1] == "Y")
|
|
{
|
|
points += 6
|
|
} else if (items[0] == "A" && items[1] == "Z")
|
|
|| (items[0] == "C" && items[1] == "Y")
|
|
|| (items[0] == "B" && items[1] == "X")
|
|
{
|
|
points += 0;
|
|
} else {
|
|
points += 3;
|
|
}
|
|
|
|
return points;
|
|
}
|
|
|
|
fn get_points_for_match_2(mat: &str) -> i32 {
|
|
let items: Vec<String> = mat.split(" ").map(str::to_string).collect();
|
|
|
|
let mut points = 0;
|
|
|
|
if items[1] == "Y" {
|
|
points += 3
|
|
} else if items[1] == "Z" {
|
|
points += 6;
|
|
}
|
|
|
|
if items[0] == "A" {
|
|
points += 2;
|
|
} else if items[0] == "B" {
|
|
points += 3;
|
|
} else if items[0] == "C" {
|
|
points += 1;
|
|
}
|
|
|
|
return points;
|
|
}
|
|
|
|
pub fn step1() -> i32 {
|
|
let items = collect_data();
|
|
|
|
let mut total = 0;
|
|
for item in items {
|
|
total += get_points_for_match(&item);
|
|
}
|
|
|
|
return total;
|
|
}
|
|
|
|
pub fn step2() -> i32 {
|
|
let items = collect_data();
|
|
|
|
let mut total = 0;
|
|
for item in items {
|
|
total += get_points_for_match_2(&item);
|
|
}
|
|
|
|
return total;
|
|
}
|