http://qiita.com/Nabetani/items/cbc3af152ee3f50a822f
ポーカーの役を求めます。
集計する対象はワンペア、ツーペア、スリーカード、フォーカード、フルハウス。
つまりスートは一切無視してよいということです。
これまでで一番簡単だった気がします。
かかった時間は20分程度。
「オフラインリアルタイムどう書く」の一覧
ポーカーの役を求めます。
集計する対象はワンペア、ツーペア、スリーカード、フォーカード、フルハウス。
つまりスートは一切無視してよいということです。
<?php class POKER{ // 役 private $roles = [ '4K'=>[4, 1], 'FH'=>[3, 2], '3K'=>[3, 1, 1], '2P'=>[2, 2, 1], '1P'=>[2, 1, 1, 1], ]; /** * ポーカー * @param String 「D3C3C10D10S3」みたいな文字列 * @return String 「FH」みたいな文字列 */ public function get($input){ // 値をカウント $cards = array_count_values(explode('-', trim( str_replace(['S', 'H', 'D', 'C'], '-', $input), '-'))); rsort($cards); // 同じ役があるか確認 foreach($this->roles as $key=>$val){ if($cards === $val){ return $key; } } // なかった return '--'; } } // テスト $test = [ ['D3C3C10D10S3', 'FH'], ['S8D10HJS10CJ', '2P'], ['DASAD10CAHA', '4K'], ['S10HJDJCJSJ', '4K'], ['S10HAD10DAC10', 'FH'], ['HJDJC3SJS3', 'FH'], ['S3S4H3D3DA', '3K'], ['S2HADKCKSK', '3K'], ['SASJDACJS10', '2P'], ['S2S10H10HKD2', '2P'], ['CKH10D10H3HJ', '1P'], ['C3D3S10SKS2', '1P'], ['S3SJDAC10SQ', '--'], ['C3C9SAS10D2', '--'], ]; $poker = new POKER(); foreach($test as $key=>$data){ $answer = $poker->get($data[0]); if($answer !== $data[1]){ print('えらー'); } }数字ごとの枚数に一切ぶれがないため、===で簡単にマッチング可能です。
これまでで一番簡単だった気がします。
かかった時間は20分程度。
「オフラインリアルタイムどう書く」の一覧
PR