■どなたか効率のよいアルゴリズムを教えてください!
「あなたの部署に配置された新人プログラマの子からヘルプを頼まれた」という設定で、一つのプログラミング課題に対して参加者全員でより良いコードを作っていくオンラインハッカソン「paizaオンラインハッカソン(略してPOH![ポー!])」をpaizaで12/2(月)11時より開催します。paizaへの会員登録をしなくても参加が可能です。
■オンラインハッカソン概要
開催期間:2013年12月2日(月)11:00~2014年1月8日(水)23:59
参加資格:だれでも何回でも参加可能
プレゼント:参加者の中から抽選で3名様にエナジードリンク・ロックスター250ml×30本セットをプレゼント
対応言語:Java、PHP、Ruby、Python、Perl、C、C++、C#
内容:
20代帰国子女、某有名国立女子大卒で、現在プログラマーをやっています。現在EC サイトのキャンペーンで、2つの異なる商品(値段は同じでも構わない)を購入し、その合計価格が指定の価格以内で最大になる買い物をした人は無料、というキャンペーンのためのプログラムを開発しています。上司が勝手に決めた納期は連休明けです。
Item_a_b = 4500 // a+bの価格
Item_a_c = 500 // a+cの価格
Item_a_d = 2300 // a+dの価格
Item_b_a = 1240 // b+aの価格
Item_b_c = 5020 // b+cの価格
(中略)
if Item_a_b == campaign_price
print “AとBの組み合わせが最大!”
if Item_a_b == campaign_price -1
print “AとBの組み合わせは-1円差でおしい!”
if Item_a_b == campaign_price
(以下略)
上記のようなプログラムを途中まで書いたところなのですが、コードの行数が長く、どうも効率が悪いような気がしますし、バグがないか心配です。このままでは納期に間に合うか不安で夜も眠れません。私は間違ったコードを書いてるのでしょうか。もっと効率のよいアルゴリズムがあると思うと居たたまれません。どうしたらいいでしょうか。
■問題詳細
あなたはとあるECサイトのプログラマです。このECサイトではたくさんの商品を取り扱っていて、 一番安いもので10円、高いものでは100万円の商品まで存在します。 今回、そのECサイトを運営しているあなたの会社は、サイトの集客キャンペーンとして、「組み合せで無料キャンペーン」と銘打って、設定金額に最も近い商品の組み合わせを購入すれば無料となるキャンペーンを開催することにしました。その内容は以下の通りです。
- キャンペーン設定金額として毎日1つの設定金額(整数)mが決められます。
- ECサイトの利用客は、 2つの異なる商品(値段は同じでも構わないが必ず二つ) を購入し、その 合計価格がキャンペーン設定金額m円以下で、かつ最大となるような商品の組合せだった場合、 その商品を無料で手に入れることができます。
※設定金額が23150円、商品は3つ(シュークリーム12,000円とスルメイカ17,000円、大根は11,120円)だった場合、シュークリームと大根(合計23,120円)の組み合わせが無料になります。
- すべての商品の価格と、イベント期間中の 各日のキャンペーン設定金額m円(キャンペーン日数分) が与えられるので、各日のキャンペーン設定金額mに対し、上記ルールのもとでの最大値を計算するプログラムを作成する のがあなたの仕事です。
■プログラミング力が試される!人のコードが見れる!
「同じ課題に対し、他の人はどういうコードを書くんだろう?」
そう思ったことはありませでしょうか。paiza(http://paiza.jp)はコーディング転職サイトなので、日々多くのコードが送られてきますが、制御構造をはじめ、変数名、インデントの仕方、そしてアルゴリズムなど千差万別です。これらを参加者同士で見る事が出来ればスキルアップの場として面白いのではないかと常々思っていましたが、paizaは転職サイトという形を取っているため、そういったことがやりづらい環境でした。
そこでpaizaの転職サービスとは分離する形で、プログラマだったら一度は考える、自分と人のコード比較をしてみたいという思いをかなえる場として今回「paizaオンラインハッカソン(略してPOH![ポー!])」を企画しました。
■気軽に参加できるオンラインハッカソン
企画のタイトル通りいわゆるハッカソンなのですが、ハッカソンはハードルが高くてなかなか参加できない、地方なのでなかなか参加できないなど、興味はあっても気軽に参加できない方もいらっしゃるのではないでしょうか。
そこで「paizaオンラインハッカソン(略してPOH![ポー!])」ではオンラインで誰でも気軽に参加できるように、特に会員登録等しなくても参加できるようにしました。
※ただし他の人の解答を見るためには会員登録が必要です。
※ジャッジが短時間で終わらなかった場合を考えて、結果を伝えるためにメールアドレスの登録が必須としていますが、今回のハッカソンに関連する通知以外では利用いたしません。
paizaと同様に、コードは提出前チェック機能で簡単なテストケースのチェックがその場で出来るようになっています。また提出したコードについても、その場で結果が出るオンラインジャッジとなっています。ジャッジは複数のテストケースによって行われ、バグの有無と実行速度によって判断されます。
他の人の書いたコードが気になると思いますが、こちらも随時上位コードについて公開をしていきます。
※上位のコードしか発表しないので、書き殴ったコードだからといって遠慮せずに試してみてください。
今回の企画はコンテストというよりは、みんなでより効率の良いプログラムを書いてみようという趣旨なので、問題内容の公開もしていますし、ブログ等で解答コードを書いていただいてもよい、という形を取っています。
まず最初は自分の力でチャレンジしてみて、そのあとは人のコードを研究してみるもよし、そこからさらに効率の良いコードに改修してみるもよしです。是非チャレンジしてみてください!
オンラインハッカソン「paizaオンラインハッカソン(略してPOH![ポー!])」|http://paiza.jp/poh/ec-campaign/
paizaは、技術を追い続けることが仕事につながり、スキルのある人がきちんと評価される場を作ることで、日本のITエンジニアの地位向上を目指したいと考えています。
「paiza転職」は、自分のプログラミング力が他社で通用するか(こっそり)腕試しができる、IT/Webエンジニアのための転職サービスです。プログラミングスキルチェック(コーディングのテスト)を受けて、スコアが一定基準を超えれば、書類選考なしで複数の会社へ応募ができます。
まずはスキルチェックだけ、という使い方もできます。すぐには転職を考えていない方でも、自分のプログラミングスキルを客観的に知ることができますので、興味がある方はぜひ一度ご覧ください。
また、paiza転職をご利用いただいている企業の人事担当や、paiza転職を使って転職を成功した方々へのインタビューもございます。こちらもぜひチェックしてみてください。
詳しくはこちら