solve Day02 in rust
This commit is contained in:
parent
2dcaaf8e1d
commit
c01a96c05d
4
.gitignore
vendored
4
.gitignore
vendored
@ -172,4 +172,6 @@ Cargo.lock
|
|||||||
**/*.rs.bk
|
**/*.rs.bk
|
||||||
|
|
||||||
# MSVC Windows builds of rustc generate these, which store debugging information
|
# MSVC Windows builds of rustc generate these, which store debugging information
|
||||||
*.pdb
|
*.pdb
|
||||||
|
|
||||||
|
helper.md
|
8
Day02/rust/Cargo.toml
Normal file
8
Day02/rust/Cargo.toml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "rust"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
57
Day02/rust/src/main.rs
Normal file
57
Day02/rust/src/main.rs
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
use std::fs::File;
|
||||||
|
use std::io::{self, BufRead};
|
||||||
|
use std::path::Path;
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
fn parse_game_data(line: &str) -> (i32, HashMap<String, i32>) {
|
||||||
|
let parts: Vec<&str> = line.split(": ").collect();
|
||||||
|
let game_id = parts[0].split_whitespace().nth(1).unwrap().parse::<i32>().unwrap();
|
||||||
|
let mut color_counts = HashMap::new();
|
||||||
|
color_counts.insert("red".to_string(), 0);
|
||||||
|
color_counts.insert("green".to_string(), 0);
|
||||||
|
color_counts.insert("blue".to_string(), 0);
|
||||||
|
|
||||||
|
let subsets = parts[1].split("; ");
|
||||||
|
for subset in subsets {
|
||||||
|
let colors = subset.split(", ");
|
||||||
|
for color in colors {
|
||||||
|
let color_parts: Vec<&str> = color.split_whitespace().collect();
|
||||||
|
let count = color_parts[0].parse::<i32>().unwrap();
|
||||||
|
let color_name = color_parts[1];
|
||||||
|
let max_count = color_counts.get(color_name).unwrap_or(&0).max(&count);
|
||||||
|
color_counts.insert(color_name.to_string(), *max_count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
(game_id, color_counts)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn calculate_power_of_set(game_data: &HashMap<String, i32>) -> i32 {
|
||||||
|
game_data.get("red").unwrap_or(&0) * game_data.get("green").unwrap_or(&0) * game_data.get("blue").unwrap_or(&0)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn process_games(file_path: &Path) -> i32 {
|
||||||
|
let file = File::open(file_path).unwrap();
|
||||||
|
let reader = io::BufReader::new(file);
|
||||||
|
|
||||||
|
let mut sum_of_powers = 0;
|
||||||
|
for line in reader.lines() {
|
||||||
|
let line = line.unwrap();
|
||||||
|
let (_, game_data) = parse_game_data(&line);
|
||||||
|
let power = calculate_power_of_set(&game_data);
|
||||||
|
sum_of_powers += power;
|
||||||
|
}
|
||||||
|
|
||||||
|
sum_of_powers
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
// Test the function with test data
|
||||||
|
let test_result = process_games(Path::new("../test.txt"));
|
||||||
|
assert_eq!(test_result, 2286, "Test failed: expected sum of powers to be 2286, but got {}", test_result);
|
||||||
|
println!("Test Passed: Sum of powers for the minimum cube sets is {}\n", test_result);
|
||||||
|
|
||||||
|
// Process the actual input file
|
||||||
|
let result = process_games(Path::new("../input.txt"));
|
||||||
|
println!("From input.txt: Sum of powers for the minimum cube sets is {}", result);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user