【ハウツー】
お正月と言えば年賀状です。年賀状(お年玉付郵便はがき)には抽選がついています。このお年玉の景品ですが、去年(2004年)の1等は「わくわくハワイ旅行」「ノートパソコン」「マッサージいす」などでした。意外と豪華ですよね。
今年こそ1等を当てるぞ、と意気込まなくても、5等の当たりは期待できます。というのも、100枚中3枚は、必ず5等が当たるからです。5等の景品は、切手シートですが、34枚に1枚は当たるわけですから、多少時間を割いて当たりかどうか確認しても損はないのです!
しかし、年賀状の当たりを確認をするのは意外と面倒です。新聞と年賀状を何度も視線を往復して確認する必要があります。そこで、日本語のプログラミング言語である「ひまわり」を使って、簡単な当選チェッカーを作ろうと思います。今年は、自作のツールで年賀状の当選確認の負担を軽減しましょう。
プログラムを作る前に、当選の仕組みを確認してみましょう。年賀状には、宛名面の下方に当選番号が印刷されています。宛名の左側には、年賀状の組が印刷されており、右側に6桁の番号が印刷されています。年賀状の当たり判定に使うのは、右側に印刷されている番号です。
![]() |
年賀状の右下の番号をチェック |
1等では、この6桁の番号の全部が発表された番号と同じである必要があります。しかし、5等では6桁の番号のうち、下2桁(右から2桁)だけが合致してれば当選になります。たとえば、5等の条件が「下2桁が31」なら、番号834131は「当たり」で、312345は「はずれ」ということです。
肝心の2005年度の当たり番号ですが、この原稿執筆時点では、残念ながら判明していないのです。実際の当選番号は、新聞や郵便局のWEB上で発表されます。発表は去年も一昨年も1月19日だったので、今年も19日に発表されるはずです。
プログラムでは、以下のようなCSVファイルを、当選番号のデータとして使うことにしました。以下は、2004年度の当選番号なので、今年の19日になったら書き換えて使いましょう。CSVファイルは、エクセルなどで読み込んで、編集してすることもできますが、この程度ならメモ帳で開いて直接書き換えた方が早いでしょう。
ファイル名: 当選番号.csv
1等,834131 2等,24826 3等,4332 3等,7237 4等,411 5等,10 5等,43 5等,83
ではさっそくプログラムを作ってみようと思います。プログラムを作るときは、問題をできるだけ明確にする必要があります。しかし、いきなりプログラムを書こうと思っても、初めはなかなか手がつけられないものです。そんなときは、プログラムの基本である以下の3点を明確にすると、何を書けばよいのか見えて来ます。
ここで(1)の入力は、年賀状の番号にあたります。そして、(2)処理は、番号が当選しているか調べる処理、(3)出力は、言うまでもなく当選しているか結果を画面に表示するということです。
今回はプログラムの作成に「ひまわり」を使うので、入力と出力の問題はとても簡単になります。入力は「○○を、尋ねる」、出力は「○○と、言う」という命令を、それぞれ1行書くだけだからです。
ただ、当選しているか調べる処理の部分を書くのには、ちょっと頭をひねることになります。
当選結果を調べるには、ユーザーが入力した番号の下?桁が、当選番号と合致しているか調べれば良いのです。そこで、文字列の右から?文字を切り出す命令「RIGHT(文字列, 文字数)」を使って下?桁を切り出します。「RIGHT」命令は以下のように使います。
番号は、123456< 結果は、RIGHT(番号, 2) 結果を、表示。
![]() |
「123456」の下2桁を切り出すプログラム |
では、実際に当選番号を確認する処理を作ってみましょう。以下のプログラムは、ユーザーから番号を入力してもらい、それを当選データと照らし合わせて当選していれば、何等かを表示するというプログラムです。
※当選データのロード・・・・・・・・・・・(1)
「当選番号.csv」を、当選データに、読む。
当選データを、表示。※確認のため読んだ内容を表示
※ユーザーからデータの入力・・・・・・・・(2)
「年賀状の番号は?」と、尋ねて、入力番号に、代入。
※当選か否かを判定する・・・・・・・・・・(3)
当選データを、反復(
※当選データから情報を取り出す・・・・(4)
「,」で、区切る
何等は、それ#0
番号は、それ#1
※下何桁を切り出したら良いか調べる・・(5)
番号の、文字数。それを、番号桁数に、代入。
入力番号は、RIGHT(入力番号, 番号桁数)
※当選かどうか判定・・・・・・・・・・(6)
もし、入力番号が、番号ならば(
「当たり{何等}でした。」と、言う
抜ける。
)
)
まず、(1)で当選データのCSVファイルをロードしています。ロードしたデータは、「当選データ」という変数に記憶しておきます。そして、(2)でユーザーに年賀状の番号を尋ねます。ユーザーから入力された番号は、「入力番号」という変数に記憶します。
そして、(3)で当選データを1行ずつ繰り返しながら当選かどうか判定します。データを1行ずつ取り出して処理をするには、「反復」命令を使います。(4)ではデータから取り出した「何等か,当選番号」の1行をカンマ「,」で区切って、それぞれ、「何等」「番号」という変数に割り振っています。(5)では、番号が何桁あるのかを調べ、「RIGHT」命令を使って「入力番号」の下?桁を切り出しています。あとは(6)で当選したかどうかを調べ、もし当選なら何等だったのかを表示します。
これで、入力→処理→出力の概要ができましたので、これを元に使いやすく改良してみましょう。まず、初めに思いつくのは、6桁もの数字をいちいち全部打ち込むのは効率が悪いなぁということです。
6桁の数字を入力しても、ほとんどの年賀はがきは「はずれ」なのです。そこで、はじめは、下2桁だけを入力し、もし、当選の可能性があれば、全ての桁を再度入力してもらうという方法です。
次に、当たりが出たときは、効果音を出して注意を促すようにしましょう。これで、年賀状の数字だけを見て入力していれば良くなります。
そうして完成したのが、こちらの年賀状当選判定チェッカーです。当選番号.csvと同じフォルダにコピーして、ひまわりで実行してみてください(当選番号.csvは2004年度のものなので、書き換えを忘れないでください)。
![]() |
![]() |
お年玉付郵便はがきの引き換え期間は7月下旬までのようです。忘れないうちに、年賀状をチェックして豪華景品を入手しましょう! 自作の年賀状チェッカーであっという間に当選チェックを終えることができたらなら、きっと、今年は良い年になることでしょう!
私事ですが、現在、ひまわりの後継ソフト「なでしこ」のベータ版を公開しています。そして、今年はこの「なでしこ」を使った連載をさせていただくことになりました。毎回、10行以内の短い実用プログラムを作成し、「10行でここまでできる!」というのを世の中に知らしめるという挑戦企画です。お楽しみに。
| 日本語のプログラミング言語「ひまわり」を使ってみよう! [2004/8/6] |
| 「ひまわり」に続く日本語プログラミング言語「なでしこ」の開発が本格化 [2004/11/8] |
| デル、28日まで最新モデルを対象としたアップグレード無料キャンペーン実施 [10:32 5/23] |
| 【特別企画】eX.computerにIvyBridge採用モデルが登場! 旧世代と比較してみる [09:54 5/23] |
| 東芝、「dynabook Satellite」のWebオリジナルモデル2機種 [20:16 5/22] |
| 上海問屋、iPhone4S/4やiPadを水から守る、IPX8相当の防水性能フィルム [19:45 5/22] |
| MARSHAL、HDDのクローンを作成できてPlayStation 3でも使えるHDDスタンド [19:10 5/22] |
|
VIA、49ドルのAndroid PCシステム「APC」発表 [10:53 5/23] エンタープライズ |
|
海上保安庁、海洋情報を地図上に表示する「海洋政策支援情報ツール」を公開 [10:51 5/23] ネット |
|
日本国債を「A+」に格下げ、「財政健全化計画は切迫感に欠ける」 - フィッチ [10:45 5/23] ライフ |
|
メルセデス・ベンツ「G 55 AMG long "mastermind" Limited」発売 [10:43 5/23] ライフ |
|
東京都交通局、路面電車の日にイベント開催 - 都電6000形も登場 [10:40 5/23] ネット |