#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Nombre de Kaprekar : 495.

À partir d'un entier N de 3 chiffres non nuls pas tous égaux, on génère par 
permutation des chiffres le plus grand (PG) et le plus petit (PP) entier et 
on calcule le nouvel entier N = PG − PP.
On itère le processus jusqu'à obtenir 495.
Exemple : 
    755 => 198 => 792 => 693 => 594 => 495
Pour le calcul des permutations d'une chaîne, utilisez la fonction standard 
'permutations' du module itertools.

@author: bob
"""

# Import ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
import random
import itertools

# Définition de fonction ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def entier3():
    """Retourne un entier de 3 chiffres pas tous égaux."""
    
    TOUS_EGAUX = (111, 222, 333, 444, 555, 666, 777, 888, 999)
    random.seed()
    n = random.randrange(100, 1000)
    while n in TOUS_EGAUX:
        n = random.randrange(100, 1000)
    return n
    
    
def ch2nb3(ch, d2g=True):
    """Retourne un entier de 3 chiffres à partir d'une liste de ses items."""

    if d2g:  # génère PP en lisant ch de gauche à droite
        return int(ch[0])*100 + int(ch[1])*10 + int(ch[2])
    else:    # génère PG en lisant ch de droite à gauche
        return int(ch[0]) + int(ch[1])*10 + int(ch[2])*100
    
# Programme principal ==========================================================
GRAAL = 495
    
## On génère un entier au hasard
nb3 = entier3()
print(nb3, end=' ')
    
## On applique l'algorithme
nbCoup = 0
while nb3 != GRAAL:
    nbCoup += 1
    PP = 1000
    for i in itertools.permutations(f"{str(nb3):0>3}", 3):
        n_i = ch2nb3(i)
        if n_i < PP:
            PP = n_i
            PPi = i
    PG = ch2nb3(PPi, False)
    nb3 = PG - PP
    print("=>", nb3, end=' ')
    
print(" : GRAAL en 1 coup !") if nbCoup == 1 else print(f" : GRAAL en {nbCoup} coups")
