Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

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.



That'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)


That'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.


Perfection! A beautiful hack around not knowing the size of the board, and even faster detecting cycles to boot.


I think it's the best answer so far!




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: