Converta palavras e frases em anagrama

Anagrama (do grego. Ανα- “pere” e γράμμα - “letra”) é um dispositivo literário que consiste na permutação de letras ou sons de uma determinada palavra (ou frase) que, como resultado, fornece outra palavra ou frase
Anagramas são usados ​​para criptografar a resposta à pergunta do questionário (charadas, palavras cruzadas etc.).

Chamo a atenção duas funções que implementam o algoritmo para obter anagramas a partir de palavras e frases individuais.

O trabalho das funções "em combate", como se costuma dizer, pode ser visto aqui .

Para selecionar o anagrama mais "misto", a função Levenshtein é usada.
Para palavras com três letras ou menos, um anagrama não é compilado - não faz sentido.
Para números - o mesmo.
Codificação - UTF-8.

Como o valor do único parâmetro da função GetAnagramm, fornecemos uma palavra ou frase e, na saída de GetWordAnagramm, obtemos um anagrama finalizado no qual todas as letras são colocadas em elementos HTML SPAN (para dar ao anagrama uma aparência apresentável com estilos 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; } 

Se adicionarmos o estilo CSS à classe annagramm SPAN na página de saída:

 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; } 

então temos uma "beleza":

imagem

Resposta correta: Agafon Nikitin .

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


All Articles