5 ms·
I gave this question to a friend and she came up with what I think is a beautiful answer. Remember min and max X and Y coordinates seen so far, and count the nu
by alisey 12y ago
I gave this question to a friend and she came up with what I think is a beautiful answer. Remember min and max X and Y coordinates seen so far, and count the number of steps. When this number gets larger than (maxX - minX)*(maxY - minY) we know we're in a cycle.
It's an extension of your idea of counting the total number of visited positions. What I like most about it is that it can work with streamed data.
- Udik 12y agoI think it's the best answer so far!
- zaroth 12y agoPerfection! A beautiful hack around not knowing the size of the board, and even faster detecting cycles to boot.
- defen 12y agoThat's a really cool solution. One potential problem is that it doesn't find the loop as soon as possible (e.g. if it's going around the perimeter of a square, the cycle is detectable after 4N steps, but the algorithm will take N^2 steps to realize that)
- jongraehl 12y agoThat's nice (and can be easily fixed to handle negative coordinates), but extremely slow (imagine a simple square cycle with side length N. Her solution takes N^2 steps.