sironekotoroの日記

Perl と Mac の初心者の備忘録

Perl入学式で勉強した後の力試しに良さげなサービスの紹介

こんちゃす。sironekotoroです。

このエントリは Perl入学式 Advent Calendar 2017 - Qiita 6日目のエントリです。
昨日はPerl入学式東京の名講師、 @xtetsuji さんでした。

いきなり私事ですが

最近色々あり、転職だー!と意気込んでいろいろと見ているのですが、面白げなサイトを見つけました。

注意:これはPerl入学式 Advent Calendar 2017 のエントリですが、Perl入学式がこのサイトを推している訳ではありません。

転職サイトPaizaで行なっているスキルチェックです。

paiza.jp

Paizaのスキルチェック

ランクは難易度の高い順に S,A,B,C,D の5段階があります。
ランクDの問題は80問ほどあり、Perl入学式で学んだ知識で十分解けます。
ランクCは40問ほど。こちらはリファレンス使わないと面倒な問題がありますが、解けます。
入学式に参加している人、または入学式を終えた人の力試しとしてちょうど良いです。

やってみる、その前に

以下は、ログインしなくても解ける掛け算の問題です。

掛け算 (paizaランク D 相当)
https://paiza.jp/learning/multiplication

ここでおもむろに

  • 入力欄右上の「使用する言語」で「Perl」を選択
  • 入力欄の文字を全部消す
  • 入力欄に print $]; と入力
  • 「提出前動作確認」ボタンを押す

当然不正解となります。 しかし

提出コードのアウトプット 5.022001

Perlのバージョンが5.022であり、Perl入学式でインストールしたPerlと互換性がありそう、ってことが分かります。
また、ここで使えるPerlは、List::Util等の便利モジュールも利用可能になっています。

やってみる

この掛け算問題はデモなので、解法の例を挙げておきます。
本番の問題を情報共有するのはNGです。 あと、データは標準入力から改行付きで渡されるので、chomp忘れないように気をつけましょう。

use strict;
use warnings;

# 最初の行の入力を変数`$first_num`で受け取る
my $first_num = <STDIN>;

# 次の行の入力を変数`$second_num`で受け取る
my $second_num = <STDIN>;

# 上記二つの変数についてる改行文字を削除する
chomp ($first_num , $second_num);

# 二つの変数を掛け算して、答えを$answerに入れる
my $answer = $first_num * $second_num;

# $answerを出力する
print STDOUT "$answer\n"

もひとつ、短いバージョンも

use 5.022;
my @a = <STDIN>;
chomp @a;
say $a[0]*$a[1];

Paizaのスキルチェックで良かったところ

普段自分のコードでは除外している考えやシチュエーションがあり、新鮮で面白いです。
本職のプログラマさんはこんな感じで時間に追われながらコード書いてるんかなぁ、と思ったり、テストコードちゃんと用意するのも大変そうとか、本職プログラマの方のお仕事の大変さがちょっとだけ見える気がします。

Paizaのスキルチェックでイケてないところ

提出時にいくつかのテストケースでテストを行うのですが、そのテストデータは公開されません。
ですので、テストに通らない時は「何がおかしいのか?」ってのを問題文や入力値のとりうる範囲から探っていくことになり、これが割とキツイです。
あと、他の人のアーティスティックな回答とか見られないの残念かつもったいない気がしますね・・・まぁ、本来は転職に使う用のものなので仕方ないか。

おまけ

なお、転職活動や業務引き継ぎ資料の作成そっちのけでこのサイトのスキルチェックを行い、ランクA、Bが解けなくて本当に悔しくなり、

  • 「この問題、遠い昔に聞いた『順列』とやらを使えば良さそうだけど、分からないからコードにできない」
  • 「このデータ、規則性はありそうだけどコードで表す方法わからない」
  • 「やはりアルゴリズムとか数学の勉強しなくてはいけないのでは?」

となり、N予備校に入学したのを良いことに中学数学からやり直すという本末転倒、目的と手段の入れ替わりみたいなことになってますが、楽しいんでokとします。解の公式、美しいですよね。

明日は・・・まだ決まってない?ので是非誰か参加を〜!