Précédent   Forum du club des développeurs et IT Pro > Autres langages > Autres langages > Prolog
Prolog Forum d'entraide sur la programmation en langage Prolog. Avant de poster : Cours Prolog
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/12/2012, 22h07   #1
ProAccount
Invité de passage
 
Homme Olivier Alves
Étudiant
Inscription : septembre 2012
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Olivier Alves
Localisation : Portugal

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Matériel informatique

Informations forums :
Inscription : septembre 2012
Messages : 3
Points : 0
Points : 0
Par défaut Nurikabe -- programmation logique par contrainte

Bonjour à tous et tout d'abord merci de regarder ce message.

Je dois développer un logiciel capable de résoudre un Nurikabe de taille variable en prolog (sicstus).

Le problème c'est que je ne sais pas par où commencer, j'ai quelques base de programmation par contraintes, à vrai dire très peu et je ne sais faire que les contraintes basique comme par exemple dire que A1 + A2 doit être égal à une somme donnée...

J'ai jusqu'à dimanche prochain pour résoudre ce problème.
J'aurais besoin d'une âme charitable pour venir a bout.

Je vous explique le problème:
Nurikabe est un puzzle qui consiste remplir une grille de X par X cases, dont certaines contiennent un chiffre, en fonction d'un certain nombre de contraintes.

Le but est de déterminer pour chaque carré si il est blanc ou noir.

Les cases noirs forment le "nurikabe".
Elles doivent toutes être contigües par un côté, ne doivent pas contenir de nombre et ne doivent contenir aucun bloc 2x2 ou plus grand.

Les cases blanches forment les îles.
Chaque nombre "n" doit faire partie d'un îlot de "n" cases blanches.

Chaque case blanche ne doit appartenir qu'à une seule île et chaque île doit contenir un nombre.

Évidemment il y a d'autres contraintes mais celles-ci sont les plus basiques à comprendre et à appliquer.

Voici une image d'un nurikabe résolu:


Merci de votre aide.
ProAccount est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2012, 23h43   #2
Trap D
Rédacteur/Modérateur
 
Avatar de Trap D
 
Inscription : septembre 2003
Messages : 4 437
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 4 437
Points : 5 301
Points : 5 301
Bonjour.
Tu n'en dis pas assez, quelles sont les autres contraintes, et qu'as-tu déjà tenté ?
Je n'ai pas encore étudié ton problème en détail mais tu peux peut-être regarder cet article, les contraintes sont bien évidemment différentes mais il y a quelques similitudes.
__________________
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés

Mon avatar : Intérieur avec jeune femme de Vilhelm Hammershoi
Trap D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2012, 15h46   #3
ProAccount
Invité de passage
 
Homme Olivier Alves
Étudiant
Inscription : septembre 2012
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Olivier Alves
Localisation : Portugal

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Matériel informatique

Informations forums :
Inscription : septembre 2012
Messages : 3
Points : 0
Points : 0
Pour être honnête je n'est encore rien vraiment tenté, je cherche encore a comprendre comment créer mes propres contraintes et non pas de simple contraintes comme deux sommes égales par exemple.

Pour la liste des contraintes elle est un peu longue mais j'aimerai commencer par les plus simples:

1) Si une île est composée du chiffre 1 les cases aux dessus/dessous/gauche/droite d'elle doivent être noire

2) si deux chiffre sont en diagonal directe les cases de la diagonal inverse doivent être noire.
exemple:
2|B
B|3
B représente une case noire

3) toutes les cases noire doivent être reliés entre elles.

4) il ne peut pas y avoir un carré de 4 case noire

5) si deux case avec un chiffre sont distante d'une case celle-ci doit être noire
Exemple: 3|B|3

Le Nurikabe qui doit être résolu est representé de la façon suivante:
Vars = [
A1, A2, A3, A4, 2,
B1, B2, B3, B4, B5,
3, C2, C3, C4, 3,
D1, D2, D3, D4, D5,
2, E2, E3, E4, E5
].

Dans un premier temps le programme doit être capable de résoudre un nurikabe spécifique comme celui du dessus mais bien évidemment la disposition peux changer en fonction du nurikabe que l'on veut résoudre.
ProAccount est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h38.


 
 
 
 
Partenaires

Hébergement Web