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

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our cookies policy.