SUDOKU O. Pantz 12 septembre 2016

Documents pareils
Programmation linéaire

Résolution d équations non linéaires

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

INF 232: Langages et Automates. Travaux Dirigés. Université Joseph Fourier, Université Grenoble 1 Licence Sciences et Technologies

Fonctions homographiques

Jean-Philippe Préaux

Chapitre 2. Eléments pour comprendre un énoncé

Quelques algorithmes simples dont l analyse n est pas si simple

Programmation linéaire

Modèles à Événements Discrets. Réseaux de Petri Stochastiques

Architecture des Systèmes d Information Architecture des Systèmes d Information

Initiation à l algorithmique

L exclusion mutuelle distribuée

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Représentation d un entier en base b

1 Recherche en table par balayage

Résolution de systèmes linéaires par des méthodes directes

MegaStore Manager ... Simulation de gestion d un hypermarché. Manuel du Participant

Relation entre deux variables : estimation de la corrélation linéaire

Informatique Générale

Cours d initiation à la programmation en C++ Johann Cuenin

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

LA PHYSIQUE DES MATERIAUX. Chapitre 1 LES RESEAUX DIRECT ET RECIPROQUE

Une version javascript sera disponible directement dans le cours prochainement.

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Exercices Corrigés Premières notions sur les espaces vectoriels

Processus d Informatisation

SUPERTOTO TERMES & CONDITIONS. Table des Matières

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Exercices du Cours de la programmation linéaire donné par le Dr. Ali DERBALA

Initiation à la programmation en Python

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Cours de Recherche Opérationnelle IUT d Orsay. Nicolas M. THIÉRY. address: Nicolas.Thiery@u-psud.fr URL:

Cours d Algorithmique et de Langage C v 3.0

Modes Opératoires WinTrans Mai 13 ~ 1 ~

RÉSOLUTION DE SYSTÈMES À DEUX INCONNUES

La programmation linéaire : une introduction. Qu est-ce qu un programme linéaire? Terminologie. Écriture mathématique

MIS 102 Initiation à l Informatique

Resolution limit in community detection

Annexe 6. Notions d ordonnancement.

Introduction à l algorithmique et à la programmation (Info 2)

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Logique binaire. Aujourd'hui, l'algèbre de Boole trouve de nombreuses applications en informatique et dans la conception des circuits électroniques.

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Cours 1 : La compilation

Licence Sciences et Technologies Examen janvier 2010

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Correction de l examen de la première session

JE SUIS UN OFFICIEL EN FUTSAL

Bases de données cours 1

CRYPTOGRAPHIE. Signature électronique. E. Bresson. SGDN/DCSSI Laboratoire de cryptographie

Contexte. Pour cela, elles doivent être très compliquées, c est-à-dire elles doivent être très différentes des fonctions simples,

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

Encryptions, compression et partitionnement des données

Projet INF242. Stéphane Devismes & Benjamin Wack. Pour ce projet les étudiants doivent former des groupes de 3 ou 4 étudiants.

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Programmation C. Apprendre à développer des programmes simples dans le langage C

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

Intelligence Artificielle Planification

Vers l'ordinateur quantique

Tâche complexe produite par l académie de Clermont-Ferrand. Mai 2012 LE TIR A L ARC. (d après une idée du collège des Portes du Midi de Maurs)

Cours de Master Recherche

La demande Du consommateur. Contrainte budgétaire Préférences Choix optimal

Définitions. Numéro à préciser. (Durée : )

Guide d implémentation. Réussir l intégration de Systempay

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

Introduction à MATLAB R

Conventions d écriture et outils de mise au point

= 1 si n = m& où n et m sont souvent des indices entiers, par exemple, n, m = 0, 1, 2, 3, 4... En fait,! n m

Cours 02 : Problème général de la programmation linéaire

Site Web de paris sportifs

Programmation linéaire et Optimisation. Didier Smets

LICENCE PROFESSIONNELLE. Systèmes informatiques et logiciels

Enseignement secondaire technique

Master I Génie Logiciel

Cours 1 : Qu est-ce que la programmation?

Vision industrielle et télédétection - Détection d ellipses. Guillaume Martinez 17 décembre 2007

CAHIER DE S CHARGE S Remote Workload Manager

Assistant d e tablissement de Tableaux

Chapitre 1 : Évolution COURS

RÉVISION DU PLAN D OCCUPATION DES SOLS ET SA TRANSFORMATION EN PLAN LOCAL D URBANISME

La Certification de la Sécurité des Automatismes de METEOR

INTRODUCTION A L ELECTRONIQUE NUMERIQUE ECHANTILLONNAGE ET QUANTIFICATION I. ARCHITECTURE DE L ELECRONIQUE NUMERIQUE

(Third-Man Attack) PASCAL BONHEUR PASCAL 4/07/2001. Introduction. 1 Domain Name Server. 2 Commandes DNS. 3 Hacking des serveurs DNS

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

Note de cadrage du PEPI MACS Mathématiques Appliquées & Calcul Scientifique

Créer le schéma relationnel d une base de données ACCESS

Évaluation et implémentation des langages

Synthèse «Le Plus Grand Produit»

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

PRIX DE VENTE À L EXPORTATION GESTION ET STRATÉGIES

Le Logiciel de Facturation ultra simplifié spécial Auto-Entrepreneur

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Vous propose une large gamme de

Systèmes décisionnels et programmation avancée

ÉPREUVE COMMUNE DE TIPE Partie D

FEDERATION FRANÇAISE DE PARACHUTISME

Calcul différentiel sur R n Première partie

Transcription:

SUDOKU O. Pantz 12 septembre 2016

2 Les Sudokus constituent un jeu très populaire. Il s agit de remplir une grille comptant 9 lignes et 9 colonnes, elle même décomposée en 9 sous grilles de taille 3 3 à l aide de chiffres compris entre 1 et 9 en respectant les trois règles suivantes Tous les chiffres d une ligne doivent être distincts Tous les chiffres d une colonne doivent être distincts Tous les chiffres d une des sous grille 3 3 doivent être distincts. Il existe un très grand nombre de grilles remplissant ces conditions. Aussi le jeu ne consiste pas à remplir une grille vierge (même si cela constitue un problème intéressant en soit comme nous le verrons par la suite), mais préremplie. Un problème de Sudoku consiste à compléter une grille préremplie n admettant qu une unique solution respectant les trois règles précédentes. Les Sudokus soulèvent un grand nombre de problèmes : Comment résoudre une grille de Sudoku? Comment déterminer si une grille de Sudoku n admet qu une solution? Comment évaluer la difficulté d un Sudoku? Comment générer un Sudoku? Peut-on réaliser des Sudokus sur de plus grandes grilles? Objectifs. L objectif de ce projet consiste à répondre à un certain nombre de ces questions. On s attachera notamment à la résolution des Sudokus et à leur génération. Chacun s organisera en équipe. A l issu des séances, un tournoi sera organisé entre les équipes. Lors de chaque match, chacune des équipes proposera des Sudokus à l équipe adverse qui sera chargée de les résoudre. L équipe dont le temps maximum de résolution d un Sudoku est minimum sera déclarée victorieuse. Plusieurs algorithmes pourront être utilisés pour résoudre les grilles soumise. Le temps retenu pour une grille donnée sera celui réalisé par l algortihme le plus rapide. En cas d égalité, le temps moyen de résolution sera pris en compte. Soumettre une grille sans solution est éliminatoire. Une équipe peut contester la faisabilité d au plus un Sudoku. L équipe adverse devra prouver qu il est réalisable, sous peine de disqualification. On rappelle également que les Sudokus soumis doivent avoir une solution unique. Si une équipe détecte des solutions multiples, elle bénéficie d un avantage : Dans ce cas, on ne tiendra pas compte de son plus mauvais résultat mais de son (n + 1)-ième plus mauvais résultat (ou n est le nombre de solutions surnuméraires détectées sur l ensemble des Sudokus soumis). Le nombre de Sudoku maximum soumis sera fixé par avance. Les grilles soumises à l équipe adverse devront être générées automatiquement (aucun limite de temps pour leur génération qui pourra être effectuée à l avance). Un certain format de soumission des Sudokus et de leur solution sera à respecter. Le non respect de ce format est éliminatoire. Chaque match se déroulera dans un environnement système identique, en local. L usage de code extérieur, non produit par l équipe, autre que les librairies classiques est formellement interdit. L usage de toute librairie extérieure devra recevoir l accord de l arbitre (i.e. l encadrant). Chaque équipe aura accès au code de l équipe adverse et pourra contester ce point. Les codes de résolution doivent être soumis à l arbitre avant la compétition et seront rendus publics. Ils ne pourront plus être modifiés après cette date. Les équipes auront accès au code source de résolution des équipes adverses. Les codes de génération de grilles sont tenus secrets jusqu au jour de la compétition. Ils pourront donc être adaptés aux codes des équipes adverses. Chaque équipe sera formée de quatre membres au plus et de deux membres

au moins. L évaluation finale est globale pour une équipe. Outre les résultats de la compétition, elle sera basée sur un rapport et une soutenance finale, l originalité des méthodes proposées, la qualité de leur implémenatation, l organisation de l équipe. Une superfinale sera organiser entre les champions de chaque groupes. Outre l aspect technique, une attention particulière sera portée sur l interface utilisateur. Une implémentation web ou mobile sera très appréciée. 3

4

Chapitre 1 Résoudre un Sudoku Plusieurs méthodes ont été proposées pour résoudre les Sudokus : Programmation linéaire, stochastique, génétique, etc... Nous allons essayer d implémenter un certain nombre de ces méthodes en commençant par la plus simple : L algorithme rebrousse chemin ou backward algortihm. 1.1 Backtracking Algorithm L algorithme rebrousse chemin est la méthode la plus basique afin de résoudre un Sudoku. Nous allons présenter cette algorithme. Il s agira par la suite de l implémenter et de vérifier son efficacité (ou non) pratique. L algorithme consiste plus ou moins à tester TOUTES les combinaisons possibles en éliminant peu à peu les configurations impossible. Un des avantages de cette algorithme est qu il fournit la solution du Sudoku dans tous les cas. Par contre il est potentiellement très très lent et il n y a aucune garanti pratique que la solution soit obtenue en un temps raisonnable. 1.1.1 Présentation de l algorithme Considérons une grille préremplie d un Sudoku. On numérote les cases ligne par ligne puis colonne par colonne (ou l inverse, cela n a aucune sorte d importance). On commence par la première case. Si elle est déjà remplie, on passe à la suivante et ainsi de suite jusqu à atteindre une case vierge. On affecte la valeur 1 à cette case vierge et on vérifie si la grille obtenue ne violent aucune des trois contraintes données dans l introduction. Si ce n est pas le cas, on incrémente la valeur d une unité et on recommence. Si les contraintes sont satisfaites, on passe à la case vierge suivante. A nouveau on teste les valeurs de 1 à 9 et on poursuit ainsi. Si on aucune des valeurs ne permet de satisfaire les contraintes, c est qu une erreur a été commise précédemment. On revient donc en arrière d une case et on incrémente la valeur de la case en question d une unité, etc... 1.1.2 Implémentation du code Nous vous proposons d implémenter ce code en python. D autres langages peuvent être utilisés en particulier, si on vise une implémenation web (par 5

6 CHAPITRE 1. RÉSOUDRE UN SUDOKU exemple javascript). Cela importe peu en définitive, même si les performances peuvent être différentes. Afin de faciliter l étape d implémentation décrite dans la section précédente, il est nécessaire de formaliser l algorithme sous une forme mathématique (et oui, c est un peu le langage universel... pour les ordinateurs du moins). On note (a ij ) {1, 9} 9 9 les valeurs de chacune des cases du Sudoku. Les indices i et j correspondent respectivement aux lignes et aux colonnes. Ainsi a 1,1 correspond à la première case de la première ligne du Sudoku, a 1,2 à la deuxième case de la première ligne et ainsi de suite. L algorithme peut se détailler de la manière suivante : 1. On remplit (a ij ) des valeurs déjà connues. On affecte la valeur zéro aux cases de valeur inconnue. On définit les familles (I n ) n {0,N 1} et (J n ) n {0,N 1} listant les indices (i, j) des cases inconnues de la grille initiale où N est le nombre de cases non préremplies. On pose n = 0. 2. Si n < 0 ou n = N, on passe à l étape 7. Sinon, on passe à l étape 3. 3. Si a i,j = 9 avec i = I n et j = J n, on pose a i,j = 0, on décrémente n et on retourne à l étape 2. 4. On incrémente a i,j d une unité où i = I n et j = J n. 5. On teste si la colonne, la ligne et le bloc contenant la case (i, j) ne contiennent respectivement qu une seule fois la valeur a i,j. Si c est effectivement le cas, on incrémente n. 6. On retourne à l étape 2. 7. Si n < 0, il n y a pas de solution. Si n = N la solution est donnée par (a ij ). Vous pourrez tester votre algorithme afin de résoudre les Sudokus suivants

1.1. BACKTRACKING ALGORITHM 7 1 7 8 9 3 8 9 5 6 9 7 3 1 2 4 5 8 5 6 2 4 9 6 7 3 4 9 5 1 4 3 Figure 1.1 Un Sudoku facile 3 9 8 1 2 6 5 1 7 8 9 5 6 1 2 3 7 9 2 8 7 2 5 4 8 6 Figure 1.2 Un Sudoku pas trivial 8 3 6 7 9 2 5 7 4 5 7 1 3 1 6 8 8 5 1 9 4 Figure 1.3 Un Sudoku difficile (très?)

8 CHAPITRE 1. RÉSOUDRE UN SUDOKU 5 9 3 8 5 1 2 5 7 4 1 7 3 2 1 4 9 Figure 1.4 Difficile par backtracking