jeu_kibur.py

Created by schraf

Created on October 24, 2022

569 Bytes

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)")