あなたのスキルで飯は食えるか? 史上最大のコーディングスキル判定
4月4日10時15分配信 ITmedia エンタープライズ
新年度が始まり、新たに社会人となった読者の方も多いかと思います。あるいは、転職で心機一転がんばろうという読者もおられるでしょう。
あなたがもしプログラマーやSEといった職種であれば、ぜひ面白い仕事を手がけていただきたいと思いますが、そもそも開発分野で本当に面白い仕事とは何かを考えたことはありますか?
その答えを論ずる前に、少し前に話題となったトピックを取り上げたいと思います。それは、岡嶋大介氏の「人材獲得作戦」についてです。ご存じない方のために少し補足しておくと、岡嶋氏は、株価のチャート表示と分析ツール「OmegaChart」やターミナルエミュレータ「Poderosa」の開発で知られ、現在はラガルト・テクノロジーを設立、OmegaChartを発展させたソフトウェア「Tactico」をビジネスのメインとしています。
もしかすると、2005年度下期の未踏ソフトウェア創造事業に採択されていた方の中に同氏の名前があったことをご記憶の方もおられるかもしれません。総じていえば、開発と経営の実力を兼ね備えた人物の一人であるということができます。
そんな岡嶋氏は、2009年11月ごろから、自社のエンジニアの採用活動を展開していました。ソフトウェア開発者を採用する際に最も難しいと言われるのは、実際のプログラミング経験を推し量ることです。岡嶋氏は、ともに働く仲間を採用するに当たって、一計を案じました。ちょっとしたパズルを解くアルゴリズムを考えて実装するというプログラミングの実技試験を最初に行い、応募者の実力を図ろうとしたのです。
岡嶋氏の人材獲得作戦で用いられた問題はこちらに公開されており、ソーシャルブックマークなどでさまざまな意見が寄せられていますが、中には、「これは知識問題だ」「業務には必要ない」「これでプログラマーの実力が測れるのか?」などの意見もありました。なお、これらの意見について、岡嶋氏は以下のように述べています。
この問題ができたから優秀な人材とは限らないけれど、できない人は“ほぼ確実に”優秀ではない、のではないかと。
問題についてはネガティブな意見も多くありましたが、岡嶋氏をより失望させたのは、この問題を解けた方が驚くほど少なかったという点です。この点について、岡嶋氏は以下のように述べています。
とくに理解できないのはLv0,1(編注:ギブアップまたは入力を読んでメモリ上の構造に落とすところまでできた方)の人たちが開発現場でどんな仕事をしてるのかだな。ぶっちゃけ、3時間かけてこれということはコードを書く能力は0でしょ? なのに経歴書にはいろいろなプロジェクトにプログラマとして関わった経験があるようだし、こんな人でも何とか使わないといけない状況に置かれた彼らの上司がかわいそうでならない(原文ママ)。
人材獲得作戦に用いられた問題には賛否両論あると思いますが、プログラミングの素養やスキル、あるいは数学的なスキル、論理的思考力を図るにはよい問題ではないかと考えます。もちろん、こうしたスキルがなくともプログラミングの仕事はこなせる、と主張する方もおられるでしょうが、そうした方が開発分野で本当に面白い仕事にありつけるかといえば、それは疑問です。仕事の内容によっては、こうした論理的思考力などの質的な部分より、量的な部分、つまりマンパワー自体が要求されるケースもあることは否定しませんが、そうした仕事は長い目で見ると自動化される対象であり、少なくとも「面白い仕事」とは言い難いといえるのではないかと思います。この議論については割愛しますが、興味のある方は、例えばスラッシュドット・ジャパンの「プログラマーの力量を見極める質問」をご覧いただければと思います。
●あなたのコーディングスキルを丸裸に!
以上のような内容を背景に、今回、ITmediaでは、岡嶋氏に再度出題を依頼。後で紹介している問題を提供いただきました。今回の問題は、ソフトウェアのことを知らない人でも、何をする問題であるかは分かるような内容となっており、また、人材獲得作戦の問題で指摘されていた、「事前の知識だけですべて決まる」という批判をかわすような設問となっています。
制限時間は3時間、プログラム言語・OSは自由です。もしあなたがプログラマーやSEであれば、この問題にぜひ挑戦いただければと思います。回答に要する時間の計測は、読者の方のモラルで行っていただきたいと思います。なお、問題のレベルについては、「人材獲得作戦で用いたものより難しい」(岡嶋氏)とのことです。
問題挑戦の準備をしていただくため、問題は次ページで公開しています。回答の準備を済ませてから先にお進みください。
●問題
麻雀の手牌が入力として与えられたとき、「待ち」を出力するプログラムを書いてください。
・字牌なし・萬子のみの想定、つまり、いわゆる「チンイツ」限定で結構です(プログラミングの本質的にはこの限定でまったく問題ないため)
・1〜9の数字13個からなる文字列を受け取り、できている順子・刻子・アタマを()、待ちの部分を[]でくくって出力してください
・面前かつ槓子は存在しない前提でOKです
・()[]の出力順は自由ですが、順序だけが違うものは同一視してください(例:111222を刻子2つで構成するとき、(111)(222)が(222)(111)に入れ替わるだけのものは同一解答とします)
・多面待ちのときも含めすべての待ちを出力してください
・待ちがないときは何も出力しないでください
コメント
無駄な探索をできるだけしないための工夫、デバッグを効率化するための工夫などがあればソースコードにコメントとして記入してください。
出力例
1112224588899 :
単純なケースです。45を軸にする両面の待ちなので、(111)(222)(888)(99)[45]になります。
1122335556799 :
“99”をアタマの両面か“55”“99”のシャボであるので、(123)(123)(555)(99)[67]、(123)(123)(55)(567)[99]、(123)(123)(99)(567)[55]が正解です。
1112223335559 :
待ちは“9”単騎ですが、(123)(123)(123)(555)[9]と(111)(222)(333)(555)[9]の2つあります。
1223344888999 :
1-4の“ノベタン”待ちですが、4をアタマにしての[23]待ちと、1単騎、4単騎で3個の答えになります。
1112345678999 :
「九蓮宝燈」という役です。1〜9すべてが待ちになっています。これに正しく答えが出るのであれば、プログラムはほぼ正しいでしょう。
・麻雀を知らない人は、順子・刻子・アタマ・待ちといった用語の意味だけ調べてから解答に取りかかってください。これを調べる時間は計算外とします。
なお、この問題は本記事の公開前に、3名の方に回答いただきました。それぞれ、中学生、高校生、大学生です。当初、設問のミスなどもあり、テストが通らなかったというアクシデントもありましたが、いずれも時間内に回答を終えています。また、最短の回答者は40分程度であったこともお伝えしておきます。
問題の解答については後日別記事で紹介します。回答のレビューをご希望の方は、記者のアドレス(makeplex@gmail.com)にコードと回答に要した時間などを提出いただくか、ご自身のブログやソーシャルブックマーク、あるいはTwitter(ハッシュタグ「#makeplex」推奨)などでお知らせいただければ幸いです。
さて、あなたはこの問題が解けるでしょうか? プログラマーの大御所から初心者まで、皆さまの幅広い参加をお待ちしています。【西尾泰三】
あなたがもしプログラマーやSEといった職種であれば、ぜひ面白い仕事を手がけていただきたいと思いますが、そもそも開発分野で本当に面白い仕事とは何かを考えたことはありますか?
その答えを論ずる前に、少し前に話題となったトピックを取り上げたいと思います。それは、岡嶋大介氏の「人材獲得作戦」についてです。ご存じない方のために少し補足しておくと、岡嶋氏は、株価のチャート表示と分析ツール「OmegaChart」やターミナルエミュレータ「Poderosa」の開発で知られ、現在はラガルト・テクノロジーを設立、OmegaChartを発展させたソフトウェア「Tactico」をビジネスのメインとしています。
もしかすると、2005年度下期の未踏ソフトウェア創造事業に採択されていた方の中に同氏の名前があったことをご記憶の方もおられるかもしれません。総じていえば、開発と経営の実力を兼ね備えた人物の一人であるということができます。
そんな岡嶋氏は、2009年11月ごろから、自社のエンジニアの採用活動を展開していました。ソフトウェア開発者を採用する際に最も難しいと言われるのは、実際のプログラミング経験を推し量ることです。岡嶋氏は、ともに働く仲間を採用するに当たって、一計を案じました。ちょっとしたパズルを解くアルゴリズムを考えて実装するというプログラミングの実技試験を最初に行い、応募者の実力を図ろうとしたのです。
岡嶋氏の人材獲得作戦で用いられた問題はこちらに公開されており、ソーシャルブックマークなどでさまざまな意見が寄せられていますが、中には、「これは知識問題だ」「業務には必要ない」「これでプログラマーの実力が測れるのか?」などの意見もありました。なお、これらの意見について、岡嶋氏は以下のように述べています。
この問題ができたから優秀な人材とは限らないけれど、できない人は“ほぼ確実に”優秀ではない、のではないかと。
問題についてはネガティブな意見も多くありましたが、岡嶋氏をより失望させたのは、この問題を解けた方が驚くほど少なかったという点です。この点について、岡嶋氏は以下のように述べています。
とくに理解できないのはLv0,1(編注:ギブアップまたは入力を読んでメモリ上の構造に落とすところまでできた方)の人たちが開発現場でどんな仕事をしてるのかだな。ぶっちゃけ、3時間かけてこれということはコードを書く能力は0でしょ? なのに経歴書にはいろいろなプロジェクトにプログラマとして関わった経験があるようだし、こんな人でも何とか使わないといけない状況に置かれた彼らの上司がかわいそうでならない(原文ママ)。
人材獲得作戦に用いられた問題には賛否両論あると思いますが、プログラミングの素養やスキル、あるいは数学的なスキル、論理的思考力を図るにはよい問題ではないかと考えます。もちろん、こうしたスキルがなくともプログラミングの仕事はこなせる、と主張する方もおられるでしょうが、そうした方が開発分野で本当に面白い仕事にありつけるかといえば、それは疑問です。仕事の内容によっては、こうした論理的思考力などの質的な部分より、量的な部分、つまりマンパワー自体が要求されるケースもあることは否定しませんが、そうした仕事は長い目で見ると自動化される対象であり、少なくとも「面白い仕事」とは言い難いといえるのではないかと思います。この議論については割愛しますが、興味のある方は、例えばスラッシュドット・ジャパンの「プログラマーの力量を見極める質問」をご覧いただければと思います。
●あなたのコーディングスキルを丸裸に!
以上のような内容を背景に、今回、ITmediaでは、岡嶋氏に再度出題を依頼。後で紹介している問題を提供いただきました。今回の問題は、ソフトウェアのことを知らない人でも、何をする問題であるかは分かるような内容となっており、また、人材獲得作戦の問題で指摘されていた、「事前の知識だけですべて決まる」という批判をかわすような設問となっています。
制限時間は3時間、プログラム言語・OSは自由です。もしあなたがプログラマーやSEであれば、この問題にぜひ挑戦いただければと思います。回答に要する時間の計測は、読者の方のモラルで行っていただきたいと思います。なお、問題のレベルについては、「人材獲得作戦で用いたものより難しい」(岡嶋氏)とのことです。
問題挑戦の準備をしていただくため、問題は次ページで公開しています。回答の準備を済ませてから先にお進みください。
●問題
麻雀の手牌が入力として与えられたとき、「待ち」を出力するプログラムを書いてください。
・字牌なし・萬子のみの想定、つまり、いわゆる「チンイツ」限定で結構です(プログラミングの本質的にはこの限定でまったく問題ないため)
・1〜9の数字13個からなる文字列を受け取り、できている順子・刻子・アタマを()、待ちの部分を[]でくくって出力してください
・面前かつ槓子は存在しない前提でOKです
・()[]の出力順は自由ですが、順序だけが違うものは同一視してください(例:111222を刻子2つで構成するとき、(111)(222)が(222)(111)に入れ替わるだけのものは同一解答とします)
・多面待ちのときも含めすべての待ちを出力してください
・待ちがないときは何も出力しないでください
コメント
無駄な探索をできるだけしないための工夫、デバッグを効率化するための工夫などがあればソースコードにコメントとして記入してください。
出力例
1112224588899 :
単純なケースです。45を軸にする両面の待ちなので、(111)(222)(888)(99)[45]になります。
1122335556799 :
“99”をアタマの両面か“55”“99”のシャボであるので、(123)(123)(555)(99)[67]、(123)(123)(55)(567)[99]、(123)(123)(99)(567)[55]が正解です。
1112223335559 :
待ちは“9”単騎ですが、(123)(123)(123)(555)[9]と(111)(222)(333)(555)[9]の2つあります。
1223344888999 :
1-4の“ノベタン”待ちですが、4をアタマにしての[23]待ちと、1単騎、4単騎で3個の答えになります。
1112345678999 :
「九蓮宝燈」という役です。1〜9すべてが待ちになっています。これに正しく答えが出るのであれば、プログラムはほぼ正しいでしょう。
・麻雀を知らない人は、順子・刻子・アタマ・待ちといった用語の意味だけ調べてから解答に取りかかってください。これを調べる時間は計算外とします。
なお、この問題は本記事の公開前に、3名の方に回答いただきました。それぞれ、中学生、高校生、大学生です。当初、設問のミスなどもあり、テストが通らなかったというアクシデントもありましたが、いずれも時間内に回答を終えています。また、最短の回答者は40分程度であったこともお伝えしておきます。
問題の解答については後日別記事で紹介します。回答のレビューをご希望の方は、記者のアドレス(makeplex@gmail.com)にコードと回答に要した時間などを提出いただくか、ご自身のブログやソーシャルブックマーク、あるいはTwitter(ハッシュタグ「#makeplex」推奨)などでお知らせいただければ幸いです。
さて、あなたはこの問題が解けるでしょうか? プログラマーの大御所から初心者まで、皆さまの幅広い参加をお待ちしています。【西尾泰三】
最終更新:4月5日21時9分
ソーシャルブックマークへ投稿 2件
主なニュースサイトで IT の記事を読む
|