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

View File

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