From 6f85994e16cf5064e8013c076a9cbf7ce8de1081 Mon Sep 17 00:00:00 2001 From: Ben Kyd Date: Tue, 2 Dec 2025 17:16:47 +0000 Subject: [PATCH] 2025 day 2 part 2 --- 2025/Makefile | 2 +- 2025/aoc | Bin 201424 -> 80320 bytes 2025/aoc.cpp | 6 ++--- 2025/aoc.hpp | 4 +-- 2025/day1.hpp | 4 +-- 2025/day2.hpp | 69 +++++++++++++++++++++++--------------------------- 6 files changed, 39 insertions(+), 46 deletions(-) diff --git a/2025/Makefile b/2025/Makefile index 0de7060..6854251 100644 --- a/2025/Makefile +++ b/2025/Makefile @@ -1,5 +1,5 @@ CXX := clang++ -CXXFLAGS := -std=c++17 -Wall -Wextra -I. +CXXFLAGS := -std=c++17 -Wall -Wextra -I. -O3 TARGET := aoc SRC := aoc.cpp diff --git a/2025/aoc b/2025/aoc index 90177514912e2f85d3bfec6ba6569c1cdac407fa..d83ea8e5d040f7fd7f7268deba833ef2a20ac612 100755 GIT binary patch literal 80320 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 literal 201424 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 + uint64_t partOne = day->PartOne(file); int partTwo = day->PartTwo(file1); std::cout << "Part 1: " << partOne << "\n"; @@ -100,12 +100,12 @@ int main(int argc, char** argv) auto start = std::chrono::high_resolution_clock::now(); - int partOne = day->PartOne(file); + uint64_t partOne = day->PartOne(file); auto endpart1 = std::chrono::high_resolution_clock::now(); auto startpart2 = std::chrono::high_resolution_clock::now(); - int partTwo = day->PartTwo(file1); + uint64_t partTwo = day->PartTwo(file1); auto end = std::chrono::high_resolution_clock::now(); diff --git a/2025/aoc.hpp b/2025/aoc.hpp index 7c339eb..a8be3f8 100644 --- a/2025/aoc.hpp +++ b/2025/aoc.hpp @@ -179,8 +179,8 @@ class AOCDay // return 1 -> 1.txt virtual int Day() = 0; - virtual int PartOne(File&) = 0; - virtual int PartTwo(File&) = 0; + virtual uint64_t PartOne(File&) = 0; + virtual uint64_t PartTwo(File&) = 0; }; inline std::unordered_map& GetRegisteredDays(int day = 0) diff --git a/2025/day1.hpp b/2025/day1.hpp index f426b2b..05bfc50 100644 --- a/2025/day1.hpp +++ b/2025/day1.hpp @@ -17,7 +17,7 @@ public: if (dial < 0) dial += 100; } - int PartOne(File& f) override + uint64_t PartOne(File& f) override { f.SplitByIndex(1); @@ -41,7 +41,7 @@ public: return res; } - int PartTwo(File& f) override + uint64_t PartTwo(File& f) override { f.SplitByIndex(1); diff --git a/2025/day2.hpp b/2025/day2.hpp index bfd0e00..5e8004a 100644 --- a/2025/day2.hpp +++ b/2025/day2.hpp @@ -10,7 +10,7 @@ public: ~Day02() {} int Day() override {return 2;} - int PartOne(File& f) override + uint64_t PartOne(File& f) override { f.SplitBy(","); @@ -43,16 +43,16 @@ public: } } - std::cout << "The answer doesn't fit in int : "<< res << std::endl; return res; } - int PartTwo(File& f) override + uint64_t PartTwo(File& f) override { f.SplitBy(","); uint64_t res = 0; + // For every range like "11-22" in line 0 for (auto range : f.TokensForLine(0)) { int dash = range.Data.find('-', 0); @@ -60,56 +60,49 @@ public: uint64_t a = std::stoll(range.Data.substr(0, dash)); uint64_t b = std::stoll(range.Data.substr(dash + 1)); - for (uint64_t i = a; i <= b; i++) + // Loop every ID in the range + for (uint64_t id = a; id <= b; ++id) { - std::string current = std::to_string(i); - int n = current.length(); + std::string s = std::to_string(id); + int digits = s.length(); bool invalid = false; - // Try every possible substring start (i) - for (int start = 0; start < n && !invalid; start++) + for (int L = 1; L <= digits / 2 && !invalid; ++L) { - std::string accum; + // MUST divide evenly, otherwise blocks won't align + if (digits % L != 0) + continue; - // Build accum char-by-char - for (int end = start; end < n && !invalid; end++) + uint64_t base = 1; + for (int i = 0; i < L; i++) + base *= 10; // base = 10^L + + uint64_t block = id % base; + uint64_t tail = id; + int count = 0; + + while (tail > 0) { - accum.push_back(current[end]); - - int len = accum.length(); - int remaining = n - start; - - // Now check if repeats match - bool matches = true; - - for (int rep = 0; rep < remaining / len; rep++) - { - if (current.compare(start + rep * len, len, accum) != 0) - { - matches = false; - break; - } - } - - // Must be at least two repeats - if (matches && remaining / len >= 2) - { - invalid = true; + if (tail % base != block) break; - } + + tail /= base; + count++; } + + if (tail == 0 && count >= 2) + invalid = true; } - if (invalid) - res += i; + if (invalid) + res += id; + } } - } - - std::cout << "The answer doesn't fit in int : "<< res << std::endl; return res; } + }; ADD_AOC_DAY(Day02);