Une regex pour une énigme
Résolu
FoNeTiK
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Dans le cadre d'une chasse au trésor, j'ai à résoudre une énigme qui me donne du fil à retordre.
Il s'agit, grosso modo, de remettre dans l'ordre des groupes de lettres pour former une ou plusieurs phrases.
Après avoir usé des heures de réflexion dessus, j'ai pensé qu'un outil informatique qui pourrait me proposer tous les mots possibles avec ces motifs de lettres pourrait grandement m'aider à parvenir à mes fins.
J'ai donc naturellement foncé vers le site dcode.fr en pensant y trouver mon bonheur. Malheureusement, je n'ai pas trouvé l'outil adéquat. Le solveur de "Mots Couplés" s'en approche mais il s'obstine à ne former que des mots de 2x3 lettres. Or ma phrase à déchiffrer peut très bien contenir des mots de 3 ou 10 lettres.
Après les avoir directement contactés, ils m'ont conseillé d'utiliser leur outil de recherche de mots par expression régulière. Le problème : c'était la première fois que j'entendais parler de ce langage.
Si j'ai bien compris, je pourrais demander à la machine de rechercher dans sa base de données (les dictionnaires de dcode.fr) tous les mots correspondants aux critères énoncés dans une regex.
Pensez-vous que ce serait possible à faire ?
Si oui, de quelle manière devrait être formulée ma regex ?
Pour être sûr que tout le monde comprenne bien ce que je cherche à faire, je vais donner un exemple :
J'ai à ma disposition les motifs suivants : PO TS IM SAN DES
Je souhaiterait que la machine les assemble afin de former tous les mots possibles. Cela donnerait :
IMPOSANTS, IMPOTS, POTS, DES
(trouver tous les mots possibles, longs comme courts)
N'hésitez pas à me questionner si je n'ai pas été assez clair et je suis prêt à faire le gros de l'effort, si vous avez juste des liens vers des tutos pour apprendre les regex (appliquées à ce que je cherche à faire bien sûr), je suis preneur.
Dans le cadre d'une chasse au trésor, j'ai à résoudre une énigme qui me donne du fil à retordre.
Il s'agit, grosso modo, de remettre dans l'ordre des groupes de lettres pour former une ou plusieurs phrases.
Après avoir usé des heures de réflexion dessus, j'ai pensé qu'un outil informatique qui pourrait me proposer tous les mots possibles avec ces motifs de lettres pourrait grandement m'aider à parvenir à mes fins.
J'ai donc naturellement foncé vers le site dcode.fr en pensant y trouver mon bonheur. Malheureusement, je n'ai pas trouvé l'outil adéquat. Le solveur de "Mots Couplés" s'en approche mais il s'obstine à ne former que des mots de 2x3 lettres. Or ma phrase à déchiffrer peut très bien contenir des mots de 3 ou 10 lettres.
Après les avoir directement contactés, ils m'ont conseillé d'utiliser leur outil de recherche de mots par expression régulière. Le problème : c'était la première fois que j'entendais parler de ce langage.
Si j'ai bien compris, je pourrais demander à la machine de rechercher dans sa base de données (les dictionnaires de dcode.fr) tous les mots correspondants aux critères énoncés dans une regex.
Pensez-vous que ce serait possible à faire ?
Si oui, de quelle manière devrait être formulée ma regex ?
Pour être sûr que tout le monde comprenne bien ce que je cherche à faire, je vais donner un exemple :
J'ai à ma disposition les motifs suivants : PO TS IM SAN DES
Je souhaiterait que la machine les assemble afin de former tous les mots possibles. Cela donnerait :
IMPOSANTS, IMPOTS, POTS, DES
(trouver tous les mots possibles, longs comme courts)
N'hésitez pas à me questionner si je n'ai pas été assez clair et je suis prêt à faire le gros de l'effort, si vous avez juste des liens vers des tutos pour apprendre les regex (appliquées à ce que je cherche à faire bien sûr), je suis preneur.
A voir également:
- Une regex pour une énigme
- Voici du code ascii : 34 2d 3f 3d 31 décodez-le et résolvez l'énigme trouvée ✓ - Forum Loisirs / Divertissements
- Voici du code ascii : 34 2d 3f 3d 31 décodez-le et résolvez l'énigme trouvée. - Forum Loisirs / Divertissements
- Polyland énigme - Forum Loisirs / Divertissements
- Décoder une enigme - Forum Windows
- Énigme 34 fermiland - Forum Loisirs / Divertissements
2 réponses
Bonjour
De tutos sur les regex, il y en a des tonnes.
Si tu codes habituellement en php, par exemple, tu tappes « regex php tuto » et tu vas trouver ton bonheur.
Maintenant, ça n’est pas un outil de combinaison, c’est un outil de recherche et d’extraction.
Il faut donc lui fournir un texte, un liste de mots, bref de l’ascii en source et ça va te sélectionner toutes les occurrences qui correspondent à ta « requête ».
Je peux te faire un exemple avec tes critères, mais un peu plus tard dans l’après-midi.
De tutos sur les regex, il y en a des tonnes.
Si tu codes habituellement en php, par exemple, tu tappes « regex php tuto » et tu vas trouver ton bonheur.
Maintenant, ça n’est pas un outil de combinaison, c’est un outil de recherche et d’extraction.
Il faut donc lui fournir un texte, un liste de mots, bref de l’ascii en source et ça va te sélectionner toutes les occurrences qui correspondent à ta « requête ».
Je peux te faire un exemple avec tes critères, mais un peu plus tard dans l’après-midi.
Je crois que j'ai trouvé
La fin tu la reconnais.
Au début, il y a un bloc qui va vérifier que chaque motif n'est pas répété.
Donc si PO est présent 2 fois, la capture s'arrête, idem pour TS, SAN etc..
Seul bémol, ça ne marche que sur un texte complet, il faut donc lui faire tester les mots un par un et non un fichier d'un coup.
Cela peut s'avérer plus long à l'exécution.
Pour gagner un rapidité, tu peux peut-être le faire en 2 fois
et
^(?!.*PO.*PO)(?!.*TS.*TS)(?!.*SAN.*SAN)(?!.*DES.*DES)(PO|TS|IM|SAN|DES)+$
La fin tu la reconnais.
Au début, il y a un bloc qui va vérifier que chaque motif n'est pas répété.
(?!pattern)signifie que la capture s'arrête si le pattern est vérifié plus loin dans le texte
.*PO.*POsignifie n'importe quoi de longueur de 0 à n et PO et n'importe quoi de longueur de 0 à n et PO, donc PO répété et placé n'importe où dans le texte.
Donc si PO est présent 2 fois, la capture s'arrête, idem pour TS, SAN etc..
Seul bémol, ça ne marche que sur un texte complet, il faut donc lui faire tester les mots un par un et non un fichier d'un coup.
Cela peut s'avérer plus long à l'exécution.
http://regexstorm.net/tester?p=%5e%28%3f!.*PO.*PO%29%28%3f!.*TS.*TS%29%28%3f!.*SAN.*SAN%29%28%3f!.*DES.*DES%29%28PO%7cTS%7cIM%7cSAN%7cDES%29%2b%24&i=SANSAN
Pour gagner un rapidité, tu peux peut-être le faire en 2 fois
\b(PO|TS|IM|SAN|DES)+\bsur tout le fichier
et
^(?!.*PO.*PO)(?!.*TS.*TS)(?!.*SAN.*SAN)(?!.*DES.*DES)(PO|TS|IM|SAN|DES)+$sur les résultats de la première Regex
c’est a et b et c.
Pour le ou, ça depend, pour un caractère ça peut être ou , pour plusieurs caractères c’est
Dès que je rentre et que j’ai accès à mon pc, je te montre.
Ça me donne presque ce que je veux. Le seul problème c'est que je me retrouve avec des mots comme POPO ou SANSAN (wtf ?). J'aimerais éviter la répétition d'un même motif. Si je mets une seule fois PO, j'aimerais qu'il n'apparaisse qu'une fois au maximum.
Mais si par exemple tu charges un fichier de mots, il est peut-être plus judicieux d'utiliser \b (limite de mots).
Un exemple à cette adresse:
Pour la non-répétition ça se complique. Je vais y réfléchir.
Là ça ne cherche que les mots de 2 motifs, qui commencent par PO ou DES