Ver Mensaje Individual
  #12 (permalink)  
Antiguo 26/06/2015, 05:51
Avatar de Apolo_13
Apolo_13
 
Fecha de Ingreso: mayo-2015
Mensajes: 40
Antigüedad: 8 años, 11 meses
Puntos: 4
Respuesta: [-CONCURSO-] PHP Maraton script #1 - Desafios

NIVEL 2 - A (mensaje 3)

La clase Algoritmo:

Código PHP:
<?php

class Algoritmo {

    private 
$arrOrd;

    public function 
Algoritmo() {
        
$this->arrOrd = array("2" => 2"3" => 3"4" => 4"5" => 5"6" => 6"7" => 7"8" => 8"9" => 9"10" => 10"j" => 11"q" => 12"k" => 13"a" => 14);
    }

    public function 
isEscaleraReal($carts) {
        
$result = array();
        
$isEscaleraColor $this->isEscaleraColor($carts);

        if (
$isEscaleraColor['bool']) {
            
$result['color'] = $isEscaleraColor['color'];
            if (
$isEscaleraColor['min'] == 10 && $isEscaleraColor['max'] == 14) {
                
$result['bool'] = true;
            } else {
                
$result['bool'] = false;
            }
        } else {
            
$result['bool'] = false;
        }
        return 
$result;
    }

    public function 
isEscaleraColor($carts) {
        
$result = array();

        
$isEscalera $this->isEscalera($carts);
        
$isColor $this->isColor($carts);

        
$result['min'] = $isEscalera['min'];
        
$result['max'] = $isEscalera['max'];

        if (
$isEscalera['bool'] && $isColor['bool']) {
            
$result['color'] = $isColor['color'];
            
$result['bool'] = true;
        } else {
            
$result['bool'] = false;
        }
        return 
$result;
    }

    public function 
isPoker($carts) {
        
$result = array();
        
$cartsAgrupadas $this->agruparCartas($carts);

        
//$exist = array_search('2', $cartsAgrupadas);
        
$exist array_keys($cartsAgrupadas'4');
        if (
count($exist) == 0) {
            
$result['bool'] = false;
        } else {
            
$result['bool'] = true;
            
$result['val'] = $this->arrOrd[$exist[0]];
        }
        return 
$result;
    }

    public function 
isFull($carts) { 
        
$result = array();

        
$exist1 $this->isTrio($carts);
        
$exist2 $this->isParejaODoble($carts);
        if (
$exist2['bool'] == true && $exist2['modo'] == "normal" && $exist1['bool']) {
            
$result['bool'] = true;
            
$result['val'] = array(array("trio"$exist1['val']), array("pareja"$exist2['val']));
        } else {
            
$result['bool'] = false;
        }
        return 
$result;
    }

    public function 
isColor($carts) {
        
$result = array();
        
$color true;
        for (
$i 0$i < (count($carts) - 1) && $color$i++) {
            if (
$carts[$i]->getPalo() != $carts[$i 1]->getPalo()) {
                
$color false;
            }
        }
        if (
$color) {
            
$result['color'] = $carts[0]->getPalo();
            
$result['val'] = $this->arrOrd[$carts[count($carts) - 1]->getValor()];
            
$result['bool'] = true;
        } else {
            
$result['bool'] = false;
        }
        return 
$result;
    }

    public function 
isEscalera($carts) {
        
$result = array();
        
$result['max'] = $this->arrOrd[$carts[count($carts) - 1]->getValor()];
        
$result['min'] = $this->arrOrd[$carts[0]->getValor()]; //para calcular si es escalera real
        
$escalera true;
        for (
$i 0$i < (count($carts) - 1) && $escalera$i++) {
            if ((
$this->arrOrd[$carts[$i]->getValor()] + 1) != $this->arrOrd[$carts[$i 1]->getValor()]) {
                if ((
$this->arrOrd[$carts[$i 1]->getValor()] == 14) && ($this->arrOrd[$carts[$i]->getValor()] == 5)) {
                    
$escalera true;
                } else {
                    
$escalera false;
                }
            }
        }
        if (
$escalera) {
            
$result['bool'] = true;
            if (
$result['max'] == 14 && $result['min'] == 2) {
                
$result['min'] = $result['max'];
                
$result['max'] = 5;
            }
        } else {
            if (
$result['max'] == && $result['min'] == 14) {
                
$result['bool'] = true;
            } else {
                
$result['bool'] = false;
            }
        }
        return 
$result;
    }

    public function 
isTrio($carts) {
        
$result = array();
        
$cartsAgrupadas $this->agruparCartas($carts);

        
//$exist = array_search('2', $cartsAgrupadas);
        
$exist array_keys($cartsAgrupadas'3');
        if (
count($exist) == 0) {
            
$result['bool'] = false;
        } else {
            
$result['bool'] = true;
            
$result['val'] = $this->arrOrd[$exist[0]];
        }
        return 
$result;
    }

    public function 
isParejaODoble($carts) {
        
$result = array();
        
$cartsAgrupadas $this->agruparCartas($carts);

        
$exist array_keys($cartsAgrupadas'2');
        if (
count($exist) == 2) {
            
$result['bool'] = true;
            
$result['val'] = array($this->arrOrd[$exist[0]], $this->arrOrd[$exist[1]]);
            
$result['modo'] = "dobles";
            
$aux $this->cartaAlta($carts$result['val']);
            
$result['max'] = $aux['val'];
        } elseif (
count($exist) == 1) {
            
$result['bool'] = true;
            
$result['val'] = $this->arrOrd[$exist[0]];
            
$result['modo'] = "normal";
            
$aux $this->cartaAlta($carts$result['val']);
            
$result['max'] = $aux['val'];
        } else {
            
$result['bool'] = false;
        }
        return 
$result;
    }

    public function 
cartaAlta($carts$excluir null) {
        
$result = array();
        
$masAlta null;
        foreach (
$carts as $val) {
            if (
$excluir != null) {
                if (
is_array($excluir)) {
                    if (
$this->arrOrd[$val->getValor()] != $excluir[0] && $this->arrOrd[$val->getValor()] != $excluir[1]) {
                        if (
$masAlta == null) {
                            
$masAlta $val->getValor();
                        } else {
                            if (
$this->arrOrd[$val->getValor()] > $this->arrOrd[$masAlta]) {
                                
$poner true;
                                foreach(
$excluir as $exc) {
                                    if(
$val->getValor() == $exc) {
                                        
$poner false;
                                    }
                                }
                                if(
$poner) {
                                    
$masAlta $val->getValor();
                                }
                            }
                        }
                    }
                } else {
                    if (
$this->arrOrd[$val->getValor()] != $excluir) {
                        if (
$masAlta == null) {
                            
$masAlta $val->getValor();
                        } else {
                            if (
$this->arrOrd[$val->getValor()] > $this->arrOrd[$masAlta]) {
                                
$masAlta $val->getValor();
                            }
                        }
                    }
                }
            } else {
                if (
$masAlta == null) {
                    
$masAlta $val->getValor();
                } else {
                    if (
$this->arrOrd[$val->getValor()] > $this->arrOrd[$masAlta]) {
                        
$masAlta $val->getValor();
                    }
                }
            }
        }
        
$result['val'] = $masAlta;
        return 
$result;
    }

    private function 
agruparCartas($carts) {
        
$result = array();
        
$result['2'] = 0;
        
$result['3'] = 0;
        
$result['4'] = 0;
        
$result['5'] = 0;
        
$result['6'] = 0;
        
$result['7'] = 0;
        
$result['8'] = 0;
        
$result['9'] = 0;
        
$result['10'] = 0;
        
$result['j'] = 0;
        
$result['q'] = 0;
        
$result['k'] = 0;
        
$result['a'] = 0;
        for (
$i 0$i count($carts); $i++) {
            switch (
$carts[$i]->getValor()) {
                case 
"2":
                    
$result['2'] += 1;
                    break;
                case 
"3":
                    
$result['3'] += 1;
                    break;
                case 
"4":
                    
$result['4'] += 1;
                    break;
                case 
"5":
                    
$result['5'] += 1;
                    break;
                case 
"6":
                    
$result['6'] += 1;
                    break;
                case 
"7":
                    
$result['7'] += 1;
                    break;
                case 
"8":
                    
$result['8'] += 1;
                    break;
                case 
"9":
                    
$result['9'] += 1;
                    break;
                case 
"10":
                    
$result['10'] += 1;
                    break;
                case 
"j":
                    
$result['j'] += 1;
                    break;
                case 
"q":
                    
$result['q'] += 1;
                    break;
                case 
"k":
                    
$result['k'] += 1;
                    break;
                case 
"a":
                    
$result['a'] += 1;
                    break;
                default:
                    break;
            }
        }
        return 
$result;
    }

    public function 
ordenarCartas($cartas) {
        
$cards = array();
        
$resultado = array();
        foreach (
$cartas as $key => $value) {
            
$cards[$key] = $this->arrOrd[$value->getValor()];
        }
        
asort($cards);
        foreach (
$cards as $cla => $val) {
            
$resultado[] = $cartas[$cla];
        }
        return 
$resultado;
    }

}

?>
__________________
¿Buscas respuestas? eemmmmm.....¡Abstrae tu mente!

Última edición por Apolo_13; 26/06/2015 a las 06:09