Benjamin Kraft 9 months ago
parent 85712eff12
commit f8ce3f1ade
  1. 4
      src/days/06/Day06.cpp
  2. 31
      src/util.cpp
  3. 3
      src/util.h

@ -28,8 +28,8 @@ Result Day06::Task2() {
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));
vector<uint64> time = parseUInts(input[0].substr(5));
vector<uint64> distance = parseUInts(input[1].substr(10));
for (size_t i = 0; i < time.size(); i++)
records.emplace_back(time[i], distance[i]);

@ -46,7 +46,7 @@ bool isDigit(char c) {
return val >= 0 && val < 10;
}
vector<uint64> parseInts(const string &data) {
vector<uint64> parseUInts(const string &data) {
vector<uint64> result;
uint64 value = 0;
@ -66,5 +66,34 @@ vector<uint64> parseInts(const string &data) {
if (readingInt)
result.push_back(value);
return result;
}
vector<int64> parseInts(const string &data) {
vector<int64> result;
int64 value = 0;
bool readingInt = false;
bool negative = false;
for (const char c : data){
uint8_t digit;
if (isDigit(c, digit)) {
value = value * 10 + digit;
readingInt = true;
} else if (!readingInt && c == '-') {
negative = true;
} else if (readingInt){
readingInt = false;
result.push_back(value * (negative ? -1 : 1));
value = 0;
negative = false;
} else {
negative = false;
}
}
if (readingInt)
result.push_back(value);
return result;
}

@ -30,4 +30,5 @@ bool isDigit(char c, uint8_t &result);
bool isDigit(char c);
vector<uint64> parseInts(const string &data);
vector<uint64> parseUInts(const string &data);
vector<int64> parseInts(const string &data);
Loading…
Cancel
Save