空白ゴルフを通して知ったAnarchyGolfの優しいところ?
このところCodeGolfでWhitespaceにはまっています。なぜWhitespaceかって?他の言語じゃ太刀打ちできないからだよ。。
さて、ぽぽぽぽーんでおなじみのCMがAnarchyGolfの問題になっていました。
http://golf.shinh.org/p.rb?Greeting+Animals
これを解いて知ったAnarchyGolfの優しいところを3つご紹介します。
「エラーぐらい見逃してやんよ」
Whitespaceの入力命令にはEOFを検知する手段がありません。EOFに到達した時点でエラー吐いて落ちます。
Fail:: hGetChar: end of file
で、戻り値も1になってしまうのでGolfもFailed扱いかと思っていたんですが、通りました。Whitspaceの特例なのか他の言語もなのかはわかりませんが、とにかくエラーは見逃してくれるようです。
「LFはサービスしておいたぜ」
FailedにならないとはいえEOFを検知できないのはプログラム的にも面倒だったりします。最後の文字まで読み込んで処理するとか。
今回書いたコードだと出力するまえに改行まで読み取ろうとするので、LFがこないとその行は出力されません。なので、ideoneのinputには最後にLFを余分に付けてあります。
http://ideone.com/brvVk(でも表示上はトリムされてしまう)
ところがこのままGolfにSubmitすると、なぜか動く。ということは
- Golfが勝手にLFを付けてくれた(それってどうなの)
- そもそもtest inputにはLFがあったのに、表示上はトリムされているだけ
のどちらかだとは思うんですが・・・これまた謎です。
「余分についてたLF?ああ消しておいたよ」
実は今回のコードは最後の行でもLFをつけて出力してしまいます。だから
yukaina nakamaga popopopo-n
が期待されていても
yukaina nakamaga popopopo-n\n
と出力するはずなんです。単純に考えてこれ不正解ですよね。
ところがこのまま通っています。Result画面でも\n消えてるし。
ここまでくると最後のLFは除いて判定してくれたと思うんですが・・・意外と親切なんですね(