IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Mots croisés algorithme


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 80
    Points : 46
    Points
    46
    Par défaut Mots croisés algorithme
    Bonjour,

    est-ce que quelqu'un pourrait m'aider pour cet exercice s'il vous plait, ça serait super sympa, merci.


    Enoncé:
    un tableau grille à 10 lignes et 10 colonnes contient les données relatives
    à un jeu de mots croisés simulés sur ordinateur.Chaque élément de ce
    tableau est une structure de type Case, contenant les deux champs :

    noir: valeur booléenne affecté à vrai si la case correspondante de la grille est une case
    noir, représenté dans le tableau par (=).(qui ne peut donc contenir une lettre)


    lettre: contient soit le caractères inscrit par le joueur dans la case, soit le caractère
    étoile(*) si la case est vide(est donc on peut placer une lettre)



    la question est de donner le nombre de mots complétés par le joueur.


    par exemple dans le tableau ci dessous: le nombre de mots et de 4.


    * * A * * * = * * *
    * * L * = * * * * *
    L O G I Q U E = * *
    * * O = * * * = * *
    = * R * = * = * * *
    * * I = O * * * = *
    * = T A B L E A U =
    * * H = J * * * * *
    * * M * E * = * * *
    * * E * T * * * * *

    mon raisonnement et là où je bloque: donc je parcoure d'abord le tableau colonne par colonne(ensuite ligne par ligne) si
    la première case est vide ou contient une case noir(=) je passe à la case suivante si celle-ci contient une
    lettre, je dois lire toutes les lettres qui la suivent jusqu'à je tombe sur la case noir(=) ou fin de colonne. et là incrémenté nbMots et passer à la colonne suivant ou la case approprié


    ps: je peux utiliser le module estLettre(car) : qui retourne vrai si car est une lettre.



    une fois qu'une case contient une lettre je n'arrive pas à lire à toutes les lettres qui la suivent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Module motsCroisé(tab[1 à 10, 1 à 10]de caractère) => Entier
     nbMots: entier
     
       pour i de 1 à 10 faire
           pour j de 1 10 faire 
             si (estLettre(tab[i][j].lettre )) alors
                 // si je rentre là c'est que la case est une lettre et c'est également là où je bloque je n'arrive pas à lire jusqu'à la case noir ou fin de colonne(puis incrémenté nbMots)

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Suivant le modèle de programmation choisi j'emploierai différents algorithmes.
    Par exemple si tu es dans un langage très impératif et peu équipé en matière de manipulation haut-niveau de texte/liste, je ferais une petite machine à état (EN_DEBUT_DE_MOT, LISANT_UN_MOT et MOT_INCOMPLET devraient suffire) qui parcourrait ligne à ligne puis colonne par colonne le tableau en mettant à jour le compteur lorsqu'elle rencontre une case noire alors qu'elle était dans l'état LISANT_UN_MOT.
    Dans un langage de plus haut niveau j'emploierai un algorithme moins efficace mais diablement plus lisible : Pour chaque ligne extraire la liste des mots en coupant selon les cases noires, puis filtrer les mots en éliminant ceux qui contiennent '*', faire de même pour les colonnes, puis compter le nombre total de mot restant.

    Exemple d'implémentation du second algorithme en Haskell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    -- La grille de mot croisé est une liste de liste de caractères,
    -- '=' représente une case noire
    type Grid = [[Char]]
     
    compteMots :: Grid -> Int
    compteMots css = length (filter (\m -> length m > 1 && '*' `notElem` m) mots)
      where
        mots  = lMots ++ cMots
        lMots = concatMap (wordsBy (=='=')) css              -- mots en ligne
        cMots = concatMap (wordsBy (=='=')) (transpose css)  -- mots en colonne
    --
    Jedaï

Discussions similaires

  1. [Free Pascal] Jeu de mots croisés
    Par Alcatîz dans le forum Codes sources à télécharger
    Réponses: 4
    Dernier message: 22/02/2015, 22h00
  2. Génération de mots croisés
    Par esired dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 23/05/2013, 23h57
  3. mots croisés en C
    Par moncif44 dans le forum C
    Réponses: 1
    Dernier message: 30/04/2011, 11h07
  4. Mots croisés, mots fléchés ou sudokus
    Par rambc dans le forum jQuery
    Réponses: 9
    Dernier message: 21/04/2011, 23h16
  5. [JavaScript] [SRC] Aide aux mots-croisés
    Par Bisûnûrs dans le forum Contribuez
    Réponses: 14
    Dernier message: 22/12/2006, 04h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo