Mice Thrice

Twice before on Overlord-in-terms-of-Core-Issues-around-Maximal-Engagement-with-Key-Notions-of-the-Über-Feral, I’ve interrogated issues around pursuit curves. Imagine four mice or four beetles each sitting on one corner of a square and looking towards the centre of the square. If each mouse or beetle begins to run towards the mouse or beetle to its left, it will follow a curving path that takes it to the centre of the square, like this:

vertices = 4, pursuit = +1


The paths followed by the mice or beetles are pursuit curves. If you arrange eight mice clockwise around a square, with a mouse on each corner and a mouse midway along each side, you get a different set of pursuit curves:

v = 4 + 1 on the side, p = +1


Here each mouse is pursuing the mouse two places to its left:

v = 4+s1, p = +2


And here each mouse is pursuing the mouse three places to its left:

v = 4+s1, p = +3


Now try a different arrangement of the mice. In the square below, the mice are arranged clockwise in rows from the bottom right-hand corner. That is, mouse #1 begins on the bottom left-hand corner, mouse #2 begins between that corner and the centre, mouse #3 begins on the bottom left-hand corner, and so on. When each mice runs towards the mouse three places away, these pursuit curves appear:

v = 4 + 1 internally, p = +3


Here are some more:

v = 4 + i1, p = +5


v = 4 + i2, p = +1


v = 4 + i2, p = +2


So far, all the mice have eventually run to the centre of the square, but that doesn’t happen here:

v = 4 + i2, p = 4


Here are more pursuit curves for the v4+i2 mice, using an animated gif:

v = 4 + i2, p = various (animated &msdash; open in new tab for clearer image)


And here are more pursuit curves that don’t end in the centre of the square:

v = 4 + i4, p = 4


v = 4 + i4, p = 8


v = 4 + i4, p = 12


v = 4 + i4, p = 16


But the v4+i4 pursuit curves more usually look like this:

v = 4 + i4, p = 7


Now try adapting the rules so that mice don’t run directly towards another mouse, but towards the point midway between two other mice. In this square, the odd- and even-numbered mice follow different rules. Mice #1, #3, #5 and #7 run towards the point midway between the mice one and two places away, while ice #2, #4, #6 and #8 run towards the point midway between the mice two and seven places away:

v = 4 + s1, p(1,3,5,7) = 1,2, p(2,4,6,8) = 2,7


I think the curves are very elegant. Here’s a slight variation:

v = 4 + s1, p1 = 1,3, p2 = 2,7


Now try solid curves:

v = 4 + s1, p1 = 1,3, p2 = 2,7 (red)


v = 4 + s1, p1 = 1,3, p2 = 2,7 (yellow-and-blue)


And some variants:

v = 4 + s1, p1 = 1,7, p2 = 1,2


v = 4 + s1, p1 = 2,3, p2 = 2,5


v = 4 + s1, p1 = 5,6, p2 = 1,3


v = 4 + s1, p1 = 5,6, p2 = 1,4


v = 4 + s1, p1 = 5,6, p2 = 1,6


Elsewhere other-posted:

Polymorphous Pursuit
Persecution Complex

Advertisements

Horn Again

Pre-previously on Overlord-in-terms-of-Core-Issues-around-Maximal-Engagement-with-Key-Notions-of-the-Über-Feral, I interrogated issues around this shape, the horned triangle:

unicorn_reptile_static

Horned Triangle (more details)


Now I want to look at the tricorn (from Latin tri-, “three”, + -corn, “horn”). It’s like a horned triangle, but has three horns instead of one:

Tricorn, or three-horned triangle


These are the stages that make up the tricorn:

Tricorn (stages)


Tricorn (animated)


And there’s no need to stop at triangles. Here is a four-horned square, or quadricorn:

Quadricorn


Quadricorn (animated)


Quadricorn (coloured)


And a five-horned pentagon, or quinticorn:

Quinticorn, or five-horned pentagon


Quinticorn (anim)


Quinticorn (col)


And below are some variants on the shapes above. First, the reversed tricorn:

Reversed Tricorn


Reversed Tricorn (anim)


Reversed Tricorn (col)


The nested tricorn:

Nested Tricorn (anim)


Nested Tricorn (col)


Nested Tricorn (red-green)


Nested Tricorn (variant col)


The nested quadricorn:

Nested Quadricorn (anim)


Nested Quadricorn


Nested Quadricorn (col #1)


Nested Quadricorn (col #2)


Finally (and ferally), the pentagonal octopus or pentapus:

Pentapus (anim)


Pentapus


Pentapus #2


Pentapus #3


Pentapus #4


Pentapus #5


Pentapus #6


Pentapus (col anim)


Elsewhere other-engageable:

The Art Grows Onda — the horned triangle and Katsushika Hokusai’s painting The Great Wave off Kanagawa (c. 1830)

Fink Frakt

Pre-previously on Overlord-In-Terms-of-Issues-Around-Engagement-with-the-Über-Feral, I’ve looked at various ways of creating fractals by restricting the moves of a point jumping towards the vertices of a polygon. For example, the point can be banned from jumping towards the same vertex twice in a row. This time, I want to look at fractals created not by restriction, but by compulsion. If the point jumps towards vertex v and then tries to jump towards vertex v again, it will be forced to jump towards vertex v+1 instead, and so on.

You could call vv+1 a forced increment or finc. So these are finc fractals. In some cases, restriction and compulsion create the same fractals, but I’ve found some new fractals using compulsion. Consider the fractal created by the rule v[-2]+1, v[-1] → +0,+1, where the subscripts refer to the history of jumps: v[-2] is the jump-before-last, v[-1] is the last jump. If the new vertex, v[0], chosen is the same as v[-2]+1 (e.g., v[0] = 2 = v[-2]+1 = 1+1), then the forced increment is 0, i.e., the point is allowed to choose that jump. However, if v[0] = v[-1], then the forced increment is 1 and the point must jump towards v[-1]+1.

Here is the fractal in question:

v[-2]+1, v[-1] → +0,+1 (black-and-white)


v[-2]+1, v[-1] → +0,+1 (colour)


1,0 → +0,+1 (animated)


1,0 → +1,+0 (bw)


1,0 → +1,+0 (col)


1,0 → +1,+0 (anim)


1,0 → +1,+1 (bw)


1,0 → +1,+1 (col)


1,0 → +1,+1 (animated)


0,1 → +2,+1 (anim)


0,1 → +3,+1


1,0 → +0,+1


1,0 → +1,+0


1,1 → +0,+1


1,1 → +1,+2


1,1 → +1,+3


1,1 → +2,+1


1,2 → +0,+3


1,3 → +0,+1


2,2 → +0,+1


But suppose the history of jumps records not actual jumps, but the jumps the point wanted to make instead. In some cases, the jump made will be the same as the jump originally chosen, but in other cases it won’t. Here are some fractals using this method:

0 → +2


0 → +3


2 → +1


2 → +2


Leave and Let Dice

Imagine a game with six players, numbered #1 to #6, and one six-sided die. Someone rolls the die and the player who matches the number wins the game. That is, if the die rolls 1, player #1 wins; if the die rolls 2, player #2 wins; and so on. With a fair die, this is a fair game, because each player has exactly a 1/6 chance of winning. You could call it a simultaneous game, because all players are playing at once. It has one rule:

• If the die rolls n, then player #n wins.

Now try a different game with six players and one die. Player #1 rolls the die. If he gets 1, he wins the game. If not, then he leaves the game and player #2 rolls the die. If he gets 2, he wins the game. If not, then he leaves the game and player #3 rolls the die. And so on. You could call this a sequential game, because the players are playing in sequence. It has two rules:

• If player #n rolls n on the die, then he wins.
• If player #n doesn’t roll n, then player n+1 rolls the die.

Is it a fair game? No, definitely not. Player #1 has the best chance of winning. 1/6 or 16.6% of the time he rolls 1 and wins the game. 5/6 of the time, he rolls 2, 3, 4, 5 or 6 and passes the die to player #2. Now player #2 has a 1/6 chance of rolling a 2 and winning. But he has the opportunity to roll the die only 5/6 of the time, so his chance of winning the game is 1/6 * 5/6 = 5/36 = 13.8%. However, if player #2 rolls a 1, 3, 4, 5 or 6, then he loses and player #3 rolls the die. But player #3 has that opportunity only 5/6 * 5/6 = 25/36 of the time. So his chance of winning is 1/6 * 25/36 = 11.57%. And so on.

To put it another way, if the six players play 46656 = 6^6 games under the sequential rules, then on average:

• Player #1 wins 7776 games
• Player #2 wins 6480 games
• Player #3 wins 5400 games
• Player #4 wins 4500 games
• Player #5 wins 3750 games
• Player #6 wins 3125 games
• 15625 games end without a winner.

In other words, player #1 is 20% more likely to win than player #2, 44% more likely than player #3, 72.8% more likely than player #4, 107% more likely than player #5, and 148.8% more likely than player #6. Furthermore, player #2 is 20% more likely to win than player #3, 44% more likely than player #4, 72.8% more likely than player #5, and so on.

But there is a simple way to make the sequential game perfectly fair, so long as it’s played with a fair die. At least, I’ve thought of a simple way, but there might be more than one.




To make the sequential game fair, you add an extra rule:

1. If player #n rolls n on the die, he wins the game.
2. If player #n rolls a number greater than n, he loses and the die passes to player n+1.
3. If player #n rolls a number less than n, then he rolls again.

Let’s run through a possible game to see that it’s fair. Player #1 rolls first. He has a 1/6 chance of rolling a 1 and winning the game. However, 5/6 of the time he loses and passes the die to player #2. If player #2 rolls a 1, he rolls again. In other words, player #2 is effectively playing with a five-sided die, because all rolls of 1 are ignored. Therefore, he has a 1/5 chance of winning the game at that stage.

But hold on: a 1/5 chance of winning is better than a 1/6 chance, which is what player #1 had. So how is the game fair? Well, note the qualifying phrase at the end of the previous paragraph: at that stage. The game doesn’t always reach that stage, because if player #1 rolls a 1, the game is over. Player #2 rolls only if player doesn’t roll 1, which is 5/6 of the time. Therefore player #2’s chance of winning is really 1/5 * 5/6 = 5/30 = 1/6.

However, 4/5 of the time player #2 rolls a 3, 4, 5 or 6 and the die passes to player #3. If player #3 rolls a 1 or 2, he rolls again. In other words, player #3 is effectively playing with a four-sided die, because all rolls of 1 and 2 are ignored. Therefore, he has a 1/4 chance of winning the game at that stage.

A 1/4 chance of winning is better than a 1/5 chance and a 1/6 chance, but the same reasoning applies as before. Player #3 rolls the die only 5/6 * 4/5 = 20/30 = 2/3 of the time, so his chance of winning is really 1/4 * 2/3 = 2/12 = 1/6.

However, 3/4 of the time player #2 rolls a 4, 5 or 6 and the die passes to player #4. If player #4 rolls a 1, 2 or 3, he rolls again. In other words, player #4 is effectively playing with a three-sided die, because all rolls of 1, 2 and 3 are ignored. Therefore, he has a 1/3 chance of winning the game at that stage. 1/3 > 1/4 > 1/5 > 1/6, but the same reasoning applies as before. Player #4 rolls the die only 5/6 * 4/5 * 3/4 = 60/120 = 1/2 of the time, so his chance of winning is really 1/3 * 1/2 = 1/6.

And so on. If the die reaches player #5 and he gets a 1, 2, 3 or 4, then he rolls again. He is effectively rolling with a two-sided die, so his chance of winning is 1/2 * 5/6 * 4/5 * 3/4 * 2/3 = 120/720 = 1/6. If player #5 rolls a 6, he loses and the die passes to player #6. But there’s no need for player #6 to roll the die, because he’s bound to win. He rolls again if he gets a 1, 2, 3, 4 or 5, so eventually he must get a 6 and win the game. If player #5 loses, then player #6 automatically wins.

It’s obvious that this form of the game will get slower as more players drop out, because later players will be rolling again more often. To speed the game up, you can refine the rules like this:

1. If Player #1 rolls a 1, he wins the game. Otherwise…
2. If player #2 rolls a 2, he wins the game. If he rolls a 1, he rolls again. Otherwise…
3. Player #3 rolls twice and adds his scores. If the total is 3, 4 or 5, he wins the game. Otherwise…
4. Player #4 rolls once. If he gets 1 or 2, he wins the game. Otherwise…
5. Player #5 rolls once. If he gets 1, 2 or 3, he wins the game. Otherwise…
6. Player #6 wins the game.

Only player #2 might have to roll more than twice. Player #3 has to roll twice because he needs a way to get a 1/4 chance of winning. If you roll two dice, there are:

• Two ways of getting a total of 3: roll #1 is 1 and roll #2 is 2, or vice versa.
• Three ways of getting a total of 4 = 1+3, 3+1, 2+2.
• Four ways of getting 5 = 1+4, 4+1, 2+3, 3+2.

This means player #3 has 2 + 3 + 4 = 9 ways of winning. But there are thirty-six ways of rolling one die twice. Therefore player #3 has a 9/36 = 1/4 chance of winning. Here are the thirty-six ways of rolling one die twice, with asterisks marking the winning totals for player #3:

01. (1,1)
02. (1,2)*
03. (2,1)*
04. (1,3)*
05. (3,1)*
06. (1,4)*
07. (4,1)*
08. (1,5)
09. (5,1)
10. (1,6)
11. (6,1)
12. (2,2)*
13. (2,3)*
14. (3,2)*
15. (2,4)
16. (4,2)
17. (2,5)
18. (5,2)
19. (2,6)
20. (6,2)
21. (3,3)
22. (3,4)
23. (4,3)
24. (3,5)
25. (5,3)
26. (3,6)
27. (6,3)
28. (4,4)
29. (4,5)
30. (5,4)
31. (4,6)
32. (6,4)
33. (5,5)
34. (5,6)
35. (6,5)
36. (6,6)

Fract-Hills

The Farey sequence is a fascinating sequence of fractions that divides the interval between 0/1 and 1/1 into smaller and smaller parts. To find the Farey fraction a[i] / b[i], you simply find the mediant of the Farey fractions on either side:

• a[i] / b[i] = (a[i-1] + a[i+1]) / (b[i-1] + b[i+1])

Then, if necessary, you reduce the numerator and denominator to their simplest possible terms. So the sequence starts like this:

• 0/1, 1/1

To create the next stage, find the mediant of the two fractions above: (0+1) / (1+1) = 1/2

• 0/1, 1/2, 1/1

For the next stage, there are two mediants to find: (0+1) / (1+2) = 1/3, (1+1) / (2+3) = 2/3

• 0/1, 1/3, 1/2, 2/3, 1/1

Note that 1/2 is the mediant of 1/3 and 2/3, that is, 1/2 = (1+2) / (3+3) = 3/6 = 1/2. The next stage is this:

• 0/1, 1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 1/1

Now 1/2 is the mediant of 2/5 and 3/5, that is, 1/2 = (2+3) / (5+5) = 5/10 = 1/2. Further stages go like this:

• 0/1, 1/5, 1/4, 2/7, 1/3, 3/8, 2/5, 3/7, 1/2, 4/7, 3/5, 5/8, 2/3, 5/7, 3/4, 4/5, 1/1

• 0/1, 1/6, 1/5, 2/9, 1/4, 3/11, 2/7, 3/10, 1/3, 4/11, 3/8, 5/13, 2/5, 5/12, 3/7, 4/9, 1/2, 5/9, 4/7, 7/12, 3/5, 8/13, 5/8, 7/11, 2/3, 7/10, 5/7, 8/11, 3/4, 7/9, 4/5, 5/6, 1/1

• 0/1, 1/7, 1/6, 2/11, 1/5, 3/14, 2/9, 3/13, 1/4, 4/15, 3/11, 5/18, 2/7, 5/17, 3/10, 4/13, 1/3, 5/14, 4/11, 7/19, 3/8, 8/21, 5/13, 7/18, 2/5, 7/17, 5/12, 8/19, 3/7, 7/16, 4/9, 5/11, 1/2, 6/11, 5/9, 9/16, 4/7, 11/19, 7/12, 10/17, 3/5, 11/18, 8/13, 13/21, 5/8, 12/19, 7/11, 9/14, 2/3, 9/13, 7/10, 12/17, 5/7, 13/18, 8/11, 11/15, 3/4, 10/13, 7/9, 11/14, 4/5, 9/11, 5/6, 6/7, 1/1

The Farey sequence is actually a fractal, as you can see more easily when it’s represented as an image:

Farey fractal stage #1, representing 0/1, 1/2, 1/1

Farey fractal stage #2, representing 0/1, 1/3, 1/2, 2/3, 1/1

Farey fractal stage #3, representing 0/1, 1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 1/1

Farey fractal stage #4, representing 0/1, 1/5, 1/4, 2/7, 1/3, 3/8, 2/5, 3/7, 1/2, 4/7, 3/5, 5/8, 2/3, 5/7, 3/4, 4/5, 1/1

Farey fractal stage #5

Farey fractal stage #6

Farey fractal stage #7

Farey fractal stage #8

Farey fractal stage #9

Farey fractal stage #10

Farey fractal (animated)

That looks like the slope of a hill to me, so you could call it a Farey fract-hill. But Farey fract-hills or Farey fractals aren’t confined to the unit interval, 0/1 to 1/1. Here are Farey fractals for the intervals 0/1 to n/1, n = 1..10:

Farey fractal for interval 0/1 to 1/1

Farey fractal for interval 0/1 to 2/1, beginning 0/1, 1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 1/1, 5/4, 4/3, 7/5, 3/2, 8/5, 5/3, 7/4, 2/1

Farey fractal for interval 0/1 to 3/1, beginning 0/1, 1/3, 1/2, 2/3, 1/1, 5/4, 4/3, 7/5, 3/2, 8/5, 5/3, 7/4, 2/1, 7/3, 5/2, 8/3, 3/1

Farey fractal for interval 0/1 to 4/1, beginning
0/1, 1/3, 1/2, 2/3, 1/1, 4/3, 3/2, 5/3, 2/1, 7/3, 5/2, 8/3, 3/1, 10/3, 7/2, 11/3, 4/1

Farey fractal for interval 0/1 to 5/1, beginning 0/1, 1/1, 5/4, 10/7, 5/3, 7/4, 2/1, 7/3, 5/2, 8/3, 3/1, 13/4, 10/3, 25/7, 15/4, 4/1, 5/1

Farey fractal for interval 0/1 to 6/1, beginning 0/1, 1/2, 1/1, 4/3, 3/2, 5/3, 2/1, 5/2, 3/1, 7/2, 4/1, 13/3, 9/2, 14/3, 5/1, 11/2, 6/1

Farey fractal for interval 0/1 to 7/1, beginning 0/1, 7/5, 7/4, 2/1, 7/3, 21/8, 14/5, 3/1, 7/2, 4/1, 21/5, 35/8, 14/3, 5/1, 21/4, 28/5, 7/1

Farey fractal for interval 0/1 to 8/1, beginning 0/1, 1/2, 1/1, 3/2, 2/1, 5/2, 3/1, 7/2, 4/1, 9/2, 5/1, 11/2, 6/1, 13/2, 7/1, 15/2, 8/1

Farey fractal for interval 0/1 to 9/1, beginning 0/1, 1/1, 3/2, 2/1, 3/1, 7/2, 4/1, 13/3, 9/2, 14/3, 5/1, 11/2, 6/1, 7/1, 15/2, 8/1, 9/1

Farey fractal for interval 0/1 to 10/1, beginning 0/1, 5/4, 5/3, 2/1, 5/2, 3/1, 10/3, 15/4, 5/1, 25/4, 20/3, 7/1, 15/2, 8/1, 25/3, 35/4, 10/1

The shape of the slope is determined by the factorization of n:

n = 12 = 2^2 * 3

n = 16 = 2^4

n = 18 = 2 * 3^2

n = 20 = 2^2 * 5

n = 25 = 5^2

n = 27 = 3^3

n = 32 = 2^5

n = 33 = 3 * 11

n = 42 = 2 * 3 * 7

n = 64 = 2^6

n = 65 = 5 * 13

n = 70 = 2 * 5 * 7

n = 77 = 7 * 11

n = 81 = 3^4

n = 96 = 2^5 * 3

n = 99 = 3^2 * 11

n = 100 = 2^2 * 5^2

Farey fractal-hills, n = various

Jumping Jehosophracts!

As I’ve shown pre-previously on Overlord-in-terms-of-issues-around-the-Über-Feral, you can create interesting fractals by placing restrictions on a point jumping inside a fractal towards a randomly chosen vertex. For example, the point can be banned from jumping towards the same vertex twice in a row, and so on.

But you can use other restrictions. For example, suppose that the point can jump only once or twice towards any vertex, that is, (j = 1,2). It can then jump towards the same vertex again, but not the same number of times as it previously jumped. So if it jumps once, it has to jump twice next time; and vice versa. If you use this rule on a pentagon, this fractal appears:

v = 5, j = 1,2 (black-and-white)


v = 5, j = 1,2 (colour)


If the point can also jump towards the centre of the pentagon, this fractal appears:

v = 5, j = 1,2 (with centre)


And if the point can also jump towards the midpoints of the sides:

v = 5, j = 1,2 (with midpoints)


v = 5, j = 1,2 (with midpoints and centre)


And here the point can jump 1, 2 or 3 times, but not once in a row, twice in a row or thrice in a row:

v = 5, j = 1,2,3


v = 5, j = 1,2,3 (with centre)


Here the point remembers its previous two moves, rather than just its previous move:

v = 5, j = 1,2,3, hist = 2 (black-and-white)


v = 5, j = 1,2,3, hist = 2


v = 5, j = 1,2,3, hist = 2 (with center)


v = 5, j = 1,2,3, hist = 2 (with midpoints)


v = 5, j = 1,2,3, hist = 2 (with midpoints and centre)


And here are hexagons using the same rules:

v = 6, j = 1,2 (black-and-white)


v = 6, j = 1,2


v = 6, j = 1,2 (with centre)


And octagons:

v = 8, j = 1,2


v = 8, j = 1,2 (with centre)


v = 8, j = 1,2,3, hist = 2


v = 8, j = 1,2,3, hist = 2


v = 8, j = 1,2,3,4 hist = 3


v = 8, j = 1,2,3,4 hist = 3 (with center)


The Hex Fractor

Pre-previously on Overlord-in-terms-of-issues-around-the-Über-Feral, I looked at the fractals created when various restrictions are placed on a point jumping at random half-way towards the vertices of a square. For example, the point can be banned from jumping towards the same vertex twice in a row or towards the vertex to the left of the vertex it has just jumped towards, and so on.

Today I want to look at what happens to a similar point moving inside pentagons and hexagons. If the point can’t jump twice towards the same vertex of a pentagon, this is the fractal that appears:

Ban second jump towards same vertex (v + 0)


Ban second jump towards same vertex (color)


If the point can’t jump towards the vertex immediately to the left of the one it’s just jumped towards, this is the fractal that appears:

Ban jump towards v + 1


Ban jump towards v + 1 (color)


And this is the fractal when the ban is on the vertex two places to the left:

Ban jump towards v + 2


Ban jump towards v + 2 (color)


You can also ban more than one vertex:

Ban jump towards v + 0,1


Ban jump towards v + 1,2


Ban jump towards v + 1,4


Ban jump towards v + 1,4 (color)


Ban jump towards v + 2,3


And here are fractals created in similar ways inside hexagons:

Ban jump towards v + 0,1


Ban jump towards v + 0,3


Ban jump towards v + 0,1,2


Ban jump towards v + 0,1,2 (color)


Ban jump towards v + 0,1,4


Ban jump towards v + 0,1,5


Ban jump towards v + 0,2,4


Ban jump towards v + 0,2,4 (color)


Ban jump towards v + 1,2,3


Ban jump towards v + 1,2,3 (color)


Ban jump towards v + 1,2,4


Ban jump towards v + 1,2,4, (color)


Ban jump towards v + 1,3,5


Ban jump towards v + 1,3,5 (color)


Ban jump towards v + 1,2


Ban jump towards v + 1,2


Ban jump towards v + 1,3


Ban jump towards v + 1,3 (color)


Ban jump towards v + 1,5


Ban jump towards v + 1,5 (color)


Ban jump towards v + 2,3


Ban jump towards v + 2,3 (color)


Ban jump towards v + 2,4


Ban jump towards v + 2,4 (color)


Elsewhere other-accessible:

Square Routes Re-Verticed

Square Routes Re-Verticed

Start with a point in the middle of a square. Allow it to make a series of, say, eight jumps towards the vertices of the square, but with one restriction: it can’t jump towards the same vertex twice in a row. When the point has made the eight jumps, mark its position. If you do this for every possible route, the result will look like this:

Ban jump towards same vertex


And here’s a different restriction: the point can’t jump towards the vertex immediately to the left of the vertex it has just jumped towards:

Ban jump towards v + 1


And here it can’t jump towards the vertex diagonally opposite the vertex it has just jumped towards:

Ban jump towards v + 2


Now allow the point to jump not just towards the vertices, but towards points midway between the vertices. And expand and reverse the restrictions: instead of not allowing a jump towards v + i1, v + i2…, only allow a jump towards v + i1, v + i2… Some interesting shapes appear:

Jump must be towards v, v + 1 or v + 2 (one point between vertices)


v, v + 1 or v + 6


v, v + 2 or v + 3


v, v + 2 or v + 4


v, v + 2 or v + 6


v, v + 3 or v + 4


v, v + 3 or v + 5


v, v + 2 or v + 7


v + 1, v + 4 or v + 7


v, v + 1 or v + 6 (two points between vertices)


v, v + 2 or v + 4


v, v + 2 or v + 6


v, v + 2 or v + 9


v, v + 3 or v + 6


v, v + 3 or v + 8


v, v + 4 or v + 8


v, v + 5 or v + 7


v , v + 6 or v + 11


v + 1, v + 5 or v + 6


v + 1, v + 2 or v + 10


v + 1, v + 6 or v + 10


v + 1, v + 6 or v + 11


v + 2, v + 6 or v + 10


Elsewhere other-posted:

Square Routes
Square Routes Revisited
Square Routes Re-Revisited
Square Routes Re-Re-Revisited

Mod’s Chosen

When you divide one integer by another, one of two things happens. Either the second number goes perfectly into the first or there’s a remainder:


15 / 5 = 3
18 / 5 = 3⅗

In the first case, there’s no remainder, that is, the remainder is 0. In the second case, there’s a remainder of 3. And all that gives you the basis for what’s called modular arithmetic. It returns the remainder when one number is divided by another:


15 mod 5 = 0
16 mod 5 = 1
17 mod 5 = 2
18 mod 5 = 3
19 mod 5 = 4
20 mod 5 = 0
21 mod 5 = 1
22 mod 5 = 2...

It looks simple but a lot of mathematics is built on it. I don’t know much of that maths, but I know one thing I like: the patterns you can get from modular arithmetic. Suppose you draw a square, then find a point and measure the distances from that point to all the vertices of the square. Then add the distances up, turn the result into an integer if necessary, and test whether the result is divisible by 2 or not. If it is divisible, colour the point in. If it isn’t, leave the point blank.

Then move on to another point and perform the same test. This is modular arithematic, because for each point you’re asking whether d mod 2 = 0. The result looks like this:

d mod 2 = 0


Here are more divisors:

d mod 3 = 0


d mod 4 = 0


d mod 5 = 0


d mod 6 = 0


d mod 7 = 0


d mod 8 = 0


d mod 9 = 0


d mod 10 = 0


d mod various = 0 (animated)


You can also use modular arithmetic to determine the colour of the points. For example, if d mod n = 0, the point is black; if d mod n = 1, the point is red; if d mod n = 2, the point is green; and so on.

d mod 3 = 0, 1, 2 (coloured)


d mod 4 = 0, 1, 2, 3 (coloured)


d mod 5 = 0, 1, 2, 3, 4 (coloured)



d mod 5 = 0, 1, 2, 3, 4 (animated and expanding)


Zequality Now

Here are the numbers one to eight in base 2:

1, 10, 11, 100, 101, 110, 111, 1000…

Now see what happens when you count the zeroes:


1, 10[1], 11, 10[2]0[3], 10[4]1, 110[5], 111, 10[6]0[7]0[8]...

In base 2, the numbers one to eight contain exactly eight zeroes, that is, zerocount(1..8,b=2) = 8. But it doesn’t work out so exactly in base 3:


1, 2, 10[1], 11, 12, 20[2], 21, 22, 10[3]0[4], 10[5]1, 10[6]2, 110[7], 111, 112, 120[8], 121, 122, 20[9]0[10], 20[11]1, 20[12]2, 210[13], 211, 212, 220[14], 221, 222, 10[15]0[16]0[17], 10[18]0[19]1, 10[20]0[21]2, 10[22]10[23], 10[24]11, 10[25]12, 10[26]20[27], 10[28]21, 10[29]22, 110[30]0[31], 110[32]1, 110[33]2, 1110[34], 1111, 1112, 1120[35], 1121, 1122, 120[36]0[37], 120[38]1, 120[39]2, 1210[40], 1211, 1212, 1220[41], 1221, 1222, 20[42]0[43]0[44], 20[45]0[46]1, 20[47]0[48]2, 20[49]10[50], 20[51]11, 20[52]12, 20[53]20[54], 20[55]21, 20[56]22, 210[57]0[58], 210[59]1, 210[60]2, 2110[61], 2111, 2112, 2120[62], 2121, 2122, 220[63]0[64], 220[65]1, 220[66]2, 2210[67], 2211, 2212, 2220[68], 2221, 2222, 10[69]0[70]0[71]0[72], 10[73]0[74]0[75]1, 10[76]0[77]0[78]2, 10[79]0[80]10[81], 10[82]0[83]11, 10[84]0[85]12, 10[86]0[87]20[88]...

In base 3, 10020 = 87 and zerocount(1..87,b=3) = 88. And what about base 4? zerocount(1..1068,b=4) = 1069 (n=100,230 in base 4). After that, zerocount(1..16022,b=5) = 16023 (n=1,003,043 in base 5) and zerocount(1..284704,b=6) = 284,705 (n=10,034,024 in base 6).

The numbers are getting bigger fast and it’s becoming increasingly impractible to count the zeroes individually. What you need is an algorithm that will take any given n and work out how many zeroes are required to write the numbers 1 to n. The simplest way to do this is to work out how many times 0 has appeared in each position of the number. The 1s position is easy: you simply divide the number by the base and discard the remainder. For example, in base 10, take the number 25. The 0 must have appeared in the 1s position twice, for 10 and 20, so zerocount(1..25) = 25 \ 10 = 2. In 2017, the 0 must have appeared in the 1s position 201 times = 2017 \ 10. And so on.

It gets a little trickier for the higher positions, the 10s, 100s, 1000s and so on, but the same basic principle applies. And so you can easily create an algorithm that takes a number, n, and produces zerocount(1..n) in a particular base. With this algorithm, you can quickly find zerocount(1..n) >= n in higher bases:


zerocount(1..1000,b=2) = 1,000 (n=8)*
zerocount(1..10020,b=3) = 10,021 (n=87)
zerocount(1..100230,b=4) = 100,231 (n=1,068)
zerocount(1..1003042,b=5) = 1,003,043 (n=16,022)
zerocount(1..10034024,b=6) = 10,034,025 (n=284,704)
zerocount(1..100405550,b=7) = 100,405,551 (n=5,834,024)
zerocount(1..1004500236,b=8) = 1,004,500,237 (n=135,430,302)
zerocount(1..10050705366,b=9) = 10,050,705,367 (n=3,511,116,537)
zerocount(1..100559404366,b=10) = 100,559,404,367
zerocount(1..1006083A68919,b=11) = 1,006,083,A68,919 (n=3,152,738,985,031)*
zerocount(1..10066AA1430568,b=12) = 10,066,AA1,430,569 (n=107,400,330,425,888)
zerocount(1..1007098A8719B81,b=13) = 100,709,8A8,719,B81 (n=3,950,024,143,546,664)*
zerocount(1..10077C39805D81C7,b=14) = 1,007,7C3,980,5D8,1C8 (n=155,996,847,068,247,395)
zerocount(1..10080B0034AA5D16D,b=15) = 10,080,B00,34A,A5D,171 (n=6,584,073,072,068,125,453)
zerocount(1..10088DBE29597A6C77,b=16) = 100,88D,BE2,959,7A6,C77 (n=295,764,262,988,176,583,799)*
zerocount(1..10090C5309AG72CBB3F,b=17) = 1,009,0C5,309,AG7,2CB,B3G (n=14,088,968,131,538,370,019,982)
zerocount(1..10099F39070FC73C1G73,b=18) = 10,099,F39,070,FC7,3C1,G75 (n=709,394,716,006,812,244,474,473)
zerocount(1..100A0DC1258614CA334EB,b=19) = 100,A0D,C12,586,14C,A33,4EC (n=37,644,984,315,968,494,382,106,708)
zerocount(1..100AAGDEEB536IBHE87006,b=20) = 1,00A,AGD,EEB,536,IBH,E87,008 (n=2,099,915,447,874,594,268,014,136,006)

And you can also easily find the zequal numbers, that is, the numbers n for which, in some base, zerocount(1..n) exactly equals n:


zerocount(1..1000,b=2) = 1,000 (n=8)
zerocount(1..1006083A68919,b=11) = 1,006,083,A68,919 (n=3,152,738,985,031)
zerocount(1..1007098A8719B81,b=13) = 100,709,8A8,719,B81 (n=3,950,024,143,546,664)
zerocount(1..10088DBE29597A6C77,b=16) = 100,88D,BE2,959,7A6,C77 (n=295,764,262,988,176,583,799)
zerocount(1..100CCJFFAD4MI409MI0798CJB3,b=24) = 10,0CC,JFF,AD4,MI4,09M,I07,98C,JB3 (n=32,038,681,563,209,056,709,427,351,442,469,835)
zerocount(1..100DDL38CIO4P9K0AJ7HK74EMI7L,b=26) = 1,00D,DL3,8CI,O4P,9K0,AJ7,HK7,4EM,I7L (n=160,182,333,966,853,031,081,693,091,544,779,177,187)
zerocount(1..100EEMHG6OE8EQKO0BF17LCCIA7GPE,b=28) = 100,EEM,HG6,OE8,EQK,O0B,F17,LCC,IA7,GPE (n=928,688,890,453,756,699,447,122,559,347,771,300,777,482)
zerocount(1..100F0K7MQO6K9R1S616IEEL2JRI73PF,b=29) = 1,00F,0K7,MQO,6K9,R1S,616,IEE,L2J,RI7,3PF (n=74,508,769,042,363,852,559,476,397,161,338,769,391,145,562)
zerocount(1..100G0LIL0OQLF2O0KIFTK1Q4DC24HL7BR,b=31) = 100,G0L,IL0,OQL,F2O,0KI,FTK,1Q4,DC2,4HL,7BR (n=529,428,987,529,739,460,369,842,168,744,635,422,842,585,510,266)
zerocount(1..100H0MUTQU3A0I5005WL2PD7T1ASW7IV7NE,b=33) = 10,0H0,MUT,QU3,A0I,500,5WL,2PD,7T1,ASW,7IV,7NE (n=4,262,649,311,868,962,034,947,877,223,846,561,239,424,294,726,563,632)
zerocount(1..100HHR387RQHK9OP6EDBJEUDAK35N7MN96LB,b=34) = 100,HHR,387,RQH,K9O,P6E,DBJ,EUD,AK3,5N7,MN9,6LB (n=399,903,937,958,473,433,782,862,763,628,747,974,628,490,691,628,136,485)
zerocount(1..100IISLI0CYX2893G9E8T4I7JHKTV41U0BKRHT,b=36) = 10,0II,SLI,0CY,X28,93G,9E8,T4I,7JH,KTV,41U,0BK,RHT (n=3,831,465,379,323,568,772,890,827,210,355,149,992,132,716,389,119,437,755,185)
zerocount(1..100LLX383BPWE[40]ZL0G1M[40]1OX[39]67KOPUD5C[40]RGQ5S6W9[36],b=42) = 10,0LL,X38,3BP,WE[40],ZL0,G1M,[40]1O,X[39]6,7KO,PUD,5C[40],RGQ,5S6,W9[36] (n=6,307,330,799,917,244,669,565,360,008,241,590,852,337,124,982,231,464,556,869,653,913,711,854)
zerocount(1..100MMYPJ[38]14KDV[37]OG[39]4[42]X75BE[39][39]4[43]CK[39]K36H[41]M[37][43]5HIWNJ,b=44) = 1,00M,MYP,J[38]1,4KD,V[37]O,G[39]4,[42]X7,5BE,[39][39]4,[43]CK,[39]K3,6H[41],M[37][43],5HI,WNJ (n=90,257,901,046,284,988,692,468,444,260,851,559,856,553,889,199,511,017,124,021,440,877,333,751,943)
zerocount(1..100NN[36]3813[38][37]16F6MWV[41]UBNF5FQ48N0JRN[40]E76ZOHUNX2[42]3[43],b=46) = 100,NN[36],381,3[38][37],16F,6MW,V[41]U,BNF,5FQ,48N,0JR,N[40]E,76Z,OHU,NX2,[42]3[43] (n=1,411,636,908,622,223,745,851,790,772,948,051,467,006,489,552,352,013,745,000,752,115,904,961,213,172,605)
zerocount(1..100O0WBZO9PU6O29TM8Y0QE3I[37][39]A7E4YN[44][42]70[44]I[46]Z[45][37]Q2WYI6,b=47) = 1,00O,0WB,ZO9,PU6,O29,TM8,Y0Q,E3I,[37][39]A,7E4,YN[44],[42]70,[44]I[46],Z[45][37],Q2W,YI6 (n=182,304,598,281,321,725,937,412,348,242,305,189,665,300,088,639,063,301,010,710,450,793,661,266,208,306,996)
zerocount(1..100PP[39]37[49]NIYMN[43]YFE[44]TDTJ00EAEIP0BIDFAK[46][36]V6V[45]M[42]1M[46]SSZ[40],b=50) = 1,00P,P[39]3,7[49]N,IYM,N[43]Y,FE[44],TDT,J00,EAE,IP0,BID,FAK,[46][36]V,6V[45],M[42]1,M[46]S,SZ[40] (n=444,179,859,561,011,965,929,496,863,186,893,220,413,478,345,535,397,637,990,204,496,296,663,272,376,585,291,071,790)
zerocount(1..100Q0Y[46][44]K[49]CKG[45]A[47]Z[43]SPZKGVRN[37]2[41]ZPP[36]I[49][37]EZ[38]C[44]E[46]00CG[38][40][48]ROV,b=51) = 10,0Q0,Y[46][44],K[49]C,KG[45],A[47]Z,[43]SP,ZKG,VRN,[37]2[41],ZPP,[36]I[49],[37]EZ,[38]C[44],E[46]0,0CG,[38][40][48],ROV (n=62,191,970,278,446,971,531,566,522,791,454,395,351,613,891,150,548,291,266,262,575,754,206,359,828,753,062,692,619,547)
zerocount(1..100QQ[40]TL[39]ZA[49][41]J[41]7Q[46]4[41]66A1E6QHHTM9[44]8Z892FRUL6V[46]1[38][41]C[40][45]KB[39],b=52) = 100,QQ[40],TL[39],ZA[49],41]J[41],7Q[46],4[41]6,6A1,E6Q,HHT,M9[44],8Z8,92F,RUL,6V[46],1[38][41],C[40][45],KB[39] (n=8,876,854,501,927,007,077,802,489,292,131,402,136,556,544,697,945,824,257,389,527,114,587,644,068,732,794,430,403,381,731)
zerocount(1..100S0[37]V[53]Y6G[51]5J[42][38]X[40]XO[38]NSZ[42]XUD[47]1XVKS[52]R[39]JAHH[49][39][50][54]5PBU[42]H3[45][46]DEJ,b=55) = 100,S0[37],V[53]Y,6G[51],5J[42],[38]X[40],XO[38],NSZ,[42]XU,D[47]1,XVK,S[52]R,[39]JA,HH[49],[39][50][54],5PB,U[42]H,3[45][46],DEJ (n=28,865,808,580,366,629,824,612,818,017,012,809,163,332,327,132,687,722,294,521,718,120,736,868,268,650,080,765,802,786,141,387,114)