Restricted Words (出題者 @cielavenir 氏) 反省会 #codeiq #q431
CodeIQにて出題されていた「普通じゃないHello World」の期限が過ぎ、
問題及び解答の公開が解禁されましたので、私の解答を公開します。
課題(一部抜粋)
標準出力に
Hello World
と出力するプログラムを作成して下さい。
ただし、数値・文字・文字列リテラルを解答に含めることはできません。
CodeIQ 問題ページ
出題者 @cielavenir 氏の解答
私の回答(PHP 5.3)
<?php class Hello { public function world() { return __CLASS__ . $this->space() . ucwords(__FUNCTION__); } private function space() { return chr(PHP_MINOR_VERSION . PHP_MAJOR_VERSION - PHP_MINOR_VERSION); } } $hello = new Hello; echo $hello->world();
私の回答の解説
クラス名の入る定数__CLASS__
と関数名の入る__FUNCTION__
を使用して"Hello"と"World"という文字列を作成しました。
(ちなみに__METHOD__
という定数も存在しますが、この定数には"ClassName::methodName()"というような値が入ります)
残す半角スペースのASCIIコードは0x20、つまり32という数値を得られれば私の勝ち・・・
運の良いことに出題者の採点環境はPHP5.3で、PHP_MINOR_VERSION
(この環境では3)及びPHP_MAJOR_VERSION
(この環境では5)を使用して簡単に32を作ることができました。
この解答で「評価5」をいただきました。(5点満点?)
反省点
「リテラル禁止」という条件だったので定数を使用しました。
が、定数使用可だと$one = (int)TRUE;
で数値が得られてしまうわけで、
それでは全く面白みがないなと今にして思ます。
定数を使用したことについて反省
こういう問題は面白くてよいですね。
また、出題者の方からフィードバックをいただけたのが嬉しかったです。