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

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

この記事を読むのに必要な時間:およそ 1 分

問題

購入者が数字を選択できる,架空の宝くじがあったとします。この宝くじ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分~
制限時間
なし

著者プロフィール

辻真吾(つじしんご)

現在は大学で情報科学を駆使して生物医学の研究をしていることになっている37歳。小学生の頃にMSX2でLOGOを動かして以来コンピュータが好き。C++やJavaに傾倒した時期もあったが,最近はPythonが最高だと思っている。著書に『Pythonスタートブック』(技術評論社)。

コメント

コメントの記入