TV Quiz Wortfinder

kevkev

Erfahrenes Mitglied
Hi,

Ihr kennt doch bestimmt 9Live (scheiss hoch neun)?
Da gibts doch das Spiel wo man bestimmte Wörter rausfinden muss, es sind paar Buchstaben vorhanden.

Jetzt wollte Ich ein script schreiben, das mir alle wörter durcheinander tauscht, so das alle möglichen kombinationen angezeigt werden.

Nehmen wir z.b. folgende Zahlenkette:
A U H S

Jetzt sollte das script alle möglichkeiten anzeigt.
Z.b.: H U A S, S H U A, H A U S, etc.

Wie bekomme ich das hin?

Gruß kevin
 
Was du suchst, ist eine String Permutation.
Eine gezielte Suche danach, sollte eigentlich Erfolg bringen...

Gruesse,
stanleyB
 
Hi,

ok, danke.

Ich habe das was gefunden:
echo str_shuffle($wort);

Nur wird dann leider nur einmal so etwas angezeigt. wie bekomme ich es hin das alle angezeigt werden über diese funktion?

gruß kevin
 
Errechne, wieviel Möglichkeiten es gibt.
Dann gebe das Wort in einer Schleife so oft aus, wie es Möglichkeiten gibt.... bevor du das tust, lege aber jeweils den Startwert für den Zufallsgenerator per srand() fest..als Parameter übergibst du dabei den aktuellen Zähler des Schleifendurchlaufs.
 
Hi,

Mhh, wie errechne Ich denn die Möglichkeiten?

Mit str_shuffle wird ja nur beim aufruf den string zufällig gemischt. Wenn ich das nun durch nen schleife laufen lasse, wäre es möglich das 2mal der gleiche gemischte string rauskommt, und dann würden die schleifendurchläufe nicht mehr stimmen, oder?

gruß kevin
 
Hi,

Ich hab da nun schon eine FUnktion gefunden, die das wirklich super erledigt:
PHP:
<?php

	function Permutate($strDataIn, $Length, &$PermutateCount) {
	
		for ($i = 0; $i < strlen($strDataIn); $i++) {
			$PermArray[0][$i] = substr($strDataIn, $i, 1);
			$temp[$i]         = substr($strDataIn, $i, 1);
			$temp2[0][$i]     = substr($strDataIn, $i, 1);  
		}                                 
		
		/* for ($i = 1; $i < strLen($strDataIn); $i++) { */
		for ($i = 1; $i < $Length; $i++) {
			for ($k = 0; $k < strLen($strDataIn); $k++) {
				for ($j = 0; $j < sizeof($temp2[$i - 1]); $j++) {
					$PermArray[$i][($k * sizeof($temp2[$i - 1])) + $j] = $temp[$k] . $temp2[$i - 1][$j];
					$temp2[$i][($k * sizeof($temp2[$i - 1])) + $j]     = $temp[$k] . $temp2[$i - 1][$j];
				}		
			}
		}   
		
		$k = 0;

		/* for ($i = 0; $i < strlen($strDataIn); $i++) { */

		for ($i = 0; $i < $Length; $i++) {
			$k += sizeof($PermArray[$i]);
		}
		
		$PermutateCount = $k;
		
		return $PermArray;		      

/*		for ($i = 0; $i < $Length; $i++) {
			for ($j = 0; $j < sizeof($PermArray[$i]); $j++) {
				print $PermArray[$i][$j] . "<br>";
			}	                                
			print "<br>";
		}      
*/		
	}                  
	
	$StartString = "treibhaus";
	$len         = 9;  
	
	$Return = Permutate($StartString, $len, $cnt);
	
	print "Returned <b>$cnt</b> permutations.<br><hr>";
	
	for ($i = 0; $i < $len; $i++) {
		for ($j = 0; $j < sizeof($Return[$i]); $j++) {
			print $Return[$i][$j] . "<br>";
		}	                                
		print "<br>";
	}      
?>

Jetzt könnte man sich ne deutsche Wörter-Datenbank nehmen und die Wörter abgleichen, so kommt man viel Leichter auf die Lösung.

Gruß Kevin
 
Zurück