http://qiita.com/Nabetani/items/ebd8a56b41711ba459f9
野球のスコアカウントを行います。
得点やランナー等の無い超簡易版です。
ひっかかるところが何一つ無かった。
やろうと思えば全サブルーチンを1行で実装可能ですが、そこまで削る必要もないでしょう。
「オフラインリアルタイムどう書く」の一覧
野球のスコアカウントを行います。
得点やランナー等の無い超簡易版です。
<?php class BASEBALL{ /** * 野球のスコアカウント * @param String 「ssbbbb」みたいな文字列 * @return String 「010,020,021,022,023,000」みたいな文字列 */ public function get($input){ $baseball = [[0, 0, 0]]; // すすめる for($i=0; $i<strlen($input); $i++){ $baseball[] = $this->{'get'.strtoupper($input[$i])}(end($baseball)); } // 文字列にして返す array_shift($baseball); $ret = ''; foreach($baseball as $val){ $ret .= ','.implode('',$val); } return substr($ret, 1); } // ストライク private function getS($input){ // ストライク if(++$input[1] >= 3){ $input[1] = 0; ++$input[0]; // アウト if($input[0] >=3){ $input = [0, 0, 0]; } } return $input; } // ボール private function getB($input){ if(++$input[2] >= 4){ $input[1] = $input[2] = 0; } return $input; } // ファウル private function getF($input){ if($input[1] < 2){ $input[1]++; } return $input; } // ヒット private function getH($input){ $input[1] = $input[2] = 0; return $input; } // ピッチャーフライ private function getP($input){ $input[1] = $input[2] = 0; // アウト if(++$input[0] >= 3){ $input[0] = 0; } return $input; } } // テスト $test = [ ['s', '010'], ['sss', '010,020,100'], ['bbbb', '001,002,003,000'], ['ssbbbb', '010,020,021,022,023,000'], ['hsbhfhbh', '000,010,011,000,010,000,001,000'], ['psbpfpbp', '100,110,111,200,210,000,001,100'], ['ppp', '100,200,000'], ['ffffs', '010,020,020,020,100'], ['ssspfffs', '010,020,100,200,210,220,220,000'], ['bbbsfbppp', '001,002,003,013,023,000,100,200,000'], ['sssbbbbsbhsbppp', '010,020,100,101,102,103,100,110,111,100,110,111,200,000,100'], ['ssffpffssp', '010,020,020,020,100,110,120,200,210,000'] ]; $baseball = new BASEBALL(); foreach($test as $key=>$data){ $answer = $baseball->get($data[0]); if($answer !== $data[1]){ print('えらー'); } }30分かからずで実装完了。
ひっかかるところが何一つ無かった。
やろうと思えば全サブルーチンを1行で実装可能ですが、そこまで削る必要もないでしょう。
「オフラインリアルタイムどう書く」の一覧
PR