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

Prolog Discussion :

Codage/décodage en prolog


Sujet :

Prolog

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2021
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Codage/décodage en prolog
    Bonjour,
    Je débute en prolog et l'on m'a proposer de créer un codage simple comme ceci :
    "ils pensent découper un texte en petits morceaux de taille réduite (taille = 3, 4, 5 ? ils hésitent). Par exemple pour taille=4 cela donnerait pour le découpage du texte "Bonjour" les morceaux suivants : Bonj, onjo, njou, jour. Puis ils comptent trier les morceaux dans l'ordre alphabétique, pour rendre la lecture directe impossible. Cela donnerait le texte codé : Bonj, jour, njou, onjo."

    Je ne sais pas vraiment comment m'y prendre la...
    Par contre j'ai trouvé quelque chose qui pourrait etre utile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string_codes("Bonjour", Liste).
    Ceci me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Liste = [66, 111, 110, 106, 111, 117, 114]
    Il serait peut être plus simple de passer par sa valeur ascii ?

    Si jamais vous avez une idée, merci bien .

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    En SWI_Prolog, on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ?- atom_chars(abc, X).
    X = [a, b, c].
     
    ?- atomic_list_concat([a, b, c], X).
    X = abc.
    S'il faut absolument passer par des string on a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ?- string_chars("abc", X).
    X = [a, b, c].
     
    ?- atomics_to_string([a,b,c], X).
    X = "abc".
    "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 : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2021
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Merci de votre réponse mais j'essaye de créer une fonction ou on a 3 paramètres ou le premier est la taille des morceaux, le second le mot et le dernier la liste retour.
    De la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Liste(3,"bonjour",E).
    E = "bon"
    E = "onj"
    E = "njo"
    E = "jou"
    E = "our"
    Enfin pouvoir les trier dans l'ordre alphabétique aussi mais déjà juste le découpe je n'y arrive pas...

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Voilà une possibilité pour couper une liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    couper(Liste, Len, Out) :-
        couper(Liste, Len, [], Out).
     
    couper(Liste, Len, Cur, Out) :-
        length(Liste, Len1),
        (   Len1 > Len
        ->  length(L, Len),
            append(L, X, Liste),
            couper(X, Len, [L | Cur], Out)
        ;   reverse([Liste | Cur], Out)).
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     ?- couper([1,2,3,4,5,6,7,8,9], 4, X).
    X = [[1, 2, 3, 4], [5, 6, 7, 8], [9]].
    PS : j'ai bien conscience que ce n'est pas exactement ce que vous recherchez, mais il y a une ligne à rajouter et une autre à changer pour obtenir ce que vous voulez.
    "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 : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2021
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Je commence à mieux comprendre merci beaucoup,
    cependant la c'est une liste d'entier.
    Pour une chaine de caractère ca ne va pas la couper en rentrant la chaine directement "bonjour" si ?
    Ou c'est ce qui sera possible avec la ligne manquante / ligne à modifier que vous parliez ?

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Non, je vous ais montré dans mon premier message comment transformer une chaine de caractères en liste de caractères et inversement.
    En combinant les les information des deux messages vous devez pouvoir vous en sortir, mais la ligne manquante c'est uniquement pour la découpe que vous recherchez.
    "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 : La Madeleine à la veilleuse de Georges de La Tour

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2021
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Ahh oui je pense voir comment combiner les deux informations que vous m'avez données.
    Pour la ligne manquante ce sera plus compliqué mais je vais chercher, merci beaucoup de votre aide.
    Je passerai le sujet en résolu lorsque j'aurai trouvé la solution

  8. #8
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par entve Voir le message
    Pour la ligne manquante ce sera plus compliqué mais je vais chercher, merci beaucoup de votre aide.
    Head / Tail ça vous dit quelque chose ?
    "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 : La Madeleine à la veilleuse de Georges de La Tour

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2021
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Le Head / tail sur les listes ? Comme [E|L] ? Je pourrai afficher le E et réitérer sur L pour afficher le reste ?

  10. #10
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Il faut creuser un peu ... mais l'idée est là !
    "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 : La Madeleine à la veilleuse de Georges de La Tour

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2021
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    d'accord je vais essayer merci bien !

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2021
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Ca fait un moment que je n'ai pas réagit à ce poste et j'ai essayé de me remettre sur ce problème qui m'embête vraiment .
    J'ai rajouté une ligne qui met la liste en caractère comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    couper(Liste1, Len, Out) :-
        string_chars(Liste1, Liste2),
        couper(Liste2, Len, [], Out).
     
    couper(Liste, Len, Cur, Out) :-
        length(Liste, Len1),
        (   Len1 > Len
        ->  length(L, Len),
            append(L, X, Liste),
            couper(X, Len, [L | Cur], Out)
        ;   reverse([Liste | Cur], Out)).
    Cependant lorsque je test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    couper([b,o,n,j,o,u,r], 4, X).
    X = [[b, o, n, j], [o, u, r]]
    Mais j'aimerai avoir la liste retour sous la forme:
    X = "bon"
    X = "onj"
    X = "njo"
    X = "jou"
    X = "our"

    de plus quand je test au lieu de faire [b,o,n,...] serait-il possible de faire [bonjour].
    J'ai essayé plusieurs choses et j'ai compris ce que l'on m'a expliqué mais là je bloque.

    Merci de m'avoir lu et de votre aide si vous avez une idée

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2021
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Un problème de résolut j'ai rajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    couper(Liste1, Len, Out) :-
        atom_chars(Liste1,L),
        string_chars(L, Liste2),
        couper(Liste2, Len, [], Out).
    je peux maintenant faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    couper(bonjour,4,X).
    X = [[b, o, n, j], [o, u, r]]
    pour le reste je sèche

  14. #14
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Ceci peut aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ?- atom_chars(X, [a,b,c]).
    X = abc.
    "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 : La Madeleine à la veilleuse de Georges de La Tour

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2021
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    atom_chars peut m'aider où ?
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    couper(Liste1, Len, Out) :-
        string_chars(Liste1, Liste2),
        couper(Liste2, Len, [], Out).
     
    couper(Liste, Len, Cur, Out) :-
        length(Liste, Len1),
        (   Len1 > Len
        ->  length(L, Len),
            append(L, X, Liste),
            couper(X, Len, [L | Cur], Out)
        ;   reverse([Liste | Cur], Out)).
    Je peux déjà utiliser
    couper(bonjour,4,X).

    Je ne vois donc pas comment faire de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    E = "bon"
    E = "onj"
    E = "njo"
    E = "jou"
    E = "our"
    et trier par ordre alphabétique le résultat pour le rendre plus difficile à lire

  16. #16
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Si vous aviez bien lu, j'avais déjà presque tout ecrit :
    Voici le code

    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
    couper(Liste1, Len, Out) :-
        string_chars(Liste1, Liste2),
        couper(Liste2, Len, [], Out1),
       // transformer une liste de char en string (CF mon premier message)
        maplist(atomics_to_string, Out1, Out).
     
    couper(Liste, Len, Cur, Out) :-
        length(Liste, Len1),
        (   Len1 > Len
        ->  length(L, Len),
            append(L, _, Liste),
     
            % c'est ici le truc Head/Tail
            Liste = [_|RListe],
            couper(RListe, Len, [L | Cur], Out)
     
        ;   reverse([Liste | Cur], Out)).
    Résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ?- couper("bonjour", 3, Out).
    Out = ["bon", "onj", "njo", "jou", "our"].
    A vous de voir comment les trier par ordre alphabétique
    "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 : La Madeleine à la veilleuse de Georges de La Tour

Discussions similaires

  1. Codage décodage VITERBI
    Par Kevgeii dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 04/07/2009, 11h39
  2. codage/décodage string pour url
    Par denisvignes dans le forum Langage
    Réponses: 2
    Dernier message: 19/04/2008, 19h27
  3. codage décodage d'url
    Par bada dans le forum Général Java
    Réponses: 6
    Dernier message: 18/01/2008, 10h21
  4. Codage/ décodage réels binaires
    Par modaffar dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 10/07/2007, 16h53
  5. Codage décodage en base64 d'un fichier avec c#
    Par barhili04 dans le forum C#
    Réponses: 2
    Dernier message: 22/05/2007, 14h16

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