Day 6 brute force

main
Benjamin Kraft 9 months ago
parent bfa9abdc5c
commit ecb5fc9f06
  1. 41
      src/days/06/Day06.cpp
  2. 4
      src/days/06/Day06.h
  3. 23
      src/util.cpp
  4. 2
      src/util.h

@ -1,9 +1,46 @@
#include "Day06.h"
Result Day06::Task1() {
return Day::Task1();
uint64 product = 1;
for (auto &[time, distance] : parseRecords()){
uint64 wins = 0;
for (uint64 holdTime = 1; holdTime < time; holdTime++)
if ((time - holdTime) * holdTime > distance) wins++;
product *= wins;
}
return to_string(product);
}
Result Day06::Task2() {
return Day::Task2();
auto [time, distance] = parseRecord();
uint64 wins = 0;
for (uint64 holdTime = 1; holdTime < time; holdTime++)
if ((time - holdTime) * holdTime > distance) wins++;
return to_string(wins);
}
vector<Day06::Record> Day06::parseRecords() const {
vector<Record> records;
vector<uint64> time = parseInts(input[0].substr(5));
vector<uint64> distance = parseInts(input[1].substr(10));
for (size_t i = 0; i < time.size(); i++)
records.emplace_back(time[i], distance[i]);
return records;
}
Day06::Record Day06::parseRecord() const {
string rawTime = input[0].substr(10);
std::erase(rawTime, ' ');
string rawDistance = input[1].substr(10);
std::erase(rawDistance, ' ');
uint64 time = std::stoul(rawTime);
uint64 distance = std::stoul(rawDistance);
return {time, distance};
}

@ -3,8 +3,12 @@
#include "../../Day.h"
class Day06 : public Day {
typedef pair<uint64, uint64> Record;
protected:
Result Task1() override;
Result Task2() override;
vector<Record> parseRecords() const;
Record parseRecord() const;
};

@ -45,3 +45,26 @@ bool isDigit(char c) {
auto val = c - '0';
return val >= 0 && val < 10;
}
vector<uint64> parseInts(const string &data) {
vector<uint64> result;
uint64 value = 0;
bool readingInt = false;
for (const char c : data){
uint8_t digit;
if (isDigit(c, digit)) {
value = value * 10 + digit;
readingInt = true;
} else if (readingInt){
readingInt = false;
result.push_back(value);
value = 0;
}
}
if (readingInt)
result.push_back(value);
return result;
}

@ -29,3 +29,5 @@ vector<string> split(const string &data, char c);
bool isDigit(char c, uint8_t &result);
bool isDigit(char c);
vector<uint64> parseInts(const string &data);
Loading…
Cancel
Save