Compare commits

..

No commits in common. "de3c5f9f08f703bc42905c4eff4ded8bbc1c5a37" and "095ddd091e26ca659bf8dde32da7541c7afa4589" have entirely different histories.

2 changed files with 25 additions and 30 deletions

View File

@ -153,13 +153,10 @@ Once again consider your left and right lists. What is their similarity score?
void day01::Part2() void day01::Part2()
{ {
std::vector<int> col1; std::vector<int> col1;
std::vector<int> col2;
std::unordered_map<int, int> occurrence_map; std::unordered_map<int, int> occurrence_map;
int sum = 0; int sum = 0;
size_t estimated_size = 1000;
col1.reserve(estimated_size);
occurrence_map.reserve(estimated_size);
std::ifstream input("input/day01.txt"); std::ifstream input("input/day01.txt");
//std::ifstream input("input/day01short.txt"); //std::ifstream input("input/day01short.txt");
@ -171,17 +168,31 @@ void day01::Part2()
return; return;
} }
std::string delimiter = " ";
auto delimiterLength = delimiter.length();
std::string line; std::string line;
int num1, num2; while (std::getline(input, line))
while (input >> num1 >> num2)
{ {
col1.emplace_back(num1); auto delimiterPos = line.find(delimiter);
occurrence_map[num2]++; col1.emplace_back(std::stoi(line.substr(0, delimiterPos)));
col2.emplace_back(std::stoi(line.substr(delimiterPos + delimiterLength, line.length())));
}
for (auto number: col2)
{
if (occurrence_map.contains(number))
{
occurrence_map[number]++;
} else
{
occurrence_map[number] = 1;
}
} }
for (auto number: col1) for (auto number: col1)
{ {
sum += number * occurrence_map[number]; sum += number * occurrence_map[number];
} }
//printf("Sum of all occurrence pairs is: %d\n", sum); printf("Sum of all occurrence pairs is: %d\n", sum);
} }

View File

@ -5,25 +5,9 @@
int main() int main()
{ {
double lowest = 10000; const auto startTime = std::chrono::high_resolution_clock::now();
double totalTime = 0; day01::Part2();
constexpr int cycles = 10000; const auto endTime = std::chrono::high_resolution_clock::now();
for (int i = 1; i <= cycles; i++) const std::chrono::duration<double> diff = endTime - startTime;
{ std::cout << "Execution time: " << diff.count() * 1e6 << " μs" << std::endl;
const auto startTime = std::chrono::high_resolution_clock::now();
day01::Part2();
const auto endTime = std::chrono::high_resolution_clock::now();
const std::chrono::duration<double> diff = endTime - startTime;
totalTime += diff.count();
if (diff.count() < lowest)
{
lowest = diff.count();
}
}
const double average = totalTime / cycles;
std::cout << "Ran " << cycles << " cycles. "
<< "Execution time avg: " << average * 1e6 << " μs. Lowest: "
<< lowest
* 1e6 << " μs" << std::endl;
} }