commit
419206c9bd
@ -0,0 +1 @@
|
|||||||
|
/target
|
@ -0,0 +1,7 @@
|
|||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustadventofcode"
|
||||||
|
version = "0.1.0"
|
@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "rustadventofcode"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
@ -0,0 +1,48 @@
|
|||||||
|
use std::fs;
|
||||||
|
|
||||||
|
pub fn step1() -> i32 {
|
||||||
|
let data = collect_data();
|
||||||
|
let elfdata = organise_data(data);
|
||||||
|
let highest = return_highest(elfdata);
|
||||||
|
return highest;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn step2() -> i32 {
|
||||||
|
let data = collect_data();
|
||||||
|
let mut elfdata = organise_data(data);
|
||||||
|
elfdata.sort_by(|a, b| b.cmp(a));
|
||||||
|
let total = add_together(vec![elfdata[0], elfdata[1], elfdata[2]]);
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn add_together(data: Vec<i32>) -> i32 {
|
||||||
|
return data.iter().sum();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn collect_data() -> Vec<String> {
|
||||||
|
let data = fs::read_to_string("src/day1/input.txt").expect("Unable to read file");
|
||||||
|
let eachline: Vec<String> = data.split("\n").map(str::to_string).collect();
|
||||||
|
return eachline;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn organise_data(data: Vec<String>) -> Vec<i32> {
|
||||||
|
let mut elfscores: Vec<i32> = Vec::new();
|
||||||
|
|
||||||
|
let mut amount: i32 = 0;
|
||||||
|
for line in data {
|
||||||
|
if line.len() < 1 {
|
||||||
|
if amount > 0 {
|
||||||
|
elfscores.push(amount);
|
||||||
|
amount = 0;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
amount += line.parse::<i32>().unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
return elfscores;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn return_highest(data: Vec<i32>) -> i32 {
|
||||||
|
return *data.iter().max().unwrap();
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,81 @@
|
|||||||
|
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;
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,13 @@
|
|||||||
|
mod day1;
|
||||||
|
mod day2;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
println!(
|
||||||
|
"The answer to day 1 task 1 is: {}",
|
||||||
|
day1::step1().to_string()
|
||||||
|
);
|
||||||
|
println!("The answer to day 1 task 2 is: {}", day1::step2());
|
||||||
|
|
||||||
|
println!("The answer to day 2 task 1 is: {}", day2::step1());
|
||||||
|
println!("The answer to day 2 task 2 is: {}", day2::step2());
|
||||||
|
}
|
Loading…
Reference in new issue