Convertir des mots et des phrases en anagramme

Anagramme (du grec. Ανα- "pere" et γράμμα - "lettre") est un dispositif littéraire consistant en la permutation des lettres ou des sons d'un certain mot (ou phrase), qui en conséquence donne un autre mot ou expression
Les anagrammes sont utilisés pour crypter la réponse à la question du quiz (charades, mots croisés, etc.).

J'attire votre attention sur deux fonctions qui mettent en œuvre l'algorithme pour obtenir des anagrammes à partir de mots et de phrases individuels.

Le travail des fonctions «au combat», comme on dit, peut être vu ici .

Pour sélectionner l'anagramme le plus «mixte», la fonction Levenshtein est utilisée.
Pour les mots de trois lettres ou moins, une anagramme n'est pas compilée - cela n'a aucun sens.
Pour les chiffres - les mêmes.
Encodage - UTF-8.

En tant que valeur du seul paramètre de la fonction GetAnagramm, nous donnons un mot ou une phrase, et à la sortie de GetWordAnagramm nous obtenons une anagramme prête à l'emploi dans laquelle toutes les lettres sont enfermées dans des éléments HTML SPAN (afin de donner à l'anagramme une apparence présentable avec les styles CSS).

//     function GetAnagramm($anagramm) { $out_anagramm = ""; $len_anagramm = mb_strlen($anagramm,'UTF-8'); $int_anagramm = (int)$anagramm; if ($len_anagramm > 3 && $int_anagramm == 0) { mb_regex_encoding('UTF-8'); mb_internal_encoding('UTF-8'); $wordslist = preg_split('[-| ]', $anagramm); $out_anagramm = ""; $len_anagramm = 0; $i = 0; foreach ( $wordslist as $value) { $len_anagramm = $len_anagramm + mb_strlen($value,'UTF-8'); $simbol = mb_substr($anagramm, $len_anagramm+$i, 1, 'UTF-8'); $span = ""; if ($simbol <> "") $span = "<span class=\"annagramm\">".$simbol."</span> "; if (mb_strlen($value,'UTF-8') == 1) { $out_anagramm .= "<span class=\"annagramm\">".$value."</span> ".$span; }else{ $out_anagramm .= GetWordAnagramm($value).$span; } $i++; } } return $out_anagramm; } //    function GetWordAnagramm($anagramm) { $array_an = preg_split('//u',$anagramm,-1,PREG_SPLIT_NO_EMPTY); $j = 0; $maxLeven = 0; while ($j < 10) { srand((float)microtime() * 1000000); shuffle($array_an); $an = ""; $ot = ""; $i = 0; foreach ( $array_an as $value ) { $an .= $value." "; $ot .= mb_substr ($anagramm, $i, 1, 'UTF-8')." "; $i++; } $leven = levenshtein ($an,$ot); $j++; if ($leven > $maxLeven) { $maxLeven = $leven; $best_array_an = $array_an; } } $an_div = ""; foreach ( $best_array_an as $value ) { $an_div .= "<span class=\"annagramm\">".$value."</span> "; } return $an_div; } 

Si nous ajoutons un style CSS à la classe SPAN annagramm sur la page de sortie:

 span.annagramm { background-color: #ffffff; border-style: outset; border-width: 1px; border-color: #cccccc; -webkit-border-radius: 4px; -moz-border-radius:4px; border-radius: 4px; padding: 4px; padding-left: 6px; padding-right: 6px; margin-left: 1px; margin-right: 1px; margin-top: 6px; margin-bottom: 6px; font-weight: bold; color: #4f4ba8; font-size: 11pt; text-transform: uppercase; box-shadow: 0 1px 4px rgba(0, 0, 0, .3), -23px 0 20px -23px rgba(0, 0, 0, .8), 23px 0 20px -23px rgba(0, 0, 0, .8), 0 0 40px rgba(0, 0, 0, .1) inset; } 

alors nous obtenons une telle «beauté»:

image

Bonne réponse: Agafon Nikitin .

Source: https://habr.com/ru/post/fr425975/


All Articles