想隆社の窓から

電子書籍の専門会社想隆社からお伝えします

アルバイトの募集問題

ナベアツは、3の倍数と3のつく数のときだけアホになるというギャグを持ちネタにもっていますが、このギャグの元となったFizzBuzz問題は、最低限の知識を持っていないプログラマー志望者を面接でふるいに落とすときに考えられたとか。(Wikipwdiaより)

 しかし、初めてこのFizzBuzzを知った時に、こんなのがわからないプログラマ志望者がいるのかと不思議でしたが、採用を行うようになってなるほどそれなりに機能するのかもと思ったりしています。

 

さて、想隆社にも、基本的な文字列の扱いやネットで検索できることを調べるため、アルバイトの採用試験には、ここ数年次の問題を使っています。


円周率の小数点以下から連続する10 桁を取り出し、それを順に並べた数列をa{n} します。たとえば Pi=3.141592653589793238462643383…なので、
a{1} = 1415926535
a{2} = 4159265358
a{3} = 1592653589

です。先頭に0が連なる場合は、0を取り除いた10ケタに満たないものをa{n}とします。

さて、 a{n}の中で素数であるもののを順に並べて数列をb{n}としたとき、b{300}の数字はなんでしょうか。

 

ところが、最近、これはパスするのに1からnまでの和を求めるのにループに入れたり(連続するその数の積を半分にするだけでいいでしょ!)、配列の要素から重複する要素を取り除くというコードをループ二重でしてしまったりする人が出てきています。力任せというか、考えないコードなんですね。

 O(n^2)という記号を知らなくても感覚的におかしいと感じてほしいのですが、もし気が付かなくても、

my %count =();

@array = grep {!$count{$_}++} @array;

を見て、美しいな、これじゃなきゃと思ってくれればいいと思います。

 

先ほど作った今年の採用クイズは、こういうコードは何十分もかかり、きちんとCPUに手抜きできるように考えた人は数十秒で答えがでる問題にしました。

 

想隆社でアルバイトしてみたい人、お待ちしております。 こちらからどうぞ。