nirasan's tech blog

趣味や仕事の覚え書きです。Linux, Perl, PHP, Ruby, Javascript, Android, Cocos2d-x, Unity などに興味があります。

新しいプログラミング言語の学習に Code Golf がちょうどいい

プログラミングの問題をいかに短いコードで書くかを競うhttp://codegolf.com/というサイトがあるんだけど、短くていい感じの問題がいっぱいあるので、新しいプログラミング言語をおぼえたいなんてときにただ解いてみるだけでも勉強になるんじゃないかというおはなし。

ゴルフサイトは他にもhttp://codegolf.stackexchange.com/とかhttp://golf.shinh.org/とか見つけた。

PHP の勉強中で、FizzBuzzを10通りくらい試したところで飽きてたんだけど、ゴルフのおかげでもうちょっと続けられそう。

最後にhttp://codegolf.com/saving-time:この問題を解いてみたコードを晒してみる。

<?php                                                                                                                                                                                                                                                                              
    list($h, $m) = explode(':', fgets(STDIN));                                                                                                           
    $h = $h % 12;                                                                                                                                              
    $m = (int)($m / 5);                                                                                                                                        
    for ($i = 0; $i < 12; $i++) {                                                                                                                              
        $c[$i] = $i-$h||$i-$m ? $i-$h ? $i-$m ? o : m : h : x;                                                                                                 
    }                                                                                                                                                          
    $f = <<<EOL                                                                                                                                           
%9s                                                                                                                                                            
%5s%8s                                                                                                                                                         
                                                                                                                                                               
%2s%14s                                                                                                                                                        
                                                                                                                                                               
%s%16s                                                                                                                                                         
                                                                                                                                                               
%2s%14s                                                                                                                                                        
                                                                                                                                                               
%5s%8s                                                                                                                                                         
%9s                                                                                                                                                            
EOL;                                                                                                                                                           
    printf($f, $c[0], $c[11], $c[1], $c[10], $c[2], $c[9], $c[3], $c[8], $c[4], $c[7], $c[5], $c[6]);                                                     
?>

全然短く出来なかったけど、未定義の定数が定数名の文字列を返すのをおぼえますた。