delete accidental submodule

This commit is contained in:
2023-12-14 10:46:45 -05:00
parent 5a87bfb681
commit 51c64d827b
37 changed files with 1637 additions and 1 deletions

7
old/day08/Cargo.lock generated Normal file
View File

@@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "day08"
version = "0.1.0"

8
old/day08/Cargo.toml Normal file
View File

@@ -0,0 +1,8 @@
[package]
name = "day08"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

122
old/day08/src/main.rs Normal file
View File

@@ -0,0 +1,122 @@
use std::{fs, collections::{HashMap, VecDeque}};
fn main() {
let input = fs::read_to_string("input.txt").unwrap();
let input: Vec<_> = input.split("\n\n").collect();
let (directions, nodes) = (input[0], input[1]);
let directions: Vec<_> = directions.chars().map(|char| {
match char {
'L' => Direction::Left,
'R' => Direction::Right,
_ => panic!("Invalid direction!")
}
}).collect();
let nodes: HashMap<&str, (&str, &str)> = nodes.split('\n')
.map(|line| {
let line = line.split('=').map(|x| x.trim()).collect::<Vec<_>>();
let children: Vec<_> = line[1].trim_matches(|c| c == '(' || c == ')').split(", ").collect();
(line[0], (children[0], children[1]))
}).collect();
let starts: Vec<_> = nodes.keys().filter(|x| x.ends_with('A')).collect();
let dists: Vec<_> = starts.iter().map(|start| dist(&start, &directions, &nodes)).collect();
let gcf = gcf(&dists);
let step_count = gcf * dists.iter().map(|value| value / gcf).product::<i64>();
println!("{:?}", step_count);
}
fn gcf(values: &Vec<i64>) -> i64 {
let mut gcf = values[0];
for val in values {
gcf = find_gcf(gcf, *val);
if gcf == 1 {
return 1;
}
}
gcf
}
fn find_gcf(a: i64, b: i64) -> i64 {
if a == 0 {
return b;
}
find_gcf(b % a, a)
}
fn dist(cur_node: &str, directions: &Vec<Direction>, nodes: &HashMap<&str, (&str, &str)>) -> i64 {
let mut cur_node = cur_node;
let mut step_queue: VecDeque<Direction> = VecDeque::from(directions.clone());
let mut step_count = 0;
while !cur_node.ends_with('Z') {
step_count += 1;
let cur_step = step_queue.pop_front().unwrap();
match cur_step {
Direction::Left => cur_node = nodes[cur_node].0,
Direction::Right => cur_node = nodes[cur_node].1,
}
step_queue.push_back(cur_step);
}
return step_count;
}
#[derive(Clone)]
#[derive(Debug)]
enum Direction {
Left,
Right
}
// use std::{fs, collections::{HashMap, VecDeque}};
// fn main() {
// let input = fs::read_to_string("input.txt").unwrap();
// let input: Vec<_> = input.split("\n\n").collect();
// let (directions, nodes) = (input[0], input[1]);
// let directions: Vec<_> = directions.chars().map(|char| {
// match char {
// 'L' => Direction::Left,
// 'R' => Direction::Right,
// _ => panic!("Invalid direction!")
// }
// }).collect();
// let nodes: HashMap<&str, (&str, &str)> = nodes.split('\n')
// .map(|line| {
// let line = line.split('=').map(|x| x.trim()).collect::<Vec<_>>();
// let children: Vec<_> = line[1].trim_matches(|c| c == '(' || c == ')').split(", ").collect();
// (line[0], (children[0], children[1]))
// }).collect();
// let mut cur_node = "AAA";
// let mut step_queue = VecDeque::from(directions);
// let mut step_count = 0;
// while cur_node != "ZZZ" {
// step_count += 1;
// let cur_step = step_queue.pop_front().unwrap();
// match cur_step {
// Direction::Left => cur_node = nodes[cur_node].0,
// Direction::Right => cur_node = nodes[cur_node].1,
// }
// step_queue.push_back(cur_step);
// }
// println!("{:?}", step_count);
// }
// #[derive(Debug)]
// enum Direction {
// Left,
// Right
// }