#include "aoc.h" #include namespace aoc2017 { void next(int* step, int* gap, memory_bank& m, std::set& ms) { if (ms.find(m) == ms.end()) { ms.insert(m); *step += 1; int d{0}; int i = m.highest(&d); // printf("%d %d %d\n", *step, i, d); m.distribute(i, d); next(step, gap, m, ms); } auto it = ms.find(m); *gap = *step - it->index; } std::pair day6(line_view file) { std::set ms; memory_bank m{file}; int steps{0}; int gap{0}; next(&steps, &gap, m, ms); return {steps, gap}; } } // namespace aoc2017