鳩の巣原理と述べています
N > Mの場合、N個のアイテムをM個のボックスに入れる場合、少なくとも1つのボックスに複数のアイテムを含める必要があります。
多くの人にとって、この原則は他の数学的発表と比較して特別な地位にあります。EWダイクストラが書いたように、
それはいくつかの神秘に囲まれています。それを使用する証明は、しばしば特別なもの、特に独創的なものと見なされます。
チャレンジ
この課題の目的は、ASCIIアート表現を使用して鳩の巣の原理を説明することです。具体的には:
- 入力
N
(アイテムの数)およびM
(ボックスの数)として、N
非負とM
正を取ります。N
より小さい場合がありますM
(その場合、原則が適用されない場合でも)。 - ボックスへのアイテムの可能な割り当ての1つをランダムに選択します。各割り当てには、選択される確率がゼロ以外である必要があります。
次のように、割り当てのASCIIアート表現を作成します。
M
行があり、それぞれがボックスに対応しています。- 各行は、などの非空白文字で始まり
|
ます。 - その文字に続いて、などの別の非空白文字が続き
#
、そのボックス内のアイテムの数だけ繰り返されます。
たとえばN = 8
、考慮してくださいM = 5
。ボックスへのアイテムの選択assigmentである場合に4
、1
、0
、3
、0
、表現であります
|####
|#
|
|###
|
同じプログラムの異なる実行(異なる割り当てをもたらす)は、
|#
|##
|#
|#
|###
表現に関してある程度の柔軟性があります。下記参照。
特定のルール
コードはおよびの値に対して理論的に実行する必要がN
ありM
ます。実際には、メモリサイズまたはデータ型の制限によって制限される場合があります。
出力を観察するだけでは、すべての割り当てにゼロ以外の確率があるかどうかを判断するのに十分ではないため、各サブミッションでは、コードがどのようにそれを達成するかを説明する必要があります。
次の表現バリエーションが許可されます。
- 異なる非空白文字の任意のペアを選択できます。これらは、プログラムの実行全体で一貫している必要があります。
- リプレゼンテーションの90度回転は許容されます。繰り返しますが、選択は一貫している必要があります。
- 末尾または先頭の空白は許可されます。
異なる表現形式と、のための一例としてN = 15
、M = 6
プログラムの2つの実行の結果は、可能性が
VVVVVV
@@@@@@
@@ @@@
@ @@
@
または
VVVVV
@@@ @
@@@ @
@ @ @
@ @ @
@
同様にN = 5
、M = 7
表現の別のバリエーションを使用して、
*
* * * *
UUUUUUU
または
*** **
UUUUUUU
または
*
* *
* *
UUUUUUU
N
< であるため、この場合、原則がどのように適用されないかに注意してくださいM
。
一般的なルール
すべてのプログラミング言語で、プログラムまたは機能が許可されます。標準的な抜け穴は禁止されています。
入力は、合理的な手段で行うことができます。そして、2つの数字の配列や2つの異なる文字列など、任意の形式で。
出力手段とフォーマットも柔軟です。たとえば、出力は文字列のリストまたは改行を含む文字列です。関数の出力引数として返されるか、STDOUTに表示されます。後者の場合、表示幅が制限されているために生じる行の折り返しを心配する必要はありません。
バイト単位の最短コードが優先されます。