Compare commits
2 Commits
888120bcef
...
9d5739e088
| Author | SHA1 | Date | |
|---|---|---|---|
| 9d5739e088 | |||
| 14607dbad6 |
@@ -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
|
||||
@@ -66,17 +66,19 @@
|
||||
#include "timer.h"
|
||||
|
||||
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);
|
||||
const auto size = stream.tellg();
|
||||
stream.seekg(0);
|
||||
std::vector<char> buffer(size);
|
||||
stream.read(buffer.data(), size);
|
||||
stream.close();
|
||||
|
||||
int state = 50;
|
||||
int password = 0;
|
||||
|
||||
|
||||
const char* ptr = buffer.data();
|
||||
const char* end = ptr + size;
|
||||
@@ -89,21 +91,23 @@ int main() {
|
||||
auto [next, ec] = std::from_chars(ptr, end, number);
|
||||
ptr = next;
|
||||
|
||||
while (ptr < end && (*ptr == '\n' || *ptr == '\r')) {
|
||||
++ptr;
|
||||
}
|
||||
if (ptr < end && *ptr == '\r') ++ptr;
|
||||
if (ptr < end && *ptr == '\n') ++ptr;
|
||||
|
||||
if (is_right) {
|
||||
state = (state + number) % 100;
|
||||
} else {
|
||||
state = (state - number % 100 + 100) % 100;
|
||||
state = (state + 100 - number % 100) % 100;
|
||||
}
|
||||
|
||||
password += (state == 0);
|
||||
}
|
||||
|
||||
stream.close();
|
||||
}
|
||||
timer.stop();
|
||||
|
||||
std::cout << "Password: " << password << std::endl;
|
||||
std::cout << "Password: " << password / iterations << std::endl;
|
||||
|
||||
timer.print();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user