diff --git a/day9/second.cpp b/day9/second.cpp index 29fc582..a2b9fe1 100644 --- a/day9/second.cpp +++ b/day9/second.cpp @@ -48,34 +48,41 @@ int main() { } } } - printDiskMap(diskmap); + printDiskMap(diskmap); + { - int Dot; + int dotFound; auto offset = diskmap.begin(); int block_count; while (std::find(diskmap.begin(), diskmap.end(), -1) != diskmap.end()) { - while (true) {Dot = - std::find(diskmap.begin(), diskmap.end(), -1) - diskmap.begin(); - if(diskmap.back() == -1) { - diskmap.pop_back(); - continue; - } - block_count = - std::find(diskmap.begin(), diskmap.end(), -1) - diskmap.begin();count(diskmap.end(),diskmap.begin(),diskmap.back()); + // Removes empty blocks at the end + if (diskmap.back() == -1) { + diskmap.pop_back(); + continue; + } - while (true) { - Dot = - std::find(offset, diskmap.end(), -1) - diskmap.begin(); - if(std::count(diskmap.begin() + Dot,diskmap.end(), -1) == block_count) {} + // counts how many blocks are in file + block_count = std::count(diskmap.end(), diskmap.begin(), diskmap.back()); + + while (true) { + dotFound = std::find(offset, diskmap.end(), -1) - diskmap.begin(); + + if (std::count(diskmap.begin() + dotFound, + diskmap.begin() + dotFound + block_count, + -1) == block_count) { + + std::fill(diskmap.begin() + dotFound, + diskmap.begin() + dotFound + block_count, diskmap.back()); + for (int i = 0; i < block_count; i++) { + diskmap.pop_back(); + } + break; + } else { + offset = diskmap.begin() + dotFound + block_count; } } - Dot = - std::find(diskmap.begin(), diskmap.end(), -1) - diskmap.begin(); - std::cout << "first dot: " << Dot << std::endl; - - diskmap[Dot] = diskmap.back(); - diskmap.pop_back(); + printDiskMap(diskmap); } }