diff options
Diffstat (limited to 'src/2015/day14/aoc.h')
-rw-r--r-- | src/2015/day14/aoc.h | 49 |
1 files changed, 46 insertions, 3 deletions
diff --git a/src/2015/day14/aoc.h b/src/2015/day14/aoc.h index 1d00d73..63b584c 100644 --- a/src/2015/day14/aoc.h +++ b/src/2015/day14/aoc.h @@ -1,5 +1,6 @@ #pragma once #include "common.h" +#include <stack> #include <vector> namespace aoc2015 { @@ -18,6 +19,7 @@ struct reindeer { struct olympics { std::vector<reindeer> reindeers; + std::vector<int> points; int get_number(const char* p) { int d{0}; @@ -42,7 +44,7 @@ struct olympics { std::pair<line_view, int> d{{}, INT32_MIN}; for (auto& r : reindeers) { auto x = kilometers(r, s); - std::cout << r.name << ": " << x << std::endl; + // std::cout << r.name << ": " << x << std::endl; if (x > d.second) { d = {r.name, x}; } @@ -50,6 +52,46 @@ struct olympics { return d; } + void score(int s) { + std::vector<int> ps(reindeers.size()); + for (size_t i = 0; i < reindeers.size(); i++) { + ps[i] = kilometers(reindeers[i], s); + } + std::stack<int> x; + x.push(0); + for (size_t i = 1; i < ps.size(); i++) { + if (ps[i] > ps[x.top()]) { + while (!x.empty()) { + x.pop(); + } + x.push(i); + } + if (ps[i] == ps[x.top()]) { + x.push(i); + } + } + while (!x.empty()) { + points[x.top()] += 1; + x.pop(); + } + } + + std::pair<line_view, int> best_points(int s) { + for (int i = 1; i <= s; i++) { + score(i); + } + for (size_t i = 0; i < reindeers.size(); i++) { + std::cout << reindeers[i].name << ": " << points[i] << std::endl; + } + int x = 0; + for (size_t i = 1; i < points.size(); i++) { + if (points[i] > points[x]) { + x = i; + } + } + return {reindeers[x].name, points[x]}; + } + void parse(line_view lv) { const char* p1 = lv.contains("can"); const char* p2 = lv.contains("for"); @@ -62,8 +104,9 @@ struct olympics { r.rest_seconds = get_number(p3 + 4); // std::cout << r << std::endl; reindeers.push_back(r); + points.push_back(0); } -}; +}; // namespace aoc2015 -int day14(line_view, int); +std::pair<int, int> day14(line_view, int); } // namespace aoc2015 |