アナグラム(ギリシャ語から。Ανα-「ペレ」とγράμμα-「レター」)は、特定の単語(またはフレーズ)の文字または音の順列で構成される文学的なデバイスであり、結果として別の単語またはフレーズを与えますアナグラムは、クイズの質問に対する答え(暗号、クロスワードなど)を暗号化するために使用されます。
個々の単語やフレーズからアナグラムを取得するためのアルゴリズムを実装する2つの機能に注目してください。
彼らが言うように、「戦闘中」の機能の仕事はここで見ることができます 。
最も「混合された」アナグラムを選択するには、レーベンシュタイン関数が使用されます。
長さが3文字以下の単語の場合、アナグラムはコンパイルされません-意味がありません。
数字の場合-同じ。
エンコーディング-UTF-8。
GetAnagramm関数の唯一のパラメーターの値として、単語またはフレーズを指定し、GetWordAnagrammの出力で、すべての文字がHTML SPAN要素で囲まれた完成したアナグラムを取得します(アナグラムに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; }
出力ページのannagramm SPANクラスにCSSスタイルを追加する場合:
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; }
このような「美しさ」が得られます。
正解: Agafon Nikitin 。