| 
 
      
        
            | Main Menu |  
            |  |  
          |  |  
           
            | Forums |   
            |  |   
            |  |  
           
            | Programming 
                Contest |   
            |  |   
            |  |  
           
            | Documentation 
               |   
            |  |   
            |  |  
           
            | Partner 
                Sites  |   
            | 
 |   
            |  |  
           
            | Sponsors |   
            |  |   
            |  |  
 | 
        
          | 
| Code of robert 
<?PHPBack to results
 /********************************************************/
 /*                                                      */
 /*                   Cardsorter                         */
 /*                                                      */
 /*     Code for the Contest of www.php-editors.com      */
 /*                                                      */
 /*  The programm solves the problem with an iterativ    */
 /*  backtracking method. Cyclic checks are prevented    */
 /*  by saving allready tried solutions.                 */
 /*  Running time is controlled by an internal check.    */
 /*                                                      */
 /*  Version: 1.0 19.3.2003                              */
 /*  Author:  Robert Schmelzer                           */
 /*  Contact: robert@schmelzer.cc                        */
 /*           www.schmelzer.cc                           */
 /*  Address: [ removed for contest ]                    */
 /*           [ removed for contest ]                    */
 /*           Austria                                    */
 /*                                                      */
 /*  The deck must be in the file deck.txt and has to    */
 /*  be in the same directory.                           */
 /*                                                      */
 /********************************************************/
 
 /* Define execution time !! */
 define("MAX_EXECUTION_TIME", 60);
 
 
 /* Build correct solution */
 function solution($len) {
 $sol = "";
 for($i=0; $i<$len/2; $i++) { $sol .= chr(65+$i); }
 for($i=0; $i<$len/2; $i++) { $sol .= chr(97+$i); }
 return $sol;
 }
 
 /* Calculate the score of a try */
 function score($str) {
 global $solution, $length;
 
 $score = 0;
 for($i=0; $i<$length; $i++) {
 if ($str{$i} == $solution{$i}) { $score ++; }
 }
 return $score;
 }
 
 /* The backtracking algorithm itself */
 function solve($input) {
 global $length, $half, $solution;
 
 if ($input == $solution) { $finished=true; }
 
 $trys = array();
 $current = array();
 
 $trys[$input] = false;
 $actions = 0;
 
 $bestSc = 0;
 $bestSol = 0;
 $startTime = time();
 $abortTime = floor(MAX_EXECUTION_TIME * 0.85);
 
 $stack = array();
 array_unshift($stack, array($input, 0));
 
 $timeCheck = 0;
 
 while(true) {
 $timeCheck ++;
 list($try, $sol) = array_pop($stack);
 $op = $sol % 3;
 $opNew = $sol *3;
 
 // flip
 if ( $op != 0) {
 $newtry = (strrev($try));
 if ($newtry == $solution) { $actions = $opNew; break; }
 if (!array_key_exists($newtry, $trys)) {
 array_unshift($stack, array($newtry, $opNew));
 if (($sc=score($newtry)) > $bestSc) {
 $bestSc = $sc;
 $bestSol = $opNew;
 }
 $trys[$newtry] = false;
 }
 }
 
 // shuffle
 $newtry = "";
 for($i=0; $i < $half; $i++) {
 $newtry .= $try{$half+$i}.$try{$i};
 }
 if ($newtry == $solution) { $actions = $opNew+1; break; }
 if (!array_key_exists($newtry, $trys)) {
 array_unshift($stack, array($newtry, $opNew + 1));
 if (($sc=score($newtry)) > $bestSc) {
 $bestSc = $sc;
 $bestSol = $opNew+1;
 }
 $trys[$newtry] = false;
 
 }
 
 // cut
 if ( $op != 2) {
 $newtry = (substr($try, $half).substr($try, 0, $half));
 if ($newtry == $solution) { $actions = $opNew+2; $finished=true; break; }
 if (!array_key_exists($newtry, $trys)) {
 array_unshift($stack, array($newtry, $opNew + 2));
 if (($sc=score($newtry)) > $bestSc) {
 $bestSc = $sc;
 $bestSol = $opNew+2;
 }
 $trys[$newtry] = false;
 }
 }
 
 if ($timeCheck > 200) {
 if ( (time() - $startTime) > $abortTime ) {
 $actions = $bestSol;
 break;
 }
 $timeCheck = 0;
 }
 
 }
 return $actions;
 }
 
 
 // START MAIN PROGRAM
 
 // read from file
 $file = file("deck.txt");
 $input = trim($file[0]);
 
 $length = strlen($input);
 $half = $length / 2;
 
 $solution = solution($length);
 
 // solve the problem
 $actions = solve($input);
 
 // output
 $i = $actions;
 $actstr="";
 $i = $i *3;
 while($i>=3) {
 $i = floor($i / 3);
 $j = $i % 3;
 if ($j == 0) { $actstr = "F".$actstr ; }
 if ($j == 1) { $actstr = "S".$actstr ; }
 if ($j == 2) { $actstr = "C".$actstr ; }
 }
 print($actstr.strlen($actstr));
 
 ?>
 
 |  |  |