@ 2019-04-26T14:20:53Z <?php
class Card {
private $suit;
private $val;
public function __construct($val, $suit) {
$values = array(
'J' => 11,
'Q' => 12,
'K' => 13,
'A' => 14,
);
$suits = array(
'H' => 'Hearts',
'C' => 'Clubs',
'D' => 'Diamonds',
'S' => 'Spades'
);
$this->suit = $suits[$suit];
$this->val = $values[$val] ?? $val;
}
public function getSuit() {
return $this->suit;
}
public function getVal() {
return $this->val;
}
public function setVal($val) {
$this->val = $val;
}
}
class Hand {
private $cards;
private $matches = array();
private $values = array();
private $flush;
public function __construct($hand) {
$cards = explode(' ', $hand);
foreach ($cards as $card) {
$val = substr($card, 0, -1);
$suit = strtoupper(substr($card, -1));
$this->cards[] = new Card($val, $suit);
}
// get values of cards in hand
$this->values = array_map(function ($card) {
return $card->getVal();
}, $this->cards);
// get suits of cards in hand
$this->suits = array_map(function ($card) {
return $card->getSuit();
}, $this->cards);
// get pairs of threes and fours
$this->pairs = $this->threes = $this->fours = [];
// might be a straight
$this->possibleStraight = true;
$this->hands = array_count_values($this->values);
// if there are more than 2 same card values, it can't be a straight
if (max($this->hands) > 1) {
$this->possibleStraight = false;
}
// match for pairs
foreach ($this->hands as $face => $count) {
// one or two pairs
if ($count === 2) {
$this->pairs[] = $face;
}
// three of a kind
if ($count === 3) {
$this->threes[] = $face;
}
// four of a kind
if ($count === 4) {
$this->fours[] = $face;
}
}
}
public function getCards() {
return $this->cards;
}
public function getValues() {
return $this->values;
}
public function getSuits() {
return $this->suits;
}
public function getHighCard() {
return max($this->getValues());
}
public function getPairs() {
return $this->pairs;
}
public function isOnePair(){
return (count($this->pairs) == 1 ? true : false);
}
public function isTwoPair(){
return (count($this->pairs) == 2 ? true : false);
}
public function getThrees() {
return $this->threes;
}
public function getFours() {
return $this->fours;
}
public function hasAce() {
return isset($this->hands['14']);
}
public function isFullHouse() {
return count($this->pairs) == 1 && count($this->threes) == 1;
}
public function isFlush() {
$this->suits = array_count_values($this->getSuits());
var_dump($this->suits);
// match flush
foreach ($this->suits as $face => $count) {
($count == 5 ? $this->flush = true : $this->flush = false);
}
echo '~~ is it a flush? '.$this->flush;
return $this->flush;
}
public function isStraightAce() {
$cards = $this->getValues();
if (array_search(14, $cards) !== FALSE &&
array_search(2, $cards) !== FALSE &&
array_search(3, $cards) !== FALSE &&
array_search(4, $cards) !== FALSE &&
array_search(5, $cards) !== FALSE) {
$this->straight = true;
} else {
$this->straight = false;
}
return $this->straight;
}
public function isStraightRegular() {
$cards = $this->getValues();
if (max($cards) - min($cards) == 4) {
$this->straight = true;
} else {
$this->straight = false;
}
return $this->straight;
}
public function isStraight(){
if($this->isStraightAce()){
$this->straight = true;
} else if ($this->isStraightRegular()) {
$this->straight = true;
} else {
$this->straight = false;
}
echo "\n\nStraight??? ".$this->straight;
return $this->straight;
}
public function isStraightFlush(){
return ($this->isFlush() && $this->isStraight());
}
}
echo "\n\nThird Hand: 2h 3h 4h 5h 6h\n\n";
$h = new Hand('2h 3h 4h 5h 6h');
var_dump($h->isFlush());
echo "\nIs straight?";
var_dump($h->isStraight());
echo "\nIs straight flush?";
var_dump($h->isStraightFlush());
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for 8.2.0 - 8.2.18 , 8.3.0 - 8.3.6 Third Hand: 2h 3h 4h 5h 6h
Deprecated: Creation of dynamic property Hand::$suits is deprecated in /in/h3OEf on line 63
Deprecated: Creation of dynamic property Hand::$fours is deprecated in /in/h3OEf on line 68
Deprecated: Creation of dynamic property Hand::$threes is deprecated in /in/h3OEf on line 68
Deprecated: Creation of dynamic property Hand::$pairs is deprecated in /in/h3OEf on line 68
Deprecated: Creation of dynamic property Hand::$possibleStraight is deprecated in /in/h3OEf on line 71
Deprecated: Creation of dynamic property Hand::$hands is deprecated in /in/h3OEf on line 73
array(1) {
["Hearts"]=>
int(5)
}
~~ is it a flush? 1bool(true)
Is straight?
Deprecated: Creation of dynamic property Hand::$straight is deprecated in /in/h3OEf on line 170
Straight??? 1bool(true)
Is straight flush?array(1) {
[5]=>
int(1)
}
~~ is it a flush? bool(false)
Output for 7.1.25 - 7.1.33 , 7.2.0 - 7.2.33 , 7.3.0 - 7.3.33 , 7.4.0 - 7.4.33 , 8.0.0 - 8.0.30 , 8.1.0 - 8.1.28 Third Hand: 2h 3h 4h 5h 6h
array(1) {
["Hearts"]=>
int(5)
}
~~ is it a flush? 1bool(true)
Is straight?
Straight??? 1bool(true)
Is straight flush?array(1) {
[5]=>
int(1)
}
~~ is it a flush? bool(false)
preferences:dark mode live preview
155.38 ms | 403 KiB | 182 Q