Foros del Web » Programando para Internet » PHP »

Desafio

Estas en el tema de Desafio en el foro de PHP en Foros del Web. Hola amigos del foro, estaba pensando en que seria bueno hacer un desafio, y de esta forma utilizar nuestro conocimiento en programación, aprender y compartir ...
  #1 (permalink)  
Antiguo 16/05/2013, 19:00
Avatar de gringofer  
Fecha de Ingreso: agosto-2010
Ubicación: Córdoba, Argentina
Mensajes: 338
Antigüedad: 14 años, 3 meses
Puntos: 22
Desafio

Hola amigos del foro, estaba pensando en que seria bueno hacer un desafio, y de esta forma utilizar nuestro conocimiento en programación, aprender y compartir experiencias.

El desafió se me acaba de ocurrir, y todavia no tengo la solucion. trataria de lo siguiente:

Imprimir un listado en pantalla, de todas las posibles combinaciones de letras del teclado, con un largo de 3 caracteres. Por ejemplo: pfd, sde, erc, etc. Y asi... con todas las posibles combinaciones (dejamos afuera la letra ñ para el desafio)

Espero que les guste la propuesta, saludos!

PD: El que lo resuelva debe publicar el codigo para que todos lo puedan ver!
__________________
Si quieres cambio verdadero, pues camina distinto...
  #2 (permalink)  
Antiguo 16/05/2013, 19:05
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Desafio

Espero equivocarme, pero no es la primera vez que alguien sugiere un desafío/reto de este tipo y, al final, resulta que se trata de una tarea escolar.

Ojalá no sea tu caso y mi pesimismo sea superado por tu buena intención.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 16/05/2013, 19:17
Avatar de rocha7778  
Fecha de Ingreso: mayo-2013
Ubicación: Cartagena Colombia
Mensajes: 79
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Desafio

permutacion o combinacion?
  #4 (permalink)  
Antiguo 16/05/2013, 19:18
Avatar de gringofer  
Fecha de Ingreso: agosto-2010
Ubicación: Córdoba, Argentina
Mensajes: 338
Antigüedad: 14 años, 3 meses
Puntos: 22
Respuesta: Desafio

@Triby, quedate tranquilo, no voy a la escula, voy a la universidad y no me enseñan php, vemos otros lenguajes, y en este momento no estoy cursando ninguna materia de programación. Saludos!
__________________
Si quieres cambio verdadero, pues camina distinto...
  #5 (permalink)  
Antiguo 16/05/2013, 19:19
Avatar de gringofer  
Fecha de Ingreso: agosto-2010
Ubicación: Córdoba, Argentina
Mensajes: 338
Antigüedad: 14 años, 3 meses
Puntos: 22
Respuesta: Desafio

Cita:
Iniciado por rocha7778 Ver Mensaje
permutacion o combinacion?
combinación!, gracias por el interes.
__________________
Si quieres cambio verdadero, pues camina distinto...
  #6 (permalink)  
Antiguo 19/05/2013, 19:03
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: Desafio

Hola,

El programa podría ser algo así:

Código PHP:
$dict 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$l strlen($dict) - 1;
for (
$i 0$i <= $l$i++) {
  for (
$j $i 1$j <= $l$j++) {
    for (
$k $j 1$k <= $l$k++) {
      echo 
$dict[$i], $dict[$j], $dict[$k], "\n";
    }
  }

Generando las posibles combinaciones de tres dentro de lista de caracteres.

Saludos,

ps:

Buscando en el foro ya hay varias implementaciones inclusive en otros lenguajes.
  #7 (permalink)  
Antiguo 19/05/2013, 19:26
Avatar de gringofer  
Fecha de Ingreso: agosto-2010
Ubicación: Córdoba, Argentina
Mensajes: 338
Antigüedad: 14 años, 3 meses
Puntos: 22
Respuesta: Desafio

Cita:
Iniciado por HackmanC Ver Mensaje
Hola,

El programa podría ser algo así:

Código PHP:
$dict 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$l strlen($dict) - 1;
for (
$i 0$i <= $l$i++) {
  for (
$j $i 1$j <= $l$j++) {
    for (
$k $j 1$k <= $l$k++) {
      echo 
$dict[$i], $dict[$j], $dict[$k], "\n";
    }
  }

Generando las posibles combinaciones de tres dentro de lista de caracteres.

Saludos,

ps:

Buscando en el foro ya hay varias implementaciones inclusive en otros lenguajes.

Muchas gracias por exponer tu resolucion, a lo mejor me explique mal, seria todas las posibles convinaciones de caracteres del teclado con un largo de 3 caracteres, pero si se pueden repetir las letras en una misma cadena.

Lo que quiero decir, es que a tu solucion, le faltaria la convinacion AAA, BBB, CCC, tambien otras como ABA BAB, etc, ya que el mismo caracter se puede repetir en la cadena, pero no puede haber 2 cadenas iguales.

Saludos y gracias de nuevo!
__________________
Si quieres cambio verdadero, pues camina distinto...
  #8 (permalink)  
Antiguo 19/05/2013, 20:01
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 17 años, 1 mes
Puntos: 80
Respuesta: Desafio

Mira en el foro habia dejado esto para excel :
Código PHP:
Ver original
  1. <?php
  2. error_reporting(E_ALL | E_STRICT);
  3.  
  4. class ColumnasExcel
  5. {
  6.     /**
  7.      * Contiene Los caracteres con los que se formaran la cadena final.
  8.      * @var string
  9.      */
  10.     private $_cadenaSalida  = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  11.    
  12.     /**
  13.      * Contiene el Tamaño de la cadena de caracteres de salida.
  14.      * @var integer
  15.      */
  16.     private $_largo;
  17.    
  18.     /**
  19.      * Constructor de Clase
  20.      * @param   string  $cadenaSalida   Si se quiere una cadena distinta a las letras de Excel
  21.      *                                  Se puede Configurar aqui o con el metodo setCadenaSalida.
  22.      */
  23.     public function __construct($cadenaSalida = '')
  24.     {
  25.         if (!empty($cadenaSalida)) {
  26.             $this->_cadenaSalida = $cadenaSalida;
  27.         }
  28.         $this->_largo = strlen($this->_cadenaSalida);
  29.     }
  30.    
  31.     /**
  32.      * Configura una Nueva cadena de Salida.
  33.      * @param   string  $cadenaSalida   Configura una nueva cadena de salida.
  34.      */
  35.     public function setCadenaSalida($cadenaSalida)
  36.     {
  37.         $this->_cadenaSalida    = $cadenaSalida;
  38.         $this->_largo           = strlen($this->_cadenaSalida);
  39.     }
  40.    
  41.     /**
  42.      * Convierte un Entero a Una Cadena de Letras.
  43.      * @param   integer $numero Numero a Convertir
  44.      * @return  string
  45.      */
  46.     function getNumeroALetra($numero)
  47.     {
  48.        
  49.         $cadena = '';
  50.         do {
  51.            $entero  = (int)( $numero / $this->_largo );
  52.            $resto   = ( $numero % $this->_largo );
  53.            //$cadena  = chr(65 + $resto) . $cadena;
  54.            $cadena = substr($this->_cadenaSalida, $resto,1) . $cadena;
  55.            
  56.            $numero  = $entero - 1 ;
  57.         } while ($entero);
  58.        
  59.         return $cadena;
  60.     }
  61.    
  62.     /**
  63.      * Cantidad Maxima de letras en el resultado Final
  64.      * @param   integer $max    Maxima cantidad de caracteres del resultado
  65.      * @return  integer
  66.      */
  67.     public function tamanioMaximoCadena($max)
  68.     {
  69.         $max        = intval($max);
  70.         $resultado  = 0;
  71.        
  72.         for ($i=1; $i <= $max; $i++) {
  73.             $resultado+= bcpow($this->_largo, $i);
  74.         }
  75.        
  76.         return ($resultado - 1);
  77.     }
  78. }
  79.  
  80. // Creo una instancia del objeto
  81. $obj            = new ColumnasExcel();
  82. // Veo cuantos caracteres como maximo tenga la cadena de salida
  83. $iteraciones    = $obj->tamanioMaximoCadena(3);
  84. $inicio = $obj->tamanioMaximoCadena(2)+1;
  85. for ($i=$inicio; $i <= $iteraciones; $i++)
  86. {
  87.      echo $obj->getNumeroALetra($i) . '<br>';
  88.    
  89. }

Saludos

http://www.forosdelweb.com/f18/strin...etras-1020133/
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #9 (permalink)  
Antiguo 19/05/2013, 22:26
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: Desafio

Hola,

Cita:
Iniciado por gringofer Ver Mensaje
combinación!, gracias por el interes.
Cita:
Iniciado por gringofer Ver Mensaje
.. seria todas las posibles convinaciones de caracteres del teclado con un largo de 3 caracteres, pero si se pueden repetir las letras en una misma cadena. ...
Bueno, seguramente necesitaba una explicación mas clara.

Según la formula de las combinaciones:

P(26,3) = n!/(n-r)!r!
P(26,3) = 26!/(26-3)!3!
P(26,3) = 2600

Que es el número de resultados que te muestra el programa. Si se deseara que incluyera AAA deberían ser permutaciones y creo se logra quitando el $i-1 del for en todos los ciclos y reemplazando por el 0 (para que inicie todos los ciclos de 0 y muestre las permutaciones de todos los elementos del conjunto).

Saludos,

Etiquetas: desafío
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:36.