オセロゲームでコードゴルフ
DESCRIPTION
PHPでオセロゲームのショートコーディングTRANSCRIPT
オセロゲームでコードゴルフ<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_split($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{foreach($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;}
968Byte12
13
アルゴリズム
石が置ける所をハイパーリンク
その際GET値に、
「プレイヤーターンの情報」
「石をおいた場所」「すべての石の情報」
「置いた場所から石をひっくり返せる方向」を載せる
GET値無し→初期盤面作成
15
GET
m:盤面の情報
t:プレイヤー手番
k:石が置かれ場所
w:ひっくり返す方向
http://localhost/code_golf/golf_othello.php?m=5555555555500000000550000000055000000005502222200550021200055001210005500112000550011120055555555555&t=1&k=87&w=00010000
16
嬉しい誤算すごい所一手戻る、一手進む機能
棋譜確認機能
置ける場所が見やすい
17
データ受取
18
ひっくり返す部分
19
文字描画部分
20
感想
書きにくい!
面倒くさい!
面白くない!
コードゴルフしよう!21
まとめ
その言語の知識が深まる
省略記法に詳しくなる
→コーディング速度が上がる
→コードを綺麗に書けるようになる(?)
コードゴルフしよう!22
23
:q