忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/11/23 19:26 |
PHP5.5.0 「第3回オフラインリアルタイムどう書くの参考問題」をPHPで解く
http://qiita.com/Nabetani/items/ebd8a56b41711ba459f9

野球のスコアカウントを行います。
得点やランナー等の無い超簡易版です。
<?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


2013/09/16 23:59 | Comments(0) | PHP

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<PHP5.5.0 「第2回オフラインリアルタイムどう書くの問題」をPHPで解く | HOME | 買ったものリスト 2013/09/15>>
忍者ブログ[PR]