GENERATORE DI PERMUTAZIONI
if ($_POST) { ?>} ?>
function permuta($level,$ord) {
global $arwords,$results,$deep;
if ($level<$deep) {
$i=$level;
while ($i<=$deep) {
$order=$ord;
$swap=$order[$i];
for ($k=$i;$k>$level;$k--) $order[$k]=$order[$k-1];
$order[$level]=$swap;
permuta($level+1,$order);
$i++;
}
} else {
$ris=array();
for ($j=0;$j<=$deep;$j++) $ris[$j]=$arwords[$ord[$j]];
$results[]=$ris;
//echo "livello=".$level.": "; print_r($ris); echo "
";
}
}
$arwords=explode("\n",trim($_POST["words"]));
//print_r($arwords);
$deep=count($arwords)-1;
$order=array();
for ($i=0;$i<=$deep;$i++) $order[$i]=$i;
$results=array();
//procedura ricorsiva per permutazioni
permuta(0,$order);
if ($_POST["subset"]) {
//genero subset di parole, le disposioni di n-k
$n=$deep+1;
$k=$n-1;
$first=0;
$last=count($results)-1;
while ($k>1) {
$strins="";
for ($i=$first;$i<=$last;$i++) {
$row=$results[$i];
$ris=array();
for ($j=0;$j<=$k-1;$j++) $ris[]=$results[$i][$j];
if (implode("",$ris)!=$strins) { $results[]=$ris; $strins=implode("",$ris); }
}
$first=$last+1;
$last=count($results)-1;
$k-=1;
}
}
?>