Well, let's remember that we're adding values greater than 1 in certain conditions, to hare and tortoise. For this reason, the tests 'tortoise != finish' and 'hare != finish' are inadequate, 'tortoise < finish' and 'hare < finish' would be much better choices here.
I think if you try rewriting your source code (with extra care taken with formatting), you will write it a bit more cleanly the second time around and fix a few bugs along the way.
Another good thing is to read carefully through your source code and think "why do I need this statement? could it be simplified? if I removed it, how would it affect the program? etc." These are the things that will help you get better at programming, it's not so much writing the source code that gets you better, but reading and rewriting.