与えられた行列がカンドルを表すかどうかを判断するプログラムを作成します。quandleは以下の公理に従う単一(非可換、非会合)操作◃を備えたセットです。
- 操作は閉じられます。つまり、
a◃b = c
は、セットの要素である場合a
、常にセットのb
要素です。 - 操作は、自己分散型です
(a◃b)◃c = (a◃c)◃(b◃c)
。 - 操作は右割り可能です:
a
およびの任意のペアに対して、次のようなb
単一の一意性c
があります。c◃a = b
- 操作はべき等です:
a◃a = a
有限のカンドルは正方行列として表すことができます。以下は、5次カンドル(source)の例です。
0 0 1 1 1
1 1 0 0 0
3 4 2 4 3
4 2 4 3 2
2 3 3 2 4
n番目の行とm番目の列(0から始まる)にある値は、n◃mの値です。たとえば、このカンドルでは、4◃1 = 3
。この行列から、カンドルプロパティの一部を簡単に確認できます。
- この5x5マトリックスには値0〜4のみが表示されるため、閉じられます。
- 行列の対角が0 1 2 3 4であるため、べき等です。
- 列に重複値が含まれていないため、右分割可能です。(行は可能であり、通常はそうなります。)
正しい自己分布の特性をテストすることは困難です。ショートカットがあるかもしれませんが、最も簡単な方法は、3つのインデックスの可能な組み合わせを繰り返して、それを検証することm[m[a][b]][c] = m[m[a][c]][m[b][c]]
です。
入力
入力は、0インデックスまたは1インデックス(任意)を使用した正方行列の行のリストになります。各エントリは、0
to 8
(または1
through 9
)の1桁の数字になります。入力形式に柔軟に対応します。許容される形式には次のものがあります。
- 以下のような行列やリスト、貴方の言語の最も自然なフォーマット
[[0 0 0][2 1 1][1 2 2]]
か(0,0,0,2,1,1,1,2,2)
。 - 空白、改行、カンマなどで区切られた値のリスト
- のように連結されたすべての値で構成される単一の文字列
000211122
。
また、行列の転置を入力として使用することもできます(行を列と交換する)。答えにこれを明記してください。
出力
行列の状態をカンドルとして示す単一の真偽値。
カンドルの例
0
0 0
1 1
0 0 0
2 1 1
1 2 2
0 0 1 1
1 1 0 0
3 3 2 2
2 2 3 3
0 3 4 1 2
2 1 0 4 3
3 4 2 0 1
4 2 1 3 0
1 0 3 2 4
非カンドルの例
閉じていない
1
0 0 0
2 1 1
1 9 2
自己分散的ではない
0 0 1 0
1 1 0 1
2 3 2 2
3 2 3 3
(3◃1)◃2 = 2◃2 = 2
(3◃2)◃(1◃2) = 3◃0 = 3
右割り不可
0 2 3 4 1
0 1 2 3 4
3 4 2 2 2
3 3 3 3 3
4 1 1 1 4
0 1 2 3
3 1 2 0
3 1 2 3
0 1 2 3
dem等ではない
1 1 1 1
3 3 3 3
2 2 2 2
0 0 0 0
2 1 0 4 3
3 4 2 0 1
4 2 1 3 0
1 0 3 2 4
0 3 4 1 2