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
							