Main Menu |
|
|
Forums |
|
|
Programming
Contest |
|
|
Documentation
|
|
|
Partner
Sites |
|
|
Sponsors |
|
|
|
Code of laurent
<? //name: Laurent Vincelette (lvincelette@videotron.ca) //date: april 2003 //for the contest of php-editors.com //////////////////////////////////////////////////// function ordre ($quest){ $lng = strlen($quest)/2; $strD = ""; $strF = ""; for ($i=1;$i<=$lng;$i++){ $strD .= chr($i+64); $strF .= chr($i+96); } return ($strD . $strF); }
function cut ($str){ $lng = strlen($str)/2; return (substr($str,0-$lng) . substr($str,0,$lng)); }
function flip($str){ $lng = strlen($str); $strTmp = ""; for ($i=0;$i<$lng;$i++){ $strTmp = $str[$i] . $strTmp; } return ($strTmp); }
function shuff($str){ $lng = strlen($str)/2; $strD = substr($str,0,$lng); $strF = substr($str,0-$lng); $strTmp = ""; for ($i=0;$i<$lng;$i++){ $strTmp .= $strF[$i] . $strD[$i]; } return ($strTmp); } function shuffI($str){ $lng = strlen($str); $strD = ""; $strF = ""; for ($i=0;$i<$lng;$i+=2){ $strF .= $str[$i]; $strD .= $str[$i+1]; } return ($strD . $strF); }
function explorer ($n1,$n2,$repf,$rep1,$rep2,$repA){ $cpt=1; for ($i=1;$i<=$n1;$i++){ //create all new S $rep1[$cpt][1] = shuff($rep2[$i][1]); $rep1[$cpt][2] = $rep2[$i][2] . "S"; if ($repA[$rep1[$cpt][1]][3]) { $repf[1][2]=$rep1[$cpt][2] . $repA[$rep1[$cpt][1]][3]; return(false); } else { $repA[$rep1[$cpt][1]][2]=$rep1[$cpt][2]; } $cpt++; }
for ($i=1;$i<=$n2;$i++){ //create all new C $rep1[$cpt][1] = cut($rep2[$i][1]); $rep1[$cpt][2] = $rep2[$i][2] . "C"; if ($repA[$rep1[$cpt][1]][3]) { $repf[1][2]=$rep1[$cpt][2] . $repA[$rep1[$cpt][1]][3]; return(false); } else { $repA[$rep1[$cpt][1]][2]=$rep1[$cpt][2]; } $cpt++; } return (true); } function explorerI ($n1,$n2,$repf,$rep1,$rep2,$repA){ $cpt=1; for ($i=1;$i<=$n1;$i++){ //create all new S $rep1[$cpt][1] = shuffI($rep2[$i][1]); $rep1[$cpt][2] = "S" . $rep2[$i][2]; if ($repA[$rep1[$cpt][1]][2]) { $repf[1][2]= $repA[$rep1[$cpt][1]][2] . $rep1[$cpt][2]; return(false); } else { $repA[$rep1[$cpt][1]][3]=$rep1[$cpt][2]; } $cpt++; }
for ($i=1;$i<=$n2;$i++){ //create all new C $rep1[$cpt][1] = cut($rep2[$i][1]); $rep1[$cpt][2] = "C" . $rep2[$i][2]; if ($repA[$rep1[$cpt][1]][2]) { $repf[1][2]=$repA[$rep1[$cpt][1]][2] . $rep1[$cpt][2]; return(false); } else { $repA[$rep1[$cpt][1]][3]=$rep1[$cpt][2]; } $cpt++; } return (true); } function reponse ($quest){ $rep1[3][2]; $rep2[1]; $repf[1][1]; $nb = 0; $repf[1][1]=ordre($quest); if ($quest==$repf[1][1]){ //already good return ($nb); }else{ $nb = 1; // niveau 1 normal ////////////////// $rep2[1][1] = shuff($quest); $rep2[1][2] = "S"; $repA[$rep2[1][1]][2] = "S"; if ($repf[1][1]==$rep2[1][1]) return ("S"); $rep2[2][1] = flip($quest); $rep2[2][2] = "F"; $repA[$rep2[2][1]][2] = "F"; if ($repf[1][1]==$rep2[2][1]) return ("F"); $rep2[3][1] = cut($quest); $rep2[3][2] = "C"; $repA[$rep2[3][1]][2] = "C"; if ($repf[1][1]==$rep2[3][1]) return ("C"); // niveau 1 inverse /////////////////// $repI2[1][1] = shuffI($repf[1][1]); $repI2[1][2] = "S";
if ($repA[$repI2[1][1]][2]) { return ("I (f)".$repA[$repI2[1][1]][2] . "S");} else { $repA[$repI2[1][1]][3] ="S";} $repI2[2][1] = cut($repf[1][1]); $repI2[2][2] = "C"; if ($repA[$repI2[2][1]][2]) { return ($repA[$repI2[2][1]][2] . "C");} else { $repA[$repI2[2][1]][3] ="C";} $nb=2; $cpt=1; //niveau 2 normal ///////////////////// for ($i=1;$i<=3;$i++){ $rep1[$cpt][1] = shuff($rep2[$i][1]); $rep1[$cpt][2] = $rep2[$i][2] . "S"; if ($repA[$rep1[$cpt][1]][3]) { return ($rep1[$cpt][2] . $repA[$rep1[$cpt][1]][3]);} else {$repA[$rep1[$cpt][1]][2]=$rep1[$cpt][2];} $cpt++; } for ($i=1;$i<=2;$i++){ $rep1[$cpt][1] = cut($rep2[$i][1]); $rep1[$cpt][2] = $rep2[$i][2] . "C"; if ($repA[$rep1[$cpt][1]][3]) { return ($rep1[$cpt][2] . $repA[$rep1[$cpt][1]][3]);} else { $repA[$rep1[$cpt][1]][2]=$rep1[$cpt][2];} $cpt++; } //niveau 2 inverse ////////////////// $repI1[1][1]=shuffI($repI2[1][1]); $repI1[1][2]="S".$repI2[1][2]; if ($repA[$repI1[1][1]][2]) { return ($repA[$repI1[1][1]][2] . $repI1[1][2]);} else { $repA[$repI1[1][1]][3]=$repI1[1][2];} $repI1[2][1]=shuffI($repI2[2][1]); $repI1[2][2]="S".$repI2[2][2]; if ($repA[$repI1[2][1]][2]) { return ($repA[$repI1[2][1]][2] . $repI1[2][2]);} else { $repA[$repI1[2][1]][3]=$repI1[2][2];} $repI1[3][1]=cut($repI2[1][1]); $repI1[3][2]="C".$repI2[1][2]; if ($repA[$repI1[3][1]][2]) { return ($repA[$repI1[3][1]][2] . $repI1[3][2]);} else { $repA[$repI1[3][1]][3]=$repI1[3][2];} //niveau 3 inverse //Pour le mettre au meme niveau de n1 et n2 que le sence normal $repI2=&$repI1; $cpt=1; for ($i=1;$i<=3;$i++){ $repI1[$cpt][1]=shuffI($repI2[$i][1]); $repI1[$cpt][2]="S".$repI2[$i][2]; if ($repA[$repI1[$cpt][1]][2]) { return ($repA[$repI1[$cpt][1]][2] . $repI1[$cpt][2]);} else { $repA[$repI1[$cpt][1]][3]=$repI1[$cpt][2];} $cpt++; } for ($i=1;$i<=2;$i++){ $repI1[$cpt][1]=cut($repI2[$i][1]); $repI1[$cpt][2]="C".$repI2[$i][2]; if ($repA[$repI1[$cpt][1]][2]) { return ($repA[$repI1[$cpt][1]][2] . $repI1[$cpt][2]);} else { $repA[$repI1[$cpt][1]][3]=$repI1[$cpt][2];} $cpt++; }
$n2=3; $n1=5; $nb=3; $pnt=false; $continu=1; while ($continu){ $n = $n1 + $n2; $rep2=&$rep1; $repI2=&$repI1; $rep1[$n][2]; $repI1[$n][2]; $continu = explorer ($n1,$n2,$repf,$rep1,$rep2,$repA); // niveau n normal if ($continu){ $continu = explorerI($n1,$n2,$repf,$repI1,$repI2,$repA); //niveau n Inverse } $nb++; $n2 = $n1; $n1 = $n; } return ($repf[1][2]); } } function getmicrotime() { list($usec, $sec) = explode(" ",microtime()); return ((float)$usec + (float)$sec); } function point($strR,$strQ){ $len = strlen($strR); $point = 0; for ($i=0;$i<$len;$i++){ $point += ($strR[$i]==$strQ[$i])? 1 : 0; } return ($point); } ini_set("memory_limit", "1024M"); //$temp1=getmicrotime(); $fp = fopen("deck.txt", "r"); $cartes=fread($fp, filesize ("deck.txt")-1); $resultat = reponse($cartes); print ( $resultat . strlen($resultat) );
fclose("deck.txt"); //$temp2=getmicrotime(); //print ("<br>time" . ($temp2-$temp1));
?>
Back to results
|
|
|