Ir al contenido principal

Como adivinar una palabra con PHP haciendo permutaciones

Hola bienvenido a un nuevo post, hace unos días un primo compartió una publicación de un concurso de TV de hace algunos años donde te daban pistas para adivinar una palabra, la imagen es como la siguiente :

Para llegar al resultado es haciendo permutaciones con las letras hasta lograr la palabra indicada. Que en este caso era Adriana.

Para poder entender el concepto de permutación, lo explicare como yo lo entiendo que es poder acomodar una secuencia de caracteres o de números en todas los posibles ordenes posibles sin que se repitan, por ejemplo este caso, tenemos una frase que dice "ADAN IRA" tiene 7 letras esto quiere decir que al calcular las permutacione utilizamos la formula de factorial es decir 7! o en Excel Facotrial(7) o lo mismo es 7x6x5x4x3x2x1  lo que nos da como resultado 5040 permutaciones posibles 


En Excel lo que hice para poder realizar de manera manual las permutaciones, fue utilizando la función de concatenar, ordenando las letras como se ve en la imagén, como imaginaran hacer esto de manera manual es mucho tiempo

Bueno para tratar de entender mejor el tema de permutaciones, hice otras imágenes que nos permiten ver de otra forma como hacer el ordenamiento

Otra forma de verlo es parecido a un grafo, donde los caminos son involucrar todos las letras 

Para verlo con otro ejemplo más numérico, tome 4 letras al obtener el factorial es 24, viendo este ejemplo de forma gráfica con las posibles combinaciones es la siguiente imagen

Permutación con la primer letra A, nos da 6 posibles permutaciones


Por lo que podemos deducir es que si empezamos con otra letra la permutación, en cada caso nos dará 6 resultados más y al multiplicar 4x3x2x1 = 24 soluciones es decir el factorial de 4! 

Ahora veamos como realizar la programación de este proceso y poder obtener la lista de permutaciones de una cadena ingresada.




Como hacer el programa en PHP

Primero la página WEB
<html>
<head>
<title>Permutaciones en PHP </title>
</head>
<body>
<p> Esta página es un ejemplo de como generar todas las posibles </p>
<p> Permutaciones de una lista de letras o números </p>
<img src="Diagrama_permutacion_lineal.PNG" alt="Permutaciones" height="300" width="300">
<p>Para poder generar las permutaciones, debes ingresar la lista de palabras, letras o números
<p>Separados por comas por ejemplo a,d,a,n,i,r,a
<form action="permutacion.php" method="GET">
 <div align="center">
   <input type="text" id="campo1" name="campo1"/>
   <input type="submit" value="Permutar"/>
 </div>  
</form>

<a href="https://www.programacionparatodos.com">www.programacionparatodos.com</a>
</body>

</html>

Pagina PHP


Luego el programa, estuve pensando como hacerlo de manera de utilizar solo funciones de PHP y bueno si funciona, pero con pocas combinaciones, hay más opciones de hacerlo utilizando recursividad.
Revise solo algunas  y las probé con la cadena de este ejemplo a,d,a,n,i,r,a y siempre estaba 5 o 6 veces con alguna de esas funciones, aclaro no probé todas las funciones ustedes pueden validarlas también.

Pero mi programa es el siguiente, utilice las funciones :

  • str_shuffle que hacen la permutación de una cadena  https://www.php.net/str_shuffle, por ejemplo esta función podría funcionar para generar un password. 

La lógica de mi programa es que busca todas las combinaciones en base a la función str_shuffle y si no la encuentra lo guarda en un arreglo e incrementa la variable.

Para ser sincera no es la forma más rápida de resolver este problema porque consume tiempo de ejecución, pero si me mostró las permutaciones correctas. 

<?php
 $entrada = $_GET["campo1"];
 $lista = explode (",", $entrada);
 $entrada = str_replace(",","",$entrada);
 echo "Dato de entrada " . $entrada;
 echo "<p>";
 $largo = count($lista);
 function factorial($var)  
{
   if($var==1)
      return 1;
   else
      return $var * factorial($var-1);
 echo "Permutaciones posibles " ;
 $tot_per = factorial($largo) ;
 echo $tot_per;
 echo "<p>";
 $result = array(); 
 $j = 0;
while ($j < $tot_per ) :  
  $temp = str_shuffle($entrada);
  if ($j == 0):
array_push($result, $temp);
$j = $j + 1 ;
echo $j . " " . $temp .  "<p>"; 
  endif;
  if ($j > 0):
      $key = in_array ($temp,$result, true) ;
      if ($key == false):
       array_push($result, $temp);
   $j = $j + 1 ;
   echo $j . " " . $temp . "<p>"; 
  endif;
  endif;
endwhile;
?>


Corriendo el programa con otra cadena 

La página para que puedan probarla es  https://ejemploprogramacionparatodos.000webhostapp.com/Pagina_permutaciones.html


Pueden hacer las permutaciones que requieran, crear password más seguros pensando en las palabras que utilizan normalmente pueden crear una nueva, o si les gusta como yo jugar melate pueden sacar números y armar nuevas combinaciones (solo por jugar no quiere decir que sea un calculo de juego y estadística)

No olvides compartirnos y seguirnos en este blog o en Facebook.

Comentarios

Entradas más populares de este blog

Ejemplo Macro en Word

Hola: ¿Sabían que no solo en Excel pueden hacer Macros?  ¡¡¡También en Outlook, Word, Power Point,Access  es posible hacer Macros!!!  ☺️ Ya que Word, Excel, Power Point,Access son de familia Microsoft y Visual Basic también es que podemos programar nuestras macros en esta paquetería. Como hemos visto antes, para poder programar nuestras macros, necesitamos primero configurar la Barra de tareas de Developer o Desarrollador Seleccionan el Menu File>Options>Customize Ribbon o en Español Archivo>Opciones>barra de tareas Despues la parte de seguridad de las macros Menu File>Options>Trus Center o Archivo>Opciones>Centro de Seguridad y marcamos como se ve en la imagen, la cuarta opción y el combo Ejemplo Vamos hacer un ejemplo donde, tengamos que generar varios diplomas de fin de curso, pero con una lista de Nombres , entonces vamos a crear un nuevo archivo en Word y le vamos a guardar como tipo Macro  Tenemos una plantill

Graficar funciones en Python con dataframes

Bienvenidos a un nuevo post, en esta semana, en esta ocasión les quiero platicar acerca de una librería en Python que se llama  matplotlib  que nos sirve para gráfica funciones de  matemáticas. Habitualmente en Python existen muchas librerías, lo que hay que hacer es primero investigar si ya existe alguna que nos ayude y entenderla antes de inventar el hilo negro, en mi caso encontré la librería  Matplotlib Para instalar deben utilizar el comando PIP en 2.7 Instalando en Python 3.7 Si tienen Python 2.7 deben realizar la ejecución de estos 2 comandos desde consola python -m pip install -U pip python -m pip install -U matplotlib Aunque lo más recomendable es utilizar la versión 3.7 o superior de Python. Programa para graficar en Python import matplotlib.pyplot as plt import numpy as np import math as mt def move_spines():     """Esta funcion divide pone al eje y en el valor      0 de x para dividir claramente los valores positivos y     negativos.&quo

Macro de Excel para abrir archivo csv

Hay veces que quieres abrir un archivo de Excel pero está separado por comas, punto y coma o por un pipe. Hay formas de hacerlos desde Excel. Les quiero compartir algunas opciones de como hacerlo y espero que les sean de utilidad. 1.Es abrir el archivo en Excel y utilizar la función de separar por columnas y seleccionar el delimitador, por ejemplo ";" 2. Es colocar "sep=;" en el primer renglón del archivo que quieres abrir y guardar en formato CSV y abrirlo en Excel y te lo abrirá separado en columnas. 3. Otra forma es con una macro, esté en mi gusto es la que más me funciona porque si hay alguna coma en la descripción o en alguna columna, si lo abres desde Excel te va a desacomodar las columnas.  Este botón te abrirá un pantalla para abrir el archivo que quieres separar y te lo abrirá en una hoja de excel ya separado. El código de la macro es el siguiente  Private Sub CommandButton1_Click() Dim sht As Worksheet Dim fnd As Variant Dim rplc As Variant Dim