Anagramm

Der Begriff Anagramm stammt aus dem griechischen.
anagraphein, auf deutsch: „umschreiben“.

Das Witzige ist aber, dass der Mensch Wörter immer noch recht gut lesen kann, wenn der erste und letzte Buchstabe gleich bleibt, wenn man erst einmal erfasst hat, in welche Richtung es geht.
Es soll sogar eine wissenschaftliche Stutie darüber geben. Irgendwie mag ich das kaum glauben, denn egal wo man sucht, - nirgends ist eine verlässliche Quelle darüber. Hier klaut wohl eher jeder den Text des Nachbarn.
Aus lauter Neugierde habe ich es nachgebaut. Erstaunlich, es funktioniert :-)

Bei unbekannten oder selten verwendeten, längeren Wörtern wird es aber schnell recht schwierig.  

Probieren Sie es selber aus!

 

Anagramm Eingabeformular

Bitte ein langes Wort oder einen Satz eingeben.

Augbabe:

sobald die Buchstabenvertauschung silbenübergreifend stattfindet, ist es auch nicht meht das Gelbe vom Ei. Ohne_Titel_1

Das ist kein Pfannenfertiger Code!
Mindestens das Formular dazu sollten Sie schon selber schreiben können.
Das Ziel ist es nur, Ihnen eine mögliche Vorgehensweise zu erläutern.


<?php



if(!isset($_POST[&#039;Texteingabe&#039;])) $_POST[&#039;Texteingabe&#039;] = &#039;&#039; ;
if(!isset($_POST[&#039;Neutext&#039;])) $_POST[&#039;Neutext&#039;] = &#039;&#039; ;

if(!isset($Neutext))$Neutext = &#039;&#039; ;


// Zuerst mal muss der Text ein bisschen bereinigt werden.
// Leerzeichen am Anfang und Ende sollen weg. "Trim" macht das.
// Ausserdem werden gewisse Zeichen auf modernen Servern automatisch mit schützende Zeichen 
// versehen. 
// Eine gute Sache, erst recht für Datenbanken, in unserem Fall aber störend.
// Der Befehl "stripslashes" entfernt die wieder.
// @version  1.1.2

$Text= trim(stripslashes($_POST[&#039;Texteingabe&#039;]));

// Im Web kann man gar nicht genug paranoid sein...
$Text= strip_tags($Text);  // "strip_tags" Entfernt HTML- und PHP-Tags aus einem String


if ($Text != &#039;&#039;) // Wenn was eingegeben wurde ....
{
    // Zerlegt die Zeichenkette, nicht nur bei Leerzeichen sondern auch bei Kommas oder Zeilenumbrüchen
    $schluesselwoerter = preg_split("/[\s,]+/", $Text);
    
    for($A = 0; $A <= count($schluesselwoerter); $A++)
        {        
            @$Textlaenge = strlen ($schluesselwoerter[$A]); // Mal sehen, wie lange der Text ist ... "strlen" sagt es uns
            @$Anfang = substr($schluesselwoerter[$A],0,1);  // Erster Buchstabe des Wortes festhalten
            
            if ($Textlaenge > 1)
                {
                    $Ende = substr($schluesselwoerter[$A],$Textlaenge - 1,1); // Letzter Buchstabe festhalten...
                }
            else $Ende = &#039;&#039;; // ... Oder gar nichst, weil das Wort zu klein ist
            
            
           // So... Wir haben nun den ersten und den letzten Buchstaben
           // Und was dazwischen ist, soll gemixt werden.
           // ------------------------------------------
                unset($ArrayWort);
                for($I = 1; $I <= $Textlaenge-2; $I++) 
                {
                  $ArrayWort[]=htmlentities(substr($schluesselwoerter[$A],$I,1)); // "htmlentities" wandelt Sonderzeichen in harmlose HTML-Zeichen um
                }
            
            // Nun mischeln wir mal kräftig durch...
            // Wo in anderen Programmiersprachen ein beachtlicher Aufwand nötig ist, nehmen wir hier einfach "shuffle"
            if (@is_array($ArrayWort) ) 
            {
               shuffle($ArrayWort);
               $new_word = $Anfang . implode(&#039;&#039;,$ArrayWort).$Ende;// Und nun setzen wir die Array wieder zu einer Zeichenkette zusammen.
            } 
            else $new_word = $Anfang .$Ende;            
            
        $Neutext .= $new_word . " ";
    }
}

?>