From 6a5b143c0fd0a90979d9315b50be2387facb752f Mon Sep 17 00:00:00 2001 From: Justin Wernick Date: Tue, 19 Apr 2022 20:27:05 +0200 Subject: Refile for merging repos --- 2020/src/bin/day_1.rs | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 2020/src/bin/day_1.rs (limited to '2020/src/bin/day_1.rs') diff --git a/2020/src/bin/day_1.rs b/2020/src/bin/day_1.rs new file mode 100644 index 0000000..68a570c --- /dev/null +++ b/2020/src/bin/day_1.rs @@ -0,0 +1,83 @@ +use bevy::prelude::*; +use std::fs::File; +use std::io::{BufRead, BufReader}; + +fn main() { + App::build() + .add_resource(WindowDescriptor { + title: "Advent of Code".to_string(), + width: 1920, + height: 1080, + ..Default::default() + }) + .add_resource(ClearColor(Color::rgb(0., 0., 0.))) + .add_startup_system(setup_camera.system()) + .add_startup_system(read_input_file.system()) + .add_stage("mark") + .add_system_to_stage("mark", mark_sum_pair.system()) + .add_system_to_stage("mark", mark_sum_triple.system()) + .add_stage("report") + .add_system_to_stage("report", print_product_pair.system()) + .add_system_to_stage("report", print_product_triple.system()) + //.add_plugins(DefaultPlugins) + .run(); +} + +fn setup_camera(mut commands: Commands) { + commands.spawn(Camera2dComponents::default()); +} + +struct Expense(i32); +struct FlaggedPair; +struct FlaggedTriple; + +fn read_input_file(mut commands: Commands) { + let f = File::open("./inputs/day_1.txt").unwrap(); // TODO: Error handling on systems? + for line in BufReader::new(f).lines() { + let expense = line.unwrap().trim().parse().unwrap(); + commands.spawn((Expense(expense),)); + } +} + +fn mark_sum_pair(mut commands: Commands, expenses: Query<(Entity, &Expense)>) { + for (entity_1, expense_1) in expenses.iter() { + for (entity_2, expense_2) in expenses.iter() { + if expense_1.0 + expense_2.0 == 2020 { + commands.insert_one(entity_1, FlaggedPair); + commands.insert_one(entity_2, FlaggedPair); + } + } + } +} + +fn mark_sum_triple(mut commands: Commands, expenses: Query<(Entity, &Expense)>) { + for (entity_1, expense_1) in expenses.iter() { + for (entity_2, expense_2) in expenses.iter() { + for (entity_3, expense_3) in expenses.iter() { + if expense_1.0 + expense_2.0 + expense_3.0 == 2020 { + commands.insert_one(entity_1, FlaggedTriple); + commands.insert_one(entity_2, FlaggedTriple); + commands.insert_one(entity_3, FlaggedTriple); + } + } + } + } +} + +fn print_product_pair(flagged_expenses: Query>) { + let mut product = 1; + for expense in flagged_expenses.iter() { + product *= expense.0; + } + // TODO: Put it on the screen! + println!("Product Pair: {}", product); +} + +fn print_product_triple(flagged_expenses: Query>) { + let mut product = 1; + for expense in flagged_expenses.iter() { + product *= expense.0; + } + // TODO: Put it on the screen! + println!("Product Triple: {}", product); +} -- cgit v1.2.3