A problem and a simple set of instructions to solve it. A good starting point for a game but also for coding.

One of the two players is **blindfolded** and must pin a paper tail in the right place. He can do only few actions: go **up**, **down**, **left** or **right** and finally **pin** the tail.

The other player can see the drawing and must help giving **instructions**.

### Let’s compare with computers

A computer is **dumb** and can do a limited set of actions. You may think your computer or smartphone is very powerful but the core is still a poor *dumb* processor moving bits and making sums.

The only way to make a computer work is giving it instructions. So programmers must use the set of available actions and combine them in different ways thus making more complex actions.

### Playing the game

When kids play the game, they freely move the tail in front of the drawing and unknowingly add some extra *commands*, like **stop** or **go on**.

These extra commands are actually a way to communicate to the blindfolded kid that an action must be **repated until** a certain **condition** is reached.

So we know the concept of **loop**. Let’s make an example, but to make it undestandable we have to use a grid made of squares. It will also make it compatible with computers later.

A | B | C | D | E | F | G | H | |
---|---|---|---|---|---|---|---|---|

1 | T | |||||||

2 | ||||||||

3 | D | |||||||

4 | ||||||||

5 |

At the beginning Tail (T) is in position **(A,1)** while the Donkey’s back (D) is in position **(F,3)**.

The commands for the blindfolded player will be: **right**, **right**, **right**, **right**, **right**, **down**, **down**.

But we can also **generalize** these commands, we just have to think about what happens in the mind of the observer:

1
2
3
4
5
6
7
8
9
10
11
12

if D is on the right of T:
while D is on the right:
move T to the right
else if D is on the left of T:
while D is on the left:
move T to the left
if D is below T:
while D is below:
move T down
else if D is above T:
while D is above:
move T up

As you can see this is not a solution to a single problem, but it is a **generic approach** that can be used **for any position of T and D**.

If you think about it, we can rewrite the same instructions in much less lines, but optimization deserves a whole chapter on its own.