Perl入学式in東京第3回復習問題score.pl(再チャレンジ編・その3)

Perl入学式の復習問題の新旧回答・自己比較レビューの第3回です。

#前回、前々回はこちらです。
第1回→Click!
第2回→Click!

さっそくですが、今日の問題はこちら。
workshop-2013-03/practice.md at master · perl-entrance-org/workshop-2013-03 · GitHub

Perl入学式 #3 復習問題 - 3

my $boolfool = {
    name        => 'boolfool',
    affiliation => 'namba.pm',
    perl        => 40,
    python      => 10,
    ruby        => 20,
    php         => 0,
    binary      => 0,
};

score.plには上記のようなハッシュリファレンスがいくつか宣言してあります

五段階評価

 0 - 19 =>
20 - 39 => ★
40 - 59 => ★★
60 - 79 => ★★★
80 - 99 => ★★★★
100     => ★★★★★
----
boolfool:
perl: ★★
python:
ruby:php:
binary:
  • それぞれの人物の言語毎の成績を上記を参考に5段階表示して出力して下さい
  • 全角文字を出力するので冒頭にbinmode STDOUT, ":utf8";と書いておくとよいでしょう

はい。まあ、最初にこの問題みたときは「てごわすぎ〜」ってかなり引いた記憶がありますが、実際はやってみると案外、手を動かしてるうちに「あれ、これでOKなのかな」みたいになった気もします。

その最初の回答はこんなでした。
#この問題は前回にGistに上げていたのでそれを貼り付けます。

で、実行結果はこんな。

papix:
 perl: ★★★
 python: ★★
 ruby: ★★
 php: ★★★★
 binary: ★
boolfool:
 perl: ★★
 python:
 ruby: ★
 php: ★
 binary:
moznion:
 perl: ★★★★★
 python: ★★★
 ruby: ★★★★
 php: ★★
 binary: ★★
binarian:
 perl:
 python:
 ruby:
 php: ★★★★★
 binary: ★★★★★
uzulla:
 perl:
 python:
 ruby:
 php:
 binary:

はい。うっすらインデント付けてるのがいろんな意味で微妙な気もしますが・・まあ星の数自体は合ってるかな、と。

んで、次にそのちょうど一ヶ月後ぐらいに作った最近の回答です。
#これもついでにというか、比べやすいようにGistに上げました。

実行結果はこんな。

papix:
perl: ★★★
python: ★★
ruby: ★★
php: ★★★★
binary: ★

boolfool:
perl: ★★
python:
ruby: ★
php: ★
binary:

moznion:
perl: ★★★★★
python: ★★★
ruby: ★★★★
php: ★★
binary: ★★

binarian:
perl:
python:
ruby:
php: ★★★★★
binary: ★★★★★

uzulla:
perl:
python:
ruby:
php:
binary:

まあ、実質同じですね。こっちではインデントじゃなくて人ごとに1行空けるようにしてみました。
解答例(問題文についてるやつ)により則した感じで・・

回答の仕方を見てみると、最初に「people」と「lang」の配列を作ったところまでは一緒で、その後がけっこう違いますね。

最初のトライだと変数「$rate」に★を代入してるけど、直近のだとその都度printしてる・・
なんかパッと見た感じ、最初にやったほうがスマートに感じられますがどうなんでしょうか。
実行速度が速い方が正義な気はしますけど(このレベルだったら勿論ほぼ関係なさそうとはいえ)、んー、どうなのか。
まあ、直近の方だと変数が一個少ないのでシンプルっちゃシンプルな気もしますが・・

自分的にはもう少し、前の回答から明快にベターな感じになってて欲しかったところですが、全然そういうんでもないのがつらいような面白いような、という感じでした。

次回は同シリーズの4問目、「スコアが 60 以上の人の名前を格納する」の回答例を比べてみたいと思います。
#問題はこちら。
workshop-2013-03/practice.md at master · perl-entrance-org/workshop-2013-03 · GitHub