SlideShare a Scribd company logo
1 of 23
オセロゲームでコードゴルフ
<PHP>
12fi091 @Arzzup
プレゼン内容
 自己紹介
 コードゴルフとは?
 作品(オセロゲーム)の紹介
 アルゴリズム、コードの解説
2
自己紹介
 学生
 未来科学部情報メディア学科2年
 好きな言語
 Java PHP Ruby
 Vimmer
 たけのこ派
 Twitterer
 @arzzup えるざっぷ
3
コードゴルフだぁ?
 コードの「文字数」を出来るだけ短くし
て目的のプログラムを作る遊び、競技
4
if ( $key )
print(“OK”);
else
print(“NG”);
!= 0 {
} {
}
5
if ($key)
print(“OK”);
else
print(“NG”);
6
print($key?”OK”:”NG”);
echo$key?”OK”:”NG”;
7
if ($key != 0) {
print(“OK”);
} else {
print(“NG”);
}
echo$key?”OK”:”NG”;
56Byte
20Byte
8
コードゴルフだぁ?
 コードの「文字数」を出来るだけ短くし
て目的のプログラムを作る遊び、競技
これがコード
ゴルフだぁ!
9
IOCCC(国際邪悪なCコードコンテスト)
565byteテトリス
 参考:わずか565バイトテトリスのプログ
ラミング解説
 http://zapanet.info/blog/item/1125
10
オセロだぁ?
 ウィンタースポーツ
 埼玉県民は毎日している
11
作成結果
 <?=header('Content-type:text/html;charset=utf-
8');error_reporting(0);$s=$_GET['m']or$s=sprintf('%0100s',0);$m=str_sp
lit($s);$w=str_split($_GET['w']);$t=$_GET['t'];$k=$_GET['k'];$f=$t%2+1;
$e=$d=0;$r=array(-11,-10,-9,-
1,1,9,10,11);if($k){$i=0;$m[$k]=$t;foreach($r
as$c=>$j)for($b=$k+$j;$f==$m[$b]*$w[$c];$b+=$j)$m[$b]=$t;}else{fore
ach($m as$k=>&$v)$v=($k%10&&$k%10-
9&&$k/10>=1&&$k/10<=9)?0:5;$m[44]=$m[55]=2;$m[45]=$m[54]=1;$t
=1;}$p=m($m);$u=-2;while($u++<1){for($i=-
1;++$i<100;){$w[$i]=str_split(sprintf('%08s',0));foreach($r
as$c=>$j)for($b=$i+$j;$m[$b]*!$m[$i]&&$m[$b]-
5;$b+=$j)if($m[$b]==$f)if($j+$i==$b)break;else$w[$i][$c]=$u=1;}$y=$f;
$f=$t;$t=$y;}for($i=-
1;++$i<100;){if(!($i%10))echo"<br>";$v=$m[$i];if($v==2)$e++;if($v==1)$
d++;$h=implode($w[$i]);echo($h*1?"<a
href="?m=$p&t=$t&k=$i&w=$h&e">":"").g($v).($h*1?"</a>":"");}echo"
t=".g($t)." W$e,B$d";function g($v){return($v?$v-1?($v-
5?"◯":"■"):"●":"□");}function m($m){$x="";foreach($m
as$v)$x.=$v;return$x;}
968Byte 12
13
実物
 ろーかる
 ねっと
14
アルゴリズム
 石が置ける所をハイパーリンク
 その際GET値に、
「プレイヤーターンの情報」
「石をおいた場所」 「すべての石の情報」
「置いた場所から石をひっくり返せる方
向」を載せる
 GET値無し→初期盤面作成
15
GET
 m:盤面の情報
 t:プレイヤー手番
 k:石が置かれ場所
 w:ひっくり返す方向
http://localhost/code_golf/golf_othello.
php?m=55555555555000000005500000
00055000000005502222200550021200
055001210005500112000550011120055
555555555&t=1&k=87&w=00010000
16
嬉しい誤算すごい所
 一手戻る、一手進む機能
 棋譜確認機能
 置ける場所が見やすい
17
データ受取
18
ひっくり返す部分
19
文字描画部分
20
感想
 書きにくい!
 面倒くさい!
 面白くない!
コードゴルフしよう!
21
まとめ
 その言語の知識が深まる
 省略記法に詳しくなる
 →コーディング速度が上がる
 →コードを綺麗に書けるようになる(?)
コードゴルフしよう!
22
23
:q

More Related Content

More from 洸人 高橋

カンバン駆動開発チュートリアル
カンバン駆動開発チュートリアルカンバン駆動開発チュートリアル
カンバン駆動開発チュートリアル洸人 高橋
 
Twitter ドミネーターを作った
Twitter ドミネーターを作ったTwitter ドミネーターを作った
Twitter ドミネーターを作った洸人 高橋
 
ランキングを利用した協調フィルタリング手法の提案
ランキングを利用した協調フィルタリング手法の提案ランキングを利用した協調フィルタリング手法の提案
ランキングを利用した協調フィルタリング手法の提案洸人 高橋
 
{LESS}をちょっと拡張してみた
{LESS}をちょっと拡張してみた{LESS}をちょっと拡張してみた
{LESS}をちょっと拡張してみた洸人 高橋
 

More from 洸人 高橋 (6)

カンバン駆動開発チュートリアル
カンバン駆動開発チュートリアルカンバン駆動開発チュートリアル
カンバン駆動開発チュートリアル
 
elzup 自己紹介
elzup 自己紹介elzup 自己紹介
elzup 自己紹介
 
Twitter ドミネーターを作った
Twitter ドミネーターを作ったTwitter ドミネーターを作った
Twitter ドミネーターを作った
 
ランキングを利用した協調フィルタリング手法の提案
ランキングを利用した協調フィルタリング手法の提案ランキングを利用した協調フィルタリング手法の提案
ランキングを利用した協調フィルタリング手法の提案
 
Vimperator abc
Vimperator abcVimperator abc
Vimperator abc
 
{LESS}をちょっと拡張してみた
{LESS}をちょっと拡張してみた{LESS}をちょっと拡張してみた
{LESS}をちょっと拡張してみた
 

オセロゲームでコードゴルフ

Editor's Notes

  1. 例もphpで
  2. 波括弧 条件式
  3. サーバーサイドの設定をいじれば省ける部分
  4. 941byte
  5. 適当な解説
  6. スキップ処理のために分けざる負えなかったforループ
  7. 見づらい、 いちいち確認しながら
  8. 解読