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])? 0;
  }
  return (
$point);
}
ini_set("memory_limit""1024M");
//$temp1=getmicrotime();
$fp fopen("deck.txt""r");
$cartes=fread($fpfilesize ("deck.txt")-1);
$resultat =  reponse($cartes);
print (  
$resultat strlen($resultat) );

fclose("deck.txt");
//$temp2=getmicrotime();
//print ("<br>time" . ($temp2-$temp1));

?>


Back to results


© Copyright 2003-2023 www.php-editors.com. The ultimate PHP Editor and PHP IDE site.