master
Benjamin Kraft 2 years ago
parent 20eec50236
commit bd8ceeda1a
  1. 38
      src/days/06/Day06.cpp
  2. 3
      src/days/06/Day06.h
  3. 3
      src/util.h

@ -1,9 +1,41 @@
#include "Day06.h"
Result Day06::Task1() {
return Day::Task1();
return to_string(findMarker(4));
}
Result Day06::Task2() {
return Day::Task2();
}
return to_string(findMarker(14));
}
int Day06::findDuplicate(string value, char* dOut, int mSize) {
map<char, int> charPos;
for (int i = 0; i < mSize; i++){
char c = value[i];
if (charPos.contains(c)){
*dOut = c;
return charPos[c];
}
charPos.insert({c, i});
}
return -1;
}
int Day06::findMarker(int markerSize) const{
string signal = input[0];
int pos = 0;
do{
string marker = signal.substr(pos, markerSize);
char d;
int dPos = findDuplicate(marker, &d, markerSize);
if (dPos == -1)
return pos + markerSize;
pos += dPos + 1;
}
while (pos < signal.size() - markerSize + 1);
return -1;
}

@ -7,4 +7,7 @@ protected:
Result Task1() override;
Result Task2() override;
static int findDuplicate(string, char*, int);
int findMarker(int markerSize) const;
};

@ -6,7 +6,8 @@
#include <tuple>
#include <iostream>
#include <set>
#include <map>
using std::stoi, std::to_string;
using std::cout, std::endl;
using std::string, std::vector, std::set, std::pair;
using std::string, std::vector, std::set, std::pair, std::map;
Loading…
Cancel
Save