PHPでArcチャレンジしてみるテスト

今日は朝から秋葉原ダイビル2008年度下期未踏IT人材発掘・育成事業「未踏ユース」成果報告会に参加しています。

発表の中で Arc Challenge の話が出たので、とりあえずPHPで簡単に書いてみました。

said.php:

<?
if($_SERVER['QUERY_STRING'])echo'you said ',htmlspecialchars($_COOKIE['foo']);
elseif($_POST)setcookie('foo',$_POST['foo'])&&print'<a href=?click>click here</a>';
else echo'<form method=POST><input type=text name=foo><input type=submit></form>';
?>

この擬似コードをベースに標準のPHPだけで動くようにしてみました。
もっと短くなるかなぁ。。。

ということで、ちょっとだけゴルフして1行164byte:

<?echo$_GET?'you said '.htmlspecialchars($_COOKIE[1]):($_POST&setcookie(1,$_POST[1])
?'<a href=?1>click here':'<form method=POST><input name=1><input type=submit>');

(読みやすくするために改行を入れています)

Arcと同条件で比較するためのPHPトークンの定義が微妙ですが、$_POST[1]を1トークンとして数えて、<?や括弧()、セミコロン;、文字列内の変数展開を除外すると全部で11トークンとなります。三項演算子?:を含めると+4で15トークン。文字列連結.を加えると+1で16トークン。&演算子を含めると+1で17トークン。

今日の結論:PHPはゴルフしても読みやすい言語ですね。

【参考文献】

  1. Take the Arc Challenge
  2. http://d.hatena.ne.jp/lionfan/20080226
  3. http://web4r.org/ja/