エンジニアのスキルを試すコードパズル ─この問題、あなたは解けますか?

第8回宝くじでひと山当てるプログラムをPythonで作るには─辻真吾からの問題

問題

購入者が数字を選択できる、架空の宝くじがあったとします。この宝くじLOTO-Gは、1から40までの数字の中から、5つの数字を選んで、一口500円で購入します。

一度の開催で20万~30万口売れているようです。集まったお金の40%は主催者の取り分です。残りの60%が当籤金として支払われます。これを「当籤準備金」と呼ぶことにします。

抽選によって、5つの数字からなる当たりが1つ決められます。当籤の基準は、1等から3等まで、以下のとおりです。

  • 選んだ5つの数字がすべて当たりと一致した場合⇒ 1等
  • 4つの数字が一致した場合⇒ 2等
  • 3つの数字が一致した場合⇒ 3等

当籤準備金は、以下のルールで山分けされます。

  • 1等⇒ 当籤準備金の半分
  • 2等⇒ 当籤準備金の1/3
  • 3等⇒ 当籤準備金の1/6

それぞれ該当者がいない場合は、当籤準備金は次回以降の開催へ繰り越されることにします。ただし、このことはプログラムを作る際は考慮しなくてもかまいません。

このLOTO-Gを1回開催するプログラムを、以下3点をふまえて作ってください。

  1. 何口売れるか、20万~30万口という幅の中から、それらしい数字が選ばれるような仕組みを考えてみてください。

  2. 決定した口数分の仮想の売り上げを作り出してください。このとき、1つの数字の組が何口か売れることもあることに注意してください。

    また、1人の購入者としてくじを楽しむために、あらかじめ決めた数字と口数をこれに加えます。これはプログラムへの実行時の引数として渡してください。

  3. 当たりの数字を決めたら、次の項目を出力してプログラムを終了してください。

    • 全体の売り上げ金額
    • 主催者の取り分
    • 当たりの数字
    • 1等から3等までの当籤口数と当籤金額
    • あらかじめ選んだ数字の当籤状況

プログラムは、OSのシェルから実行するものとします。実行時の引数の渡し方は特に問いません。


難易度
★☆☆☆(当該領域で、基礎的なことができれば解けると思われるレベル)
言語/領域(Perl、Pythonなど)
Python
解答形式

ファイルアップロード形式

解答評価のポイント
Pythonにはあらかじめ有用なライブラリが多数そろっています。それらを活用してより簡潔なコードで、見やすい出力を作れるかチャレンジしてみてください。
挑戦を開始する前にご準備いただきたいもの

解答は、テキストファイルを解答画面からアップロードしていただきます。Pythonのコーディングに適したエディタを使って書いたコードをテキストファイルに貼り付けて提出してください。あらかじめ「設問1.txt」とテキストファイルを作成しておくと、スムーズです。事前にご準備ください。

その他注意事項
  • 一度挑戦を開始すると、解答を送信しなかった場合でも、1回目のチャレンジは終了となります。
  • 何度でも挑戦できます。
  • 白紙に近いなど、採点不能なものは、フィードバックいたしかねます。
  • この問題の正解およびコードレビューは、技術評論社のサイトこの連載上にて掲載します。
  • 優秀な解答をした人や面白解答した人はニックネーム、解答内容、解答フィードバック内容を公開させていただく可能性があります。ご了承ください。
解答受付先
https://codeiq.jp/ace/tsuji_shingo/q182
掲載期間(開始~終了)
1月25日(金)午前10時~2月8日(金)午前10時
採点可能人数
50人
想定時間(分)
30分~
制限時間
なし

おすすめ記事

記事・ニュース一覧