It is enough to modify slightly the way we generate the next jump:
+ jP[tamePosi.x % n]*G if y > p/2, - jP[tamePosi.x % n]*G is y
(then I will indicate 'y' if y > p/2, '-y' if y < p/2)
in this way when a tame T reaches a point Q = (x,y) and a wild W reaches a point Q' = -Q = (x,-y), this become a collision
The tame and the wild will go on with 2 specular paths:
Q -> Q +
k*G -> Q + k*G
-r*G -> ... -> DP
(x,y) (x1,-y1) (x2,y2) (x0, y0)
-Q -> -Q
-k*G -> -Q - k*G
+r*G -> ... -> DP
(x,-y) (x1,y1) (x2, -y2) (x0, -y0)
until they reach 2 symetric DP, for both of which we know the private key.
May be a brownian motion can be interesting (having positive and negative jump).
I have created a sort of "brownian motion", my kangaroos keep jumping back and forth.
I'm not sure to fully understand your idea.
You want to add a condition on the y parity to determine the jump ?
You let the starting positions as they are or you translate them ?
The start interval must be: [-(b-a)/2, +(b-a)/2]
and yes, I want to add a condition on the y parity to determine the jump's direction.
In this way a wild and a tame collide if they reach:
1) the same point
2) two symetric points
In the interval [-(b-a)/2, +(b-a)/2], the x-coordinates of [1, +(b-a)/2] are equal to the x-coordinates of [-(b-a)/2, -1]; we should get more collisions, because we work in a space of 2^(n-1) points instead of 2^n.
We introduce a equivalence class [P], where P ~ Q if Q = -P and the jump function goes from [P] to [P1], i.e. it is defined between 2 equivalence classes instead of between 2 points.
A problem could be that many paths could enter in a loop before they reach a DP, because each kangaroo jumps back and forth and then a single kangaroo can collide with itself.