
U                 @   s   d  d   Z  d d   Z d d   Z d d   Z d d	   Z d
 d d  Z e d k r e d  Z x" e  e  d k r e d  Z qf We  e  Z	 e
 d  e e	  e
 d  e e	  e
 d  e e	  n  d S)c             C   s   g  } x( t  d  D] } | j d g d  q Wt |   d k r d } d } x_ | t |   k  r | d d k r d } | d 7} n  |  | | | | <| d 7} | d 7} qR W| St d  d Sd S)	uq   
    stringToGrid(str string) --> list
    Transforme la chaine <string> de 81 caractères en une grille 9x9
    	       Q      u   Le format est erroné...Nr   )rangeappendlenprint)stringgridikj r   c/Users/jerome 1/Documents/College/Informatique/OC/1_Site/0_Projets/documents/sudoku/solverSudoku.pystringToGrid   s     

r   c             C   s   x t  d  D] } x t  d  D]r } | d k rG t |  | |  q  | d d d k rz t |  | | d d d q  t |  | | d d q  W| d d d k r | d k r t d	  q q Wd
 S)u]   
    affichage(list grille) --> none
    Affichage la grille de manière conventionnelle
    r      r      r   |end z-----+------+------N)r   r	   )r   r   r   r   r   r   display   s     r   c             C   s3   x, t  d  D] } |  | | | k r d Sq Wd S)u   
    validOnLine(list grid, str elt, int i) --> bool
    Retourne TRUE si le caractère <elt> est absent de la ligne <i> de la grille <grid>
    r   FT)r   )r   eltr   r   r   r   r   validOnLine2   s    r   c             C   s3   x, t  d  D] } |  | | | k r d Sq Wd S)u   
    validOnColumn(list grid, str elt, int j) --> bool
    Retourne TRUE si le caractère <elt> est absent de la ligne <j> de la grille <grid>
    r   FT)r   )r   r   r   r   r   r   r   validOnColumn>   s    r   c             C   st   | | d } | | d } xQ t  | | d  D]< } x3 t  | | d  D] } |  | | | k rJ d SqJ Wq0 Wd S)u   
    validOnBlock(list grid, str elt, int i, int j) --> bool
    Retourne TRUE si le caractère <elt> est absent du bloc contenant la cellule située à la ligne <i> et à la colonne <j>
    r   FT)r   )r   r   r   r   ZiMinZjMinr   r   r   validOnBlockI   s    r   r   c             C   s   | d k r d S| d } | d } |  | | d k rI t  |  | d  Sx t d d  D] } t |  t |  |  rY t |  t |  |  rY t |  t |  | |  rY t |  |  | | <t  |  | d  r d SqY qY Wd |  | | <d S)uw   
    solver(list grid, int position) --> bool
    Résout la grille <grid> par backtracking de manière récursive
    r   Tr   .r   
   F)solverr   r   strr   r   )r   positionr   r   r   r   r   r   r   Y   s    

Kr   __main__uT   Entrez le sudoku par ligne (une case vide est représentée par le caractère '.'):
r   uS   Entrez le sudoku par ligne (une case vide est representée par le caractère '.'):
zGrille initiale:
u   
Résolution en progrès...
zGrille finale:
Nr   )r   r   r   r   r   r   __name__inputZ	monSudokuZgriller	   r   r   r   r   <module>   s    




