Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /* Hecho por Martín Durán - www.maduranma.com */
- echo "Buscando soluciones...\n";
- $intentos = 0;
- while(true)
- {
- // Todos los números a 0 (para tener algo, si no ya se borrará)
- for($d = 1; $d <= 100; $d++)
- $r[$d] = 0;
- // ¿Dónde ponemos el 1?
- $intentos++;
- $rs = rand(1,100);
- $r[$rs] = 1;
- $l = $rs; // Definimos que la última posición es dónde está el uno, hasta un futuro muy cercano
- $can = true; // Para que el while continue
- while($can)
- {
- // Obtenemos el número de posición horizontal
- if(strlen($l) > 1)
- $h = (substr($l, -1) == 0) ? 10 : substr($l, -1);
- else
- $h = $l;
- // Obtenemos el número según el vertical
- if(strlen($l) > 1)
- if($l == 100)
- $v = 10;
- else
- $v = ($h == 10) ? substr($l, 0, 1) : substr($l, 0, 1) + 1;
- else
- $v = 1;
- // Ponemos que todos los valores del array $m sean true, para comprobarlos luego
- for($c = 1; $c <= 8; $c++)
- $m[$c] = 1;
- // --- Movimientos horizontales ---
- if($h == 8 || $h == 9 || $h == 10 || (($l + 3 > 100) ? true : (($r[$l + 3] != 0) ? true : false)))
- $m[1] = 0;
- if($h == 1 || $h == 2 || $h == 3 || (($l - 3 < 1) ? true : (($r[$l - 3] != 0) ? true : false)))
- $m[5] = 0;
- // --- Movimientos verticales ---
- if($v == 8 || $v == 9 || $v == 10 || (($l + 30 > 100) ? true : (($r[$l + 30] != 0) ? true : false)))
- $m[3] = 0;
- if($v == 1 || $v == 2 || $v == 3 || (($l - 30 < 1) ? true : (($r[$l - 30] != 0) ? true : false)))
- $m[7] = 0;
- // --- Movimiento arriba derecha ---
- if($h == 9 || $h == 10 || $v == 1 || $v == 2 || (($l - 18 < 1) ? true : (($r[$l - 18] != 0) ? true : false)))
- $m[8] = 0;
- // --- Movimiento arriba izquierda ---
- if($h == 1 || $h == 2 || $v == 1 || $v == 2 || (($l - 22 < 1) ? true : (($r[$l - 22] != 0) ? true : false)))
- $m[6] = 0;
- // --- Movimiento abajo derecha ---
- if($h == 9 || $h == 10 || $v == 9 || $v == 10 || (($l + 22 > 100) ? true : (($r[$l + 22] != 0) ? true : false)))
- $m[2] = 0;
- // --- Movimiento abajo izquierda ---
- if($h == 1 || $h == 2 || $v == 9 || $v == 10 || (($l + 18 > 100) ? true : (($r[$l + 18] != 0) ? true : false)))
- $m[4] = 0;
- $cm = null;
- $cm = array();
- foreach($m as $ia => $ib)
- if($ib == 1)
- $cm = array_merge($cm, array($ia));
- // Comprobamos que han salido movimientos
- if(($cm != null) ? count($cm) >= 1 : false)
- $fm = array_rand($cm); // Movimiento elegido
- else
- $can = false; // Aquí paramos
- if($can)
- foreach($cm as $ba => $bb)
- if($ba == $fm)
- $fm = $bb;
- // Nos movemos (si podemos)
- if($can)
- switch($fm)
- {
- case 1:
- $nl = ($l) + 3;
- $r[$nl] = $r[$l] + 1;
- $l = $nl;
- break;
- case 2:
- $nl = ($l) + 22;
- $r[$nl] = $r[$l] + 1;
- $l = $nl;
- break;
- case 3:
- $nl = ($l) + 30;
- $r[$nl] = $r[$l] + 1;
- $l = $nl;
- break;
- case 4:
- $nl = ($l) + 18;
- $r[$nl] = $r[$l] + 1;
- $l = $nl;
- break;
- case 5:
- $nl = ($l) - 3;
- $r[$nl] = $r[$l] + 1;
- $l = $nl;
- break;
- case 6:
- $nl = ($l) - 22;
- $r[$nl] = $r[$l] + 1;
- $l = $nl;
- break;
- case 7:
- $nl = ($l) - 30;
- $r[$nl] = $r[$l] + 1;
- $l = $nl;
- break;
- case 8:
- $nl = ($l) - 18;
- $r[$nl] = $r[$l] + 1;
- $l = $nl;
- break;
- default:
- echo '<script>alert(\'error\');</script>';
- $can = false;
- break;
- }
- }
- if($r[$l] == 100)
- {
- $nombre_fichero = 'soluciones/ultima.txt';
- $gestor = fopen($nombre_fichero, 'r');
- $contenido = fread($gestor, 11);
- fclose($gestor);
- $contenido = $contenido + 1;
- $fp = fopen('soluciones/ultima.txt', 'w');
- fwrite($fp, $contenido);
- fclose($fp);
- $d = '';
- $d .= '<!DOCTYPE html>
- <head>
- <title>Solución ' . $contenido . ' del circuito Hamiltoniano - Ensaimada numérica</title>
- </head>
- <body style="margin:3 0;">
- <center>
- <table border="1" style="font-size: 57pt;text-align: center; border: 2px solid black;" cellpadding="2" cellspacing="0">';
- for($a = 1; $a <= 10; $a++)
- {
- $d .= "\n\t\t\t\t<tr>";
- for($b = 1; $b <= 10; $b++)
- {
- $d .= "\n\t\t\t\t\t<td width=\"90\" height=\"75\" style=\"height: 89px; text-align: center; border: 2px solid black;\" >";
- $d .= ($r[(($a-1)*10)+$b] == 0) ? "\n\t\t\t\t\t\t " : ("\n\t\t\t\t\t\t" . $r[(($a-1)*10)+$b]);
- $d .= "\n\t\t\t\t\t</td>";
- }
- $d .= "\n\t\t\t\t</tr>";
- }
- $d .= "\n\t\t\t</table>";
- echo "Sol. $contenido encontrada y guardada. Intentos: $intentos";
- $intentos = 0;
- echo "\nBuscando soluciones...\n";
- $fp = fopen('soluciones/' . $contenido . '.html', 'w');
- fwrite($fp, $d);
- fclose($fp);
- }
- }
- ?>
Add Comment
Please, Sign In to add comment