抽象代数の多くの重要なトピックには、セットに作用するバイナリ関数が含まれます。このようなトピックの調査では、このような関数の多くのプロパティが定義されています。
課題は、特定のドメイン上の特定のバイナリ関数がこれらのプロパティのうち5つを所有しているかどうかを判断することです。
プロパティ
可能なすべての出力がドメイン内にある場合、バイナリ関数は閉じられます。
関数が一連の入力に適用される順序が結果に影響を与えない場合、バイナリ関数は結合的です。つまり、常にに等しい$
場合、結合的(a $ b) $ c
ですa $ (b $ c)
。値(a $ b)
は入力として使用されるため、連想関数を閉じる必要があることに注意してください。
入力の順序を入れ替えても結果が変わらない場合、バイナリ関数は可換です。言い換えれば、a $ b
常に等しい場合b $ a
。
e
ドメインa $ e = a = e $ a
にすべての要素が存在するような要素がドメインに存在する場合、バイナリ関数にはアイデンティティ要素がありa
ます。
バイナリ関数は、2つの同一の入力に適用してその数を出力として与えた場合、べき等です。言い換えれば、ドメイン内のa $ a = a
すべての場合a
。
入力
行列形式の関数が与えられます。関数の領域は数値0 ... n-1
になります。ここn
で、は行列の辺の長さです。
値(a $ b)
は、行列でa
th行のb
th要素としてエンコードされます。入力行列である場合Q
、次にa $ b
=Q[a][b]
たとえば**
、ドメインのべき乗関数(Pythonの場合)[0, 1, 2]
は次のようにエンコードされます。
[[1, 0, 0]
[1, 1, 1]
[1, 2, 4]]
左右のドメインは同じであるため、マトリックスは常に正方形になります。
リストのリスト、行または列の主要な順序の単一リスト、言語のネイティブマトリックスオブジェクトなど、便利なマトリックス形式を入力として使用できます。ただし、関数を直接入力として使用することはできません。
簡単にするために、行列のエントリはすべて整数になります。あなたはあなたの言語のネイティブ整数型に適合すると仮定するかもしれません。
出力
ブールのリスト、各プロパティに異なる文字を含む文字列など、選択した任意の形式で上記のプロパティのどれを保持するかを指定できます。ただし、24の可能なサブセットのそれぞれに個別の一意の出力が必要ですプロパティの。この出力は、人間が容易に読み取れるものでなければなりません。
例
ドメインn = 4の最大関数:
[[0, 1, 2, 3]
[1, 1, 2, 3]
[2, 2, 2, 3]
[3, 3, 3, 3]]
この関数には、閉包、結合性、可換性、同一性、べき等性の特性があります。
ドメインn = 3のべき乗関数:
[[1, 0, 0]
[1, 1, 1]
[1, 2, 4]]
この関数には上記のプロパティはありません。
ドメインn = 3の加算関数:
[[0, 1, 2]
[1, 2, 3]
[2, 3, 4]]
この関数には、可換性と同一性の特性があります。
ドメインn = 3のKコンビネーター:
[[0, 0, 0]
[1, 1, 1]
[2, 2, 2]]
この関数には、クロージャ、結合性、べき等性のプロパティがあります。
ドメインn = 3の絶対差関数:
[[0, 1, 2]
[1, 0, 1]
[2, 1, 0]]
この関数には、閉包、可換性、および同一性の特性があります。
ドメインn = 3での平均関数、偶数への丸め:
[[0, 0, 1]
[0, 1, 2]
[1, 2, 2]]
この関数には、閉包、可換性、同一性、べき等性の特性があります。
ドメインn = 3の等式関数:
[[1, 0, 0]
[0, 1, 0]
[0, 0, 1]]
この関数には、閉包と可換性の特性があります。
チャレンジ
これはコードゴルフです。標準の抜け穴が適用されます。最小バイトが勝ちます。
c=all(l>)
?