Code Golf
ロト6 の番号をランダムに選択するプログラムをあらゆる言語で実装
目次
1. Code Golf とは
概要
ゴルフとは可能な限り短いストローク数(打数) でカップにボールを入れることを競う スポーツだが、それになぞらえて、可能な限り少ないストローク数(打鍵数、バイト数) で要求仕様を満たすプログラムを作成する遊びをCode Golf と呼ぶ。
歴史
コードを短くする遊びをゴルフと呼ぶようになったのは恐らくPerl コミュニティが発祥であり、
Code Golf オンラインサービス
2. お題 - ロト6 の番号をランダムに選択する
ロト6 のルール
01から43までの43個の数字の中から異なる6個を選択するものである。
via ロト6 - Wikipedia
プログラミング設計
ロト6 のルールを満たすコーディングの仕方はいくつかあると思われるが, 今回は下記のように仕様の統一を図るものとする.
- 01 から 43 までの数値の範囲を生成する.
- 生成した数値のリスト(配列)をシャッフル(ランダムソート)する.
- シャッフルされた数値のリストから6つの数値を取得する.
- 選択された数値のリストを - (ハイフン) でつないで文字列にする.
- 結果を標準出力する.
- その他のルール
- 組み込みライブラリを使用するのは OK
- シャッフル機能が言語に搭載されてない場合,ランダムソート関数/メソッド を実装するものとする(その際のアルゴリズムとしては Fisher-Yates で統一).
- その他の項目に関しても機能毎に出来るだけ構造化することが好ましい.
3. やってみよう
Ruby で書いてみよう
loto6.rb を新規作成
$ vi loto6.rb
実装
#### ヒント
- 範囲オブジェクト (Range)
- シャッフル (Array#shuffle)
- 指定した数を取る (Array#take)
- "-" でつなげる (Array#join)
実行
$ ruby loto6.rb "21-40-35-9-8-2"
4. 各言語別解説
言語一覧
- C
- C#
- Microsoft Visual Basic
- go
- Java
- Processing
- ActionScript
- JavaScript
- Lua
- PHP
- Perl
- Python
- Ruby
- Haskell
- Scala
- Erlang
- R
- Gauche
- awk
- なでしこ
- シェルスクリプト