Le jeu Kibur (Rubik à l’envers) est apparu page 42 de la revue “L’ordinateur de poche” n°3 en 1981.
La règle est la suivante : (Explications et corrigé en vidéo ici)
- La machine vous affiche les chiffres de 0 à 9 de façon mélangée, par exemple 7328459061
- Vous devez remettre les chiffres dans l’ordre 0123456789
sachant que lorsque vous choisissez un chiffre entre 0 et 9, celui-ci est inversé avec le chiffre qui est en première position et les 2 chiffres à côté sont permutés également. Voici quelques exemples pour clarifier :
0748695312#8
# Le 8 à droite du "#" signifie que l'on veut inverser ce chiffre avec celui complètement à gauche, on obtient dans un premier temps :
8760495312
# C'est-à-dire que le 0 et le 8 ont été inversés
# Dans un second temps on inverse également les 2 chiffres qui étaient à la position du 8 au départ (ici le 4 à gauche et le 6 à droite). On obtient alors :
8740695312
Voici 2 autres exemples :
0748695312#7
donne 4078695312
# en effet, on inverse le 7 et le chiffre de gauche (ici 0)
7048695312
# et les 2 chiffres qui étaient à côté de de la position du 7 au départ
4078695312
7328459061#1
donne 6328459017
# en effet on inverse le 1 et le 7
1328459067
# et également les 2 chiffres qui sont à la position initiale du 1 (le 6 à gauche et le 7 (on reprend le chiffre de l'autre extrémité)
Écrire une fonction jouer qui admet en paramètres la liste des chiffres et le chiffre à permuter et qui en sortie donne la nouvelle liste.
from random import * def melange(l, n): for i in range(randint(1,2*n)): l = jouer(l, randint(0,9)) return l def jouer(l, n): if not(0<= n <=9): print("Impossible") return l n = int(l.index(str(n))) l[0],l[n] = l[n], l[0] g = n-1 if n>0 else 9 d = n+1 if n<9 else 0 l[g],l[d] = l[d],l[g] return l def kibur(n=10): final = list("0123456789") l = melange(final.copy(), n) coups = 0 while l!=final: n=input("".join(l)+"#") coups+=1 l = jouer(l,int(n)) print("Bravo ! "+str(coups)+" coup(s)")