| 
 
      
        
            | Main Menu |  
            |  |  
          |  |  
           
            | Forums |   
            |  |   
            |  |  
           
            | Programming 
                Contest |   
            |  |   
            |  |  
           
            | Documentation 
               |   
            |  |   
            |  |  
           
            | Partner 
                Sites  |   
            | 
 |   
            |  |  
           
            | Sponsors |   
            |  |   
            |  |  
 | 
        
          | 
| Code of laurent 
<?Back to results//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));
 
 ?>
 
 |  |  |