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 :

Algorithme pour changer les lettres d'un mot donné


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    artiste
    Inscrit en
    Janvier 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : artiste

    Informations forums :
    Inscription : Janvier 2019
    Messages : 5
    Par défaut Algorithme pour changer les lettres d'un mot donné
    Bonjour

    Je n'ai absolument aucune connaissances en maths, algo, programmation mais peut-être quelqu'un pourra-t-il s'amuser avec cet exercice et me donner un coup de main...
    Je prépare un projet artistique. Mon travail actuel joue avec les mots et la typographie.

    Je pars d'un mot de départ. Par exemple "art"
    le "a" peut être remplacé par les 2 lettres suivantes: "a" (lui-même) ou "h"
    le "r" peut être remplacé par les 5 lettres suivantes: "r" (lui-même), "i", "n", "t", ou "w"
    le "t" peut être remplacé par les 4 lettres suivantes: "t" (lui-même), "a", "e" ou "z"

    Si je me rappelle bien de mes cours de secondaire, il en résulte 40 (2x5x4) possibilités de mots différents.
    La plupart ne veulent rien dire mais quelques uns ont un sens.
    C'est le cas pour "ara", "aïe", "ane" ou "hit".
    Ce sont ces mots qui m'intéressent.

    J'aimerais refaire ce jeu avec n'importe quel mot de mon choix.
    Avec un mot de 3 lettres comme dans mon exemple, je peux faire ça à la main, c'est pas trop long.
    Mais avec des mots plus longs, ça devient tout de suite plus compliqué.

    En résumé:
    -Chaque lettre de l'alphabet peut être remplacée par x lettres (dont elle-même) que je détermine au départ.
    -je donne un mot de mon choix
    -une liste de mots est générée (chaque lettre garde sa position initiale)
    -La liste générée est comparée à une liste type dictionnaire.
    Au final, j'obtiens une liste de mots qui ont du sens et que j'utiliserai dans mes créations.


    Merci, si ce n'est pour votre aide, au moins d'avoir parcouru ma bafouille jusqu'à la fin

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour

    Soit un fichier conversion.txt qui indique les transformations comme ceci:
    Soit ce script bash utilisable dans une console Linux classique :
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/bash
     
    mot=$1
     
    m=$(sed 's/./& /g;s/ $//' <<<$mot)
    motif=$(echo "$m" | awk '(FNR==NR){a[$1]=$2;next} {printf("^");for (i=1;i<=NF;i++) if (a[$i]!="") printf("[%s]",a[$i]); else printf("[%s]",$i); printf("$\n");}' conversion.txt - )
     
    if ! grep -i "$motif" dictionnaire.txt
    then
            echo "Aucun mot ne sied."
    fi

    On obtient alors les résultats suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $ ./art_converter.bash art
    AIE
    AIT
    ANA
    ANE
    ARA
    ARE
    ART
    HIA
    HIE
    HIT
    $ ./art_converter.bash aaa
    Aucun mot ne sied.
    $ ./art_converter.bash arg
    Aucun mot ne sied.
    $ ./art_converter.bash grt
    GIT
    GRE
    Bonne chance

  3. #3
    Membre à l'essai
    Homme Profil pro
    artiste
    Inscrit en
    Janvier 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : artiste

    Informations forums :
    Inscription : Janvier 2019
    Messages : 5
    Par défaut algorithme pour changer les lettres d'un mot donné?
    Pour commencer merci pour l'aide!
    mais comme je disais dans ma question initiale, je suis un nullos.

    Ok, la première fenêtre de code...
    j'ai créé un document "conversion.txt"
    Je mets les lettres de l'alphabet du mot qui m'interesse avec leurs correspondances.
    J'ai enregistré et je l'ai rangé dans un fichier intitulé "motsdoubles" sur mon bureau.

    Pour la deuxième fenêtre, je suis sur mac, j'ai ouvert le terminal et copié collé le script bash.
    J'actionne la touche retour et ça me donne:

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    MacBook-Pro-de-MD:~ md$ #!/bin/bash
    MacBook-Pro-de-MD:~ md$ 
    MacBook-Pro-de-MD:~ md$ mot=$1
    MacBook-Pro-de-MD:~ md$ 
    MacBook-Pro-de-MD:~ md$ m=$(sed 's/./& /g;s/ $//' <<<$mot)
    MacBook-Pro-de-MD:~ md$ motif=$(echo "$m" | awk '(FNR==NR){a[$1]=$2;next} {printf("^");for (i=1;i<=NF;i++) if (a[$i]!="") printf("[%s]",a[$i]); else printf("[%s]",$i); printf("$\n");}' conversion.txt - )
    awk: can t open file conversion.txt
     source line number 1
    MacBook-Pro-de-MD:~ md$ 
    MacBook-Pro-de-MD:~ md$ if ! grep -i "$motif" dictionnaire.txt
    > then
    >         echo "Aucun mot ne sied."
    > fi
    grep: dictionnaire.txt: No such file or directory
    Aucun mot ne sied.
    MacBook-Pro-de-MD:~ md$

    Si je comprend bien, il ne trouve pas le document "conversion.txt"
    Comment lui indiquer le chemin?

    Il ne trouve pas non plus le document "dictionnaire.txt".
    Normal, je ne l'ai pas crée.
    mais où dois-je ranger ce fichier et comment je lui indique le chemin?

    Bonne soirée à tous les experts!

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Tu as ouvert un Mac terminal ? Super !
    Partons de là. Ça va marcher.

    j'ai créé un document "conversion.txt"
    Je mets les lettres de l'alphabet du mot qui m'interesse avec leurs correspondances.
    J'ai enregistré et je l'ai rangé dans un fichier intitulé "motsdoubles" sur mon bureau.
    Il faut savoir. Tu veux l'appeler "motsdoubles" ou "conversion.txt" ?
    Fais ton choix et tiens-le.
    Dans le script, tu écriras la version que tu choisis.

    mais où dois-je ranger ce fichier et comment je lui indique le chemin?
    Tu le ranges où tu veux.
    L'idéal serait de tout mettre dans un dossier dédié.
    Se repérer dans ton arborescence de fichiers est important. Même pour d'autres utilisations.
    Dans ton terminal, pour savoir où tu es, tape :
    Pour savoir quels fichiers et dossiers sont là, tape :
    Dans un chemin, les répertoires sont séparés par une oblique (slash "/" en anglais).
    /repertoire1/repertoire2/monfichier.txt veut dire "le fichier appelé monfichier dans le dossier répertoire2, lui-même dans le dossier répertoire1.
    Pour entrer dans un dossier, tape :
    Pour sortir, tape :
    Pour créer un dossier nommé "mondossier", tape :
    Tu devrais te trouver un tutoriel sur internet pour les premiers pas.

    Le texte que tu as mis dans la console, tu vas plutôt l'enregistrer dans un fichier texte appelé "art_converter.bash".
    C'est ma faute, j'ai été vite en besogne dans mes explications
    Tu pourras le faire fonctionner en tapant dans la console (cette fois-ci), si tout est dans le bon dossier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bash art_converter.bash art


    On résume. Dans l'idéal, tu crées un dossier dans lequel tu mets :
    • art_converter.bash
    • dictionnaire.txt (un fichier avec un mot par ligne, non fourni )
    • conversion.txt ou motsdoubles

    Pas besoin de la console jusqu'ici. Si tu es plus à l'aise avec les fenêtres.
    Puis tu vas dans le bon dossier avec la console, cette fois-ci (avec cd et pwd pour vérifier)
    Et tu t'éclates.

  5. #5
    Membre à l'essai
    Homme Profil pro
    artiste
    Inscrit en
    Janvier 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : artiste

    Informations forums :
    Inscription : Janvier 2019
    Messages : 5
    Par défaut hum hum
    Bon, ça me déprime de pas y arriver malgré tes explications tellement claires.
    Je suis aussi aller voir des tutoriels sur internet, j'ai eu l'impression de comprendre un peu...
    mais non.

    Je résume ce que j'ai fait:

    J'ai créé un dossier "motsdoubles" dans mon dossier perso /Users/md
    (j'avais écrit "fichier" mais c'était un lapsus dans mon précédent post)

    Dedans, j'y ai rangé 3 fichiers:

    - art_converter.bash (avec le script que tu m'as donné)

    - dictionnaire.txt (avec un mot par ligne)
    abaissé
    abaissement
    abaisser
    abandon
    abandonnant
    ...
    zygote


    - conversion.txt (contenant l'aphabet avec les correspondances)
    a ah
    b bk
    c cadgkopqrsx
    d dabfkprst
    e eabfgkopqrtx
    ...
    z zbekr

    J'ouvre le terminal.
    je fais pwd pour savoir ou je suis.
    Je suis dans /Users/md
    Je tape cd motsdoubles dans le terminal
    je refais pwd
    Je suis bien dans le dossier /Users/md/motsdoubles
    Je tape la commande "bash art_converter.bash art" dans le terminal
    Il me répond "aucun mot ne sied"

    Quelle erreur est-ce que je fais?
    ça m'enneeeeerve!

    J'imagine que ça a avoir avec le mot que je veux transformer.
    Si par exemple, je veux jouer avec le mot "nul" (ouais comme moi)
    j'ai essayé de taper la commande "bash art_converter.bash nul"
    Il me répond encore "aucun mot ne sied"

    Pfff...
    J'ai encore besoin qu'on me prenne la main!

  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Les bonnes nouvelles sont que :
    • Tout est en place
    • Le code s'exécute.
    La mauvaise nouvelle est que rien ne sort.

    2 choses à dire :
    • Sous Mac, Windows ou Linux, les fichiers texte ne "codent" pas la fin de ligne de la même façon. (Respectivement "\r", "\r\n", "\n")
      Ce sont des caractères invisibles présent dans le fichier.

      Tu devrais changer cette ligne
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      motif=$(echo "$m" | awk '(FNR==NR){a[$1]=$2;next} {printf("^");for (i=1;i<=NF;i++) if (a[$i]!="") printf("[%s]",a[$i]); else printf("[%s]",$i); printf("$\n");}' conversion.txt - )
      par celle-ci:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      motif=$(echo "$m" | awk '(FNR==NR){a[$1]=$2;next} {printf("^");for (i=1;i<=NF;i++) if (a[$i]!="") printf("[%s]",a[$i]); else printf("[%s]",$i); printf("\\r$\n");}' conversion.txt - )
    • Le dictionnaire contient des accents. Mais "é" "e" "E" "É" sont 4 caractères différents. (entre autres ... äàçéèêëïöüù)
      Le conseil est de remplacer les lettres accentués par leur équivalent simple, dans le dictionnaire : "é" -> "e"
      Sinon, il ne verra pas de correspondance.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ecarter les lettres d'un mot pour qu'il prenne une certaine taille
    Par Kaluza dans le forum Programmation (La)TeX avancée
    Réponses: 3
    Dernier message: 05/04/2014, 10h23
  2. logiciel pour changer les mots de passe office
    Par matsch77 dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 10/01/2010, 14h03
  3. problème d'algorithme pour trouver les circuit d'un graphe
    Par marc_dd dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 21/08/2006, 16h36
  4. algorithme pour enlever les occurences d'une liste
    Par bendenice dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 08/02/2006, 23h28
  5. Problème pour changer les cartes d'un CardLayout
    Par vallica dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 29/11/2005, 14h38

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