前書き
Dobble / SpotItは、最短時間でペアのカードに同じシンボルを見つけ、それを示し、次のペアに移動するカードゲームです。各カードには複数のシンボル(通常バージョンでは8)がありますが、各ペアのカード間で正確に1つのシンボルが共通しています。
チャレンジ
単一のカードに一連の記号(単一のASCII文字)と記号の数を指定して、各カードの記号を含む出力リストカードを作成するプログラムを作成します。明らかに多くの同等の組み合わせがあります。プログラムは、指定された入力に対して最大量のカードを生成する組み合わせのいずれかを記述する必要があります。
それはコードゴルフですので、コードが短いほど良いです。
最も複雑なケースで、宇宙の熱死の前に計算が終了することも素晴らしいことです。
入力
function / stdinへの2つの引数(選択)
それらの最初は、 'ABCDE'や['A'、 'B'、 'C'、 'D'、 'E']のようなシンボルのコレクションです-あなたが選択したフォーマット、文字列、セット、リスト、ストリーム、または選択した言語の慣用的なもの。文字は[A-Za-z0-9]のセットから与えられ、重複はありません(したがって、入力シンボルセットの最大サイズは62です)。これらは必ずしも順序付けられません( 6シンボルの場合にも「yX4i9A」を取得できます)。
2番目の引数は整数で、単一のカードのシンボルの量を示します。シンボルセットのサイズよりも<=になります。
出力
改行で区切られた複数の行を印刷します。各行には単一のカードのシンボルが含まれます。
例
ABC
2
>>>>
AB
BC
AC
または
ABCDEFG
3
>>>>
ABC
BDE
CEF
BFG
AEG
CDG
ADF
または
ABCDE
4
>>>>
ABCD
ヒント
- 作成されるカードの数は、個別のシンボルの量より多くすることはできません。多くの組み合わせでは、かなり小さくなります
- 問題の数学の側面で助けが必要な場合は、いくつかの数学の背景を読みたいかもしれません
これは私の最初のコードゴルフチャレンジですので、フォーマット/スタイルに関する問題の可能性をご容赦ください-コメントで指摘した場合は、エラーを修正しようとします。
('abcdefghijklmnopqrstu', 5)
-> ['abcde', 'afghi', 'ajklm', 'anopq', 'arstu', 'bfjnr', 'bgkpt', 'bhlou', 'bimqs', 'cfkqu', 'cgjos', 'chmpr', 'cilnt', 'dfmot', 'dglqr', 'dhkns', 'dijpu', 'eflps', 'egmnu', 'ehjqt', 'eikor']
または他の21カードのワーキングソリューション。(これは次数4の射影有限平面であることに注意してください)。