主に、「お笑い」「ボードゲーム」「フリーランス」「プログラミング」「音楽」を更新しています。

PHPで数字の組み合わせを取り出す処理を実装

PHP

いつの日かLINEオープンチャットにて質問されていた課題に取り組んだ際のメモです。

質問

質問されていた内容は以下の通りです。

例えば、1~6の数字の中から4個取り出す場合、パターンとしては、
(1,2,3,4) (1,2,3,5) (1,2,3,6) (1,2,4,5) (1,2,4,6) (1,2,5,6) (1,3,4,5) (1,3,4,6) (1,3,5,6) (1,4,5,6) (2,3,4,5) (2,3,4,6) (2,3,5,6) (2,4,5,6) (3,4,5,6)
の15パターンが挙げられます。
「1~aの数字の中からb個取り出す」場合、上記の例だとa=6、b=4ですが、
このようにa,bにそれぞれ値を与えると、上記のようにすべての組み合わせを
求めてくれるPHPプログラムを作成中です。

ソースコード(やソースコードが載ったURLなど)をお教えいただければ大変助かります。
よろしくお願い申し上げます。

作成してみた

今回は最小数、最大数、組み合わせに用いる個数を考えて可変しても対応できるようにしたいという質問ですが、最小1、最大6、組み合わせに用いる数4つに絞って考えてみました。

・まず4つ目の数字をカウントアップし、最大数になったら、その一つ下の数をカウントアップしたうえで再度一番下の数をカウントアップしていきます。
・この工程で、3つ目、4つ目が最大になったら2つ目の数字を1カウントアップして再度同じことをする。
・2つ目、3つ目、4つ目が最大になったら1つ目をカウントアップしてそれ以降の数字を再度カウントアップ。
・1つ目の数字がなりうる数より1でも多くなったら処理終了。

という流れで考えていきました。

上記の考えを基に実装したものをスクショしました。

結果 最大が6の時

結果 最大が10の時

最大値の変数を変更することで4つの組み合わせを表示してくれることが確認できました。

本当はこちらを再起処理にして、組み合わせの数が変わっても対応できるようにしないといけませんが、whileの再起処理をめったに使用しないため、どのように書けばよいか浮かびませんでした….

気が向いたら挑戦してみます!

タイトルとURLをコピーしました