diff --git a/2022/day6.cpp b/2022/day6.cpp new file mode 100644 index 0000000..8861e0d --- /dev/null +++ b/2022/day6.cpp @@ -0,0 +1,55 @@ +#include +#include +#include +#include + +bool substring_unique_copyless(std::vector *s, size_t right, size_t length) { + for (size_t i = (right-length); i *s, size_t num, size_t skip) { + for (size_t right = skip; rightsize(); right++) { + if (substring_unique_copyless(s, right, num)) { + return right; + } + } + return 0; +} + +void run_once(std::vector *s) { + size_t four = find_first_unique_run(s, 4, 4); + size_t fourteen = find_first_unique_run(s, 14, four); + std::cout << "Part 1: " << four << '\n'; + std::cout << "Part 2: " << fourteen << '\n'; +} + +void run_many(std::vector *s, size_t iterations) { + size_t four = 0; + size_t fourteen = 0; + for (size_t i = 0; i(input_file.tellg()); + std::vector input = std::vector(eof_position); + input_file.seekg(0, std::ios::beg); + input_file.read(reinterpret_cast(input.data()), eof_position); + + // run_once(&input); + run_many(&input, 1000000); +} diff --git a/2022/day6.rs b/2022/day6.rs new file mode 100644 index 0000000..2c069eb --- /dev/null +++ b/2022/day6.rs @@ -0,0 +1,50 @@ +#![allow(dead_code)] +use std::fs; + +type Int = usize; + +fn substring_unique_copyless(s: &Vec, right: Int, length: Int) -> bool { + for i in (right-length)..right { + let c = s[i]; + for j in (i+1)..right { + if s[j] == c { + return false; + } + } + } + return true; +} + +fn find_first_unique_run(s: &Vec, num: Int, skip: Int) -> Int { + for right in num.max(skip)..s.len() { + if substring_unique_copyless(s, right, num) { + return right; + } + } + return 0; +} + +fn run_once(s: &Vec) { + let four = find_first_unique_run(&s, 4, 0); + let fourteen = find_first_unique_run(&s, 14, four); + println!("Part 1: {}", four); + println!("Part 2: {}", fourteen); +} + +fn run_many(s: &Vec, iterations: usize) { + let mut four = 0; + let mut fourteen = 0; + for _ in 0..iterations { + four = find_first_unique_run(&s, 4, 0); + fourteen = find_first_unique_run(&s, 14, four); + } + println!("Part 1: {}", four); + println!("Part 2: {}", fourteen); + println!("Completed {} iterations", iterations); +} + +fn main() { + let input: Vec = fs::read("input/6").expect("Input not found!"); + // run_once(&input); + run_many(&input, 1_000_000); +}