function generarPalabrasN($n = 0, $k = 0) { $palabras = array(); $palabras_validas = array(); $cant_palabras = 1; $simbolos = $this->automata->getSimbolos(); for ($i = $k; $i > 0; $i--) { $salida = ''; ob_start(); combina($simbolos, '', $i, 0); $salida = ob_get_clean(); $salida = explode("\n", $salida); array_pop($salida); $palabras = array_merge($palabras, $salida); } $palabras[] = ''; // evaluar palabras foreach ($palabras as $palabra) { if ($this->evaluarPalabra($palabra)) { $palabras_validas[] = $palabra; $cant_palabras++; } if ($cant_palabras > $n) { break; } } return $palabras_validas; }
for ($i = 1; $i < $length; $i++) { for ($c = 0; $c < count($chars); $c++) { $m = $i - 1; for ($t = 0; $t < count($temp[$m]); $t++) { $value = $chars[$c] . $temp[$m][$t]; $p = $c * count($temp[$m]) + $t; $combinations[$p] = $value; $temp[$i][$p] = $value; } } } return $combinations; } // $ será o valor inicial $d = 0; // $a será o valor final $a = 9; // $c será o número de casas retornadas $c = 4; $var = combina(range($d, $a), $c); foreach ($var as $combina) { echo $combina . "<br>"; } ?> </div> </section> <?php include 'footer.php';
/** * Genera combinatoria para simbolos de manera recursiva * * @param array $simbolos arreglo con simbolos de entrada * @param string $combinacion la cadena correspondiente a la combinación * @param integer $k largo de la combinación * @param integer $j contador */ function combina($simbolos, $combinacion, $k, $j) { $total_simbolos = count($simbolos); if (strlen($combinacion) == $k) { echo $combinacion . "\n"; } if ($j < $k) { ++$j; for ($i = 0; $i < $total_simbolos; $i++) { combina($simbolos, $combinacion . $simbolos[$i], $k, $j); } } }