Convierte palabras y frases a anagramas

Anagrama (del griego. Ανα- "pere" y γράμμα - "letra") es un dispositivo literario que consiste en la permutación de letras o sonidos de una determinada palabra (o frase), que como resultado da otra palabra o frase
Los anagramas se utilizan para cifrar la respuesta a la pregunta del cuestionario (charadas, crucigramas, etc.).

Traigo a su atención dos funciones que implementan el algoritmo para obtener anagramas de palabras y frases individuales.

El trabajo de las funciones "en combate", como dicen, se puede ver aquí .

Para seleccionar el anagrama más "mixto", se utiliza la función Levenshtein.
Para palabras de tres letras o menos de longitud, no se compila un anagrama, no tiene sentido.
Para números, lo mismo.
Codificación - UTF-8.

Como valor del único parámetro de la función GetAnagramm, le damos una palabra o frase, y en la salida de GetWordAnagramm obtenemos un anagrama terminado en el que todas las letras están encerradas en elementos HTML SPAN (para darle al anagrama una apariencia presentable con 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; } 

Si agregamos estilo CSS a la clase annagramm SPAN en la página de salida:

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

entonces obtenemos tal "belleza":

imagen

Respuesta correcta: Agafon Nikitin .

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


All Articles