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

23
オセロゲームでコードゴルフ <PHP> 12fi091 @Arzzup

Upload: hiroto-takahashi

Post on 05-Jul-2015

137 views

Category:

Engineering


2 download

DESCRIPTION

PHPでオセロゲームのショートコーディング

TRANSCRIPT

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

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

12fi091 @Arzzup

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

プレゼン内容

自己紹介

コードゴルフとは?

作品(オセロゲーム)の紹介

アルゴリズム、コードの解説

2

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

自己紹介

学生

未来科学部情報メディア学科2年

好きな言語

Java PHP Ruby

Vimmer

たけのこ派

Twitterer

@arzzupえるざっぷ

3

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

コードゴルフだぁ?

コードの「文字数」を出来るだけ短くして目的のプログラムを作る遊び、競技

4

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

if ( $key )

print(“OK”);

else

print(“NG”);

!= 0 {

} {

}

5

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

if ($key)

print(“OK”);

else

print(“NG”);

6

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

print($key?”OK”:”NG”);

echo$key?”OK”:”NG”;

7

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

if ($key != 0) {

print(“OK”);

} else {

print(“NG”);

}

echo$key?”OK”:”NG”;

56Byte

20Byte

8

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

コードゴルフだぁ?

コードの「文字数」を出来るだけ短くして目的のプログラムを作る遊び、競技

これがコードゴルフだぁ!

9

IOCCC(国際邪悪なCコードコンテスト)

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

565byteテトリス

参考:わずか565バイトテトリスのプログラミング解説

http://zapanet.info/blog/item/1125

10

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

オセロだぁ?

ウィンタースポーツ

埼玉県民は毎日している

11

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

作成結果 <?=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

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

13

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

実物

ろーかる

ねっと

14

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

アルゴリズム

石が置ける所をハイパーリンク

その際GET値に、

「プレイヤーターンの情報」

「石をおいた場所」「すべての石の情報」

「置いた場所から石をひっくり返せる方向」を載せる

GET値無し→初期盤面作成

15

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

GET

m:盤面の情報

t:プレイヤー手番

k:石が置かれ場所

w:ひっくり返す方向

http://localhost/code_golf/golf_othello.php?m=5555555555500000000550000000055000000005502222200550021200055001210005500112000550011120055555555555&t=1&k=87&w=00010000

16

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

嬉しい誤算すごい所一手戻る、一手進む機能

棋譜確認機能

置ける場所が見やすい

17

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

データ受取

18

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

ひっくり返す部分

19

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

文字描画部分

20

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

感想

書きにくい!

面倒くさい!

面白くない!

コードゴルフしよう!21

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

まとめ

その言語の知識が深まる

省略記法に詳しくなる

→コーディング速度が上がる

→コードを綺麗に書けるようになる(?)

コードゴルフしよう!22

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

23

:q