こころがホッコリー

ただイカしたRubyistになりたい人生だった。

paizaで破壊的メソッドの返り値を期待するコードを書いてはいけない?

2016/05/22 追記:直っていました!!!!!!! muramurasan.hatenablog.jp


...
...
paizaというサービスがあります。
難易度別・言語別のコーディングテストを受けながら、その成績に応じて求人に応募できるというものです。

paiza.jp

転職活動のみならず、単純にスキルアップ目的にも使えるサービスです。
Ruby On Railsでレールに乗った開発をしていると、フレームワークをどう使うか?のウェイトが大きく、
「ロジックをひたすらゴリゴリコーディングする」という機会が少なくなりがちです。
そこで、手を動かすのを兼ねて、ちょこちょこ利用させていただいています。

さて、このpaizaですが、書き方によってはテストケースが通らないものがあったので、自分への備忘録を込めてブログに残しておきます。

どんな時にテストケースが通らないのか?

paizaの中で以下のような問題がありました。

標準入力で与えられた文字列に対し、末尾4文字を除いたものを標準出力せよ。
(正確な問題文を掲載すると、paizaの利用規約に引っかかると思うので、ぼかしておきます)

私は最初、以下のように回答をしました。

input = gets.to_s
puts input.chomp![0..-5]

破壊的メソッドの返り値を期待していて、ちょっと気持ち悪いですが、
ローカル環境で確認する限りは、所望の結果を得られるようになっています。

このコード、paizaで提出前に行える動作確認では「成功!」と出るのですが、
いざ提出してみると、「失敗(ランタイムエラーです)」となり、全テストケースに不合格となるのです。
(つまり、0点扱い……)

どう書けばよかった?

そもそも、破壊的メソッドを使う必要が無いコードなので、普通に以下のように書きます。

input = gets.to_s
puts input.chomp[0..-5]

これで、提出時のテストケースも通るようになります。うーむ。

まとめ

そもそも、破壊的メソッドで返り値を期待した書き方をしてはダメなのかもしれませんね。(なんでだろう?)
paizaは初回提出時の点数が保存されてしまいます。
大事な局面で同じミスをしないよう……Rubyでpaizaを受験する方は注意してください。

今回、ちょっとしたクレーム的な記事になってしまっていますが、paiza自体はとてもよくできたサービスです。
まだ、paizaを利用したことが無く、「腕試ししてみようかな」という方は是非どうぞ!
Rubyで言えば、Hash操作や、Arrayの操作、文字列操作に強くなりますよ!ほんすこ!