Foros del Web » Programando para Internet » PHP »

EJERCICIO FaCIL PERO SE ME COMPLICo

Estas en el tema de EJERCICIO FaCIL PERO SE ME COMPLICo en el foro de PHP en Foros del Web. Hello amiguitos, el profe me puso un ejercicio que me tiene vuelta loca desde hace mas de 8 dias y ya no se como entrarle ...
  #1 (permalink)  
Antiguo 06/05/2018, 17:29
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 10 años
Puntos: 11
Sonrisa EJERCICIO FaCIL PERO SE ME COMPLICo

Hello amiguitos, el profe me puso un ejercicio que me tiene vuelta loca desde hace mas de 8 dias y ya no se como entrarle al ejercicio, aqui les pido toda la ayuda del mundo, proque estoy super perdida

Tengo que programar en php una funcion que me indique si un conjunto de cartas de una lista representan una Escalera de Poker (5 cartas con valores consecutivos) o no.

Las cartas siempre tienen valores entre 2 y 14, donde 14 es el AS. Debo tener en cuenta que el AS tambien cuenta como 1 y la cantidad de cartas puede variar, pero nunca es superior a 7.

En el ejercicio, solo se debe tomar en cuenta el número de la carta, independientemente del simbolo, osea, no importa si es treboles, corazones, diamantes o picas.

Ejemplos:
  • escalera: 9-10-11-12-13
  • escalera: 14-2-3-4-5
  • escalera: 2-7-8-5-10-9-11
  • no es escalera: 7-8-12-13-14
La funcion debe validar un caso de pruebas similar a este:

class Cartas extends TestCase {
public function testPrograma() {

$results1 = validar([2, 3, 4 ,5, 6]);
$this->assertEquals($results1, true, "2, 3, 4 ,5, 6");

$results2 = validar([14, 5, 4 ,2, 3]);
$this->assertEquals($results2, true, "14, 5, 4 ,2, 3");

$results3 = validar([7, 7, 12 ,11, 3, 4, 14]);
$this->assertEquals($results3, false, "7, 7, 12 ,11, 3, 4, 14");

$results4 = validar([7, 3, 2]);
$this->assertEquals($results4, false, "7, 3, 2");
}
}
HELPME PLEASE

Última edición por julia2021; 06/05/2018 a las 20:53
  #2 (permalink)  
Antiguo 06/05/2018, 21:26
Avatar de vicram10  
Fecha de Ingreso: enero-2009
Ubicación: Asuncion
Mensajes: 326
Antigüedad: 15 años, 10 meses
Puntos: 27
Respuesta: EJERCICIO FaCIL PERO SE ME COMPLICo

lo que se me ocurre es que primeramente puedes ordenar el vector de numeros que queres validar.
una vez ordenado, giras por el mismo para determinar si son consecutivos, para ello puedes ver este topic.

http://www.forosdelweb.com/f18/compr...utivos-740606/
__________________
Asunción Paraguay
Licenciado - Desarrollador Web - Lider de Proyecto/Desarrollador Banco Local
Espacio Geek - Comunidad Tecnologica
  #3 (permalink)  
Antiguo 06/05/2018, 21:41
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 10 años
Puntos: 11
Sonrisa Respuesta: EJERCICIO FaCIL PERO SE ME COMPLICo

Perfecto amiguito @vicram10 , me gusta lo que me indicas, me sirve muuucho , pero como puedo hacer con la parte que dice:
  • "Las cartas siempre tienen valores entre 2 y 14, donde 14 es el AS. Debo tener en cuenta que el AS tambien cuenta como 1
  • y la cantidad de cartas puede variar, pero nunca es superior a 7."
  #4 (permalink)  
Antiguo 06/05/2018, 22:51
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 5 meses
Puntos: 263
Respuesta: EJERCICIO FaCIL PERO SE ME COMPLICo

podria ser algo así:

Código PHP:
Ver original
  1. class Cartas{
  2.  
  3.     private function _mano($X){
  4.         $manos = array(
  5.             "910111213" =>  "Escalera",
  6.             "234514"    =>  "Escalera",
  7.             "257891011" =>  "Escalera",
  8.         );
  9.         return (array_key_exists($X,$manos)) ? $manos[$X] : "No tiene mano válida";
  10.     }//
  11.  
  12.     public function _valida($X){
  13.         if(is_array($X)){
  14.             asort($X);
  15.             $b = implode("",$X);
  16.             return $this->_mano($b);
  17.         }else{
  18.             return false;
  19.         }
  20.     }//
  21.  
  22. }//
  23.  
  24. $p = new Cartas();
  25.  
  26. $jugadas = [
  27.     [9,10,11,12,13],
  28.     [14,2,3,4,5],
  29.     [2,7,8,5,10,9,11],
  30.     [7,8,12,13,14]
  31. ];
  32.  
  33. foreach($jugadas as $item){
  34.     echo "<li>".$p->_valida($item)."</li>";
  35. }

Esto retorna la siguiente lista:

-> Escalera
-> Escalera
-> Escalera
-> No tiene mano válida

Claro es algo hecho por encima, pero te da una idea.

Saludos
__________________
[email protected]
HITCEL
  #5 (permalink)  
Antiguo 06/05/2018, 23:08
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 10 años
Puntos: 11
Sonrisa Respuesta: EJERCICIO FaCIL PERO SE ME COMPLICo

Gracias @xfxstudios , pero como puedo incluir las siguientes condiciones:
  • Las cartas siempre tienen valores entre 2 y 14, donde 14 es el AS. Debo tener en cuenta que el AS tambien cuenta como 1
  • y la cantidad de cartas puede variar, pero nunca es superior a 7.
  #6 (permalink)  
Antiguo 07/05/2018, 00:08
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 5 meses
Puntos: 263
Respuesta: EJERCICIO FaCIL PERO SE ME COMPLICo

Todo depende de como el sistema valla a recibir la data, aunque debería de estar preparado para varios ambitos, por ejemplo,

no es lo mismo parar
KKK82

que
13131382

así que como tu sistema de pruebas va a manejar dichos datos para determinar que valor darle al az en ese momento si 1 o 14

si modificamos la clase, tomando como valor del as en número 14 únicamente, quedaria la clase así:

Código PHP:
Ver original
  1. class Cartas{
  2.  
  3.     private function _mano($X){
  4.         $manos = array(
  5.             "1413121110" => "Escalera real de Color",
  6.             "109876"     => "Escalera de Color",
  7.             "99994"      => "Poker",
  8.             "4441212"    => "Full",
  9.             "77722"      => "Full",
  10.             "5551414"    => "Full",
  11.             "7771313"    => "Full",
  12.             "1211754"    => "Color",
  13.             "12111098"   => "Escalera",
  14.             "543214"     => "Escalera",
  15.             "13131382"   => "Trio",
  16.             "10106611"   => "Doble Pareja",
  17.             "11111485"   => "Pareja"
  18.         );
  19.         return (array_key_exists($X,$manos)) ? $manos[$X] : "No tiene mano válida";
  20.     }//
  21.  
  22.     private function _valor($X){
  23.         if(!is_numeric($X)){
  24.             switch ($X) {
  25.                 case 'J':
  26.                     return 11;
  27.                 break;
  28.                
  29.                 case 'Q':
  30.                     return 12;
  31.                 break;
  32.                
  33.                 case 'K':
  34.                     return 13;
  35.                 break;
  36.                
  37.                 case 'A':
  38.                     return 14;
  39.                 break;
  40.                
  41.             }
  42.         }
  43.     }
  44.  
  45.     public function _valida($X){
  46.         if(is_array($X)){
  47.             //asort($X);
  48.             //$b = implode("",$X);
  49.             //return $this->_mano($b);
  50.             $b = "";
  51.  
  52.             foreach($X as $item){
  53.                 if(is_numeric($item)){
  54.                     $b .= $item;
  55.                 }else{
  56.                     $b .= $this->_valor($item);
  57.                 }
  58.             }
  59.  
  60.             return $this->_mano($b);
  61.         }else{
  62.             return false;
  63.         }
  64.     }//
  65.  
  66. }//
  67.  
  68. $p = new Cartas();
  69.  
  70. $jugadas = [
  71.     ["A","K","Q","J",10],//Escalera real de Color
  72.     [10,9,8,7,6],//Escalera de Color
  73.     [9,9,9,9,4],//Poker
  74.     [4,4,4,"Q","Q"],//Full
  75.     [7,7,7,2,2],//Full
  76.     [5,5,5,"A","A"],//Full
  77.     [7,7,7,"K","K"],//Full
  78.     ["Q","J",7,5,4],//Color
  79.     ["Q","J",10,9,8],//Escalera
  80.     [5,4,3,2,"A"],//Escalera
  81.     ["K","K","K",8,2],//Trio
  82.     [10,10,6,6,"J"],//Doble Pareja
  83.     ["J","J","A",8,5],//Pareja
  84. ];
  85.  
  86. foreach($jugadas as $item){
  87.     echo "<li>".$p->_valida($item)."</li>";
  88. }

retornando la siguiente lista:

->Escalera real de Color
->Escalera de Color
->Poker
->Full
->Full
->Full
->Full
->Color
->Escalera
->Escalera
->Trio
->Doble Pareja
->Pareja

claro aquí no estamos tomando ni el palo ni el color para dichas validaciones y estamos manejando el orden de llegada de la data asignando el único valor de 14 al as, no soy muy experto en poker, así que no te sabría decir en que momento el as vale 1 o 14, pero igual sería una validación que se podría hacer de acuerdo al orden de envío del as imagino yo.

como por ejemplo esta escalera:

[5,4,3,2,"A"],//Escalera

alli se podría decir que el as vale 1

también debes manejar los patrones, pues puedo tener una escalera en una mano donde tenga 7 cartas por ejemplo
__________________
[email protected]
HITCEL

Última edición por xfxstudios; 07/05/2018 a las 00:16

Etiquetas: cartas
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 01:33.