Compare commits

...

2 Commits

Author SHA1 Message Date
9d5739e088 Add points option to timer. Do iterations over solution to get averages 2025-12-01 16:01:41 -05:00
14607dbad6 Add d1p1 faf 2025-12-01 04:18:53 -05:00
2 changed files with 47 additions and 32 deletions

View File

@@ -3,10 +3,13 @@
#include <chrono> #include <chrono>
#include <iostream> #include <iostream>
#include <string>
#include <map>
#include <unordered_map>
class Timer { class Timer {
public: public:
Timer() { explicit Timer(const int iter = 1) : iterations(iter) {
running = true; running = true;
start = std::chrono::high_resolution_clock::now(); start = std::chrono::high_resolution_clock::now();
} }
@@ -16,18 +19,26 @@ public:
running = false; running = false;
}; };
void add_point(const std::string &name) {
points[name] = std::chrono::high_resolution_clock::now();
}
void print () { void print () {
if (running) { stop(); }; if (running) { stop(); };
const auto seconds = std::chrono::duration_cast<std::chrono::seconds>(end - start);
const auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(end - start); std::cout << "\n# Execution time # \n";
const auto us = std::chrono::duration_cast<std::chrono::microseconds>(end - start); for (const auto &[name, time] : points) {
std::cout << "\n# Execution time # \n\t" << seconds.count() << " s\n\t" << ms.count() << " ms\n\t" << us.count() << " us" << std::endl; std::cout << "\t" << name << ": " << std::chrono::duration_cast<std::chrono::milliseconds>(time - start).count() << " ms | " << std::chrono::duration_cast<std::chrono::microseconds>(time - start).count() << " us" << std::endl;
}
std::cout << "Global: " << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() / iterations << " ms | " << std::chrono::duration_cast<std::chrono::microseconds>(end-start).count() / iterations << " us" << std::endl;
} }
private: private:
bool running = false; bool running = false;
std::chrono::time_point<std::chrono::system_clock> start; std::chrono::time_point<std::chrono::system_clock> start;
std::chrono::time_point<std::chrono::system_clock> end; std::chrono::time_point<std::chrono::system_clock> end;
std::unordered_map<std::string, std::chrono::time_point<std::chrono::system_clock>> points;
int iterations;
}; };
#endif //ADVENTOFCODE2025_TIMER_H #endif //ADVENTOFCODE2025_TIMER_H

View File

@@ -66,17 +66,19 @@
#include "timer.h" #include "timer.h"
int main() { int main() {
Timer timer; constexpr int iterations = 1000;
Timer timer(iterations);
int password = 0;
for (int i = 0; i < iterations; ++i) {
std::ifstream stream("input/day1/p1.txt", std::ios::binary | std::ios::ate); std::ifstream stream("input/day1/p1.txt", std::ios::binary | std::ios::ate);
const auto size = stream.tellg(); const auto size = stream.tellg();
stream.seekg(0); stream.seekg(0);
std::vector<char> buffer(size); std::vector<char> buffer(size);
stream.read(buffer.data(), size); stream.read(buffer.data(), size);
stream.close();
int state = 50; int state = 50;
int password = 0;
const char* ptr = buffer.data(); const char* ptr = buffer.data();
const char* end = ptr + size; const char* end = ptr + size;
@@ -89,21 +91,23 @@ int main() {
auto [next, ec] = std::from_chars(ptr, end, number); auto [next, ec] = std::from_chars(ptr, end, number);
ptr = next; ptr = next;
while (ptr < end && (*ptr == '\n' || *ptr == '\r')) { if (ptr < end && *ptr == '\r') ++ptr;
++ptr; if (ptr < end && *ptr == '\n') ++ptr;
}
if (is_right) { if (is_right) {
state = (state + number) % 100; state = (state + number) % 100;
} else { } else {
state = (state - number % 100 + 100) % 100; state = (state + 100 - number % 100) % 100;
} }
password += (state == 0); password += (state == 0);
} }
stream.close();
}
timer.stop(); timer.stop();
std::cout << "Password: " << password << std::endl; std::cout << "Password: " << password / iterations << std::endl;
timer.print(); timer.print();