麻雀の手牌が入力として与えられたとき、「待ち」を出力するプログラムを書いてください。
- 字牌なし・萬子のみの想定、つまり、いわゆる「チンイツ」限定で結構です(プログラミングの本質的にはこの限定でまったく問題ないため)
- 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」推奨)などでお知らせいただければ幸いです。
さて、あなたはこの問題が解けるでしょうか? プログラマーの大御所から初心者まで、皆さまの幅広い参加をお待ちしています。
Photo contributed by pvera
- アルゴリズマーの登竜門、「動的計画法・メモ化再帰」はこんなに簡単だった
動的計画法・メモ化再帰というと難しいアルゴリズムであるかのように聞こえますが、実際には小学生でも分かるほど簡単なアルゴリズムです。使用できるメモリと実行時間を意識しながら、同じ計算をする無駄を省くことができれば、かなりの実力者となれます。
- トップクラスだけが知る「このアルゴリズムがすごい」――「探索」基礎最速マスター
プログラミングにおける重要な概念である「探索」を最速でマスターするために、今回は少し応用となる探索手法などを紹介しながら、その実践力を育成します。問題をグラフとして表現し、効率よく探索する方法をぜひ日常に生かしてみましょう。
- 知れば天国、知らねば地獄――「探索」虎の巻
いよいよ今回から、具体的なアルゴリズムの紹介に入っていきます。今回は、プログラミングにおける重要な概念である「探索」について考えます。グラフに変換し、探索する、という流れを知るとともに、そのグラフを効率よく探索する方法について紹介します。
- 細かすぎて伝わりにくいTopCoderのコーディングスキル向上マジック
競技プログラミングはレベルの高い人たちの集まり――そんな考えを持っている初心者の方、TopCoderはあなたのコーディングスキルを爆発的に高める魔法のような場です。今回は、初心者にこそお勧めしたいTopCoderの魅力について考えます。
- 「1000のアルゴリズムを持つ男」vs.「やわらか頭脳」
典型的なアルゴリズムをたくさん知っている人間が最強か――? いいえ、典型的なアルゴリズムを知らなくても、違ったアプローチで答えに迫る方法はいくらでも存在します。短い実行時間で正確な答えを導き出せるかを考える習慣をつけましょう。
- オーダーを極める思考法
プログラムの実行に掛かる時間を把握しておくのは、プログラミングを行う上で基本的な注意点です。今回は、計算量のオーダーについて学びながら、TopCoderのMedium問題を考えてみましょう。
- あなたの論理的思考とコーディング力は3倍高められる
全世界で20万人を超える凄腕のコーダーが集うプログラミングコンテスト「TopCoder」。本稿では、アルゴリズム部門のSRMで取り上げられる問題を考えながら、論理的思考力およびコーディングのテクニックを養っていきます。
Copyright © ITmedia, Inc. All Rights Reserved.