Question: https://codility.com/demo/take-sample-test/frog_jmp

Question Name: FrogJmp

This is a very easy question. If with C, one statement is enought.

1 2 3 4 5 6 | def solution(X, Y, D): distance = Y - X if distance % D == 0: return distance/D else: return distance/D + 1 |

return (Y – X)/D + ((Y – X) % D == 0 ? 0:1)

The same idea. And infeasible in Python. Anyway, thanks for your sharing.

‘my solution in vb.net….

Thanks for sharing!

But it seems, your solution cannot pass the test.

Solution in C#

Please don’t take it personally, I just try to think loud…

This is a perfect example where codility gives 100/100 points for a code, that runs perfectly, but has readability issues. Inappropriate usage of var is pretty subjective, I know. It’s really useful in many cases, but this is a typical situation where it has a negative effect on readability.

Although I am not sure, how could such readability aspects be automatically checked.

I am not a C# expert. And I do not know the negative effect of var.

However, I hope this community be open-minded. Any technique discussion without personal attacks is welcome!

Solution in JavaScript

in PHP:

Thank you all for sharing!

Quick solution for Pascal (100%)

These solutions are nice, but modulo is expensive. pseudo: diff := x-y, steps := diff/d, if steps*d < diff: steps++. The multiplication is cheaper than a second division.

Sure, there is some space in the original solution to improve. And your suggestion is very awesome!

PS: as long as the solution passed the test, the readability comes first, for the blog post.

Why not:

Because it needs more computational resource. And it is not noticeably easier to understand.

Your code is missing a line for no jump.

If distance is 0, distance % D is 0, and the function will return 0 / D = 0.

PHP

Cool! Thanks!

return (int)Math.Ceiling((Y – X) / (decimal)D);

P.S. I just saw someone posted this solution in PHP. But still… here it is in C# ðŸ™‚

No problem at all. Any solution or discussion about the algorithm is welcome!

Even simpler: (Y – X + D – 1)/D

Very good. It’s a well-known trick to integer-divide positive num by positive divisor and round up: (num+(divisor-1))/divisor. This trick was around the time when processors were slow and compilers were dumb…

Elegant!

return (Y – X + D – 1)/D;

My Java solution (100%)