Écrivez un programme qui détermine si la table de multiplication du magma fini donné représente un groupe. Un magma est un ensemble avec une opération binaire qui est fermée, cela signifie
- pour tout a, b dans G, a * b est à nouveau dans G (Fermeture)
Soit (G, *) un magma. (G, *) est un groupe si
- pour tout a, b, c dans G, (a * b) * c = a * (b * c) (associativité)
- il existe un élément e dans G tel que e * a = a * e = a pour tout a dans G (Existence d'un élément neutre)
- pour tout a dans G il y a ab dans G tel que a * b = b * a = e où e est l'élément neutre (Existence d'Inverse)
Spécifications
L'entrée est une chaîne de n ^ 2-1 caractères (un caractère pour chaque élément du magma, autorisé est 0-9, az) et représente simplement la table lue ligne par ligne, en omettant le nom de l'opérateur. Vous pouvez supposer que l'entrée représente un magma valide (cela signifie que chacun des éléments apparaît exactement une fois dans la ligne / colonne d'en-tête).
Exemple: nous avons ici le tableau de Z_4
+ | 0 1 2 3
-----------
0 | 0 1 2 3
1 | 1 2 3 0
2 | 2 3 0 1
3 | 3 0 1 2
La chaîne d'entrée sera 012300123112302230133012
. (Ou si nous utilisons des symboles, cela pourrait aussi l'être nezdnnezdeezdnzzdneddnez
). Sachez que la séquence des éléments dans la ligne et dans la colonne ne doit pas nécessairement être la même, donc la table de Z_4 pourrait également ressembler à ceci:
+ | 1 3 2 0
-----------
1 | 2 0 3 1
0 | 1 3 2 0
2 | 3 1 0 2
3 | 0 2 1 3
Cela signifie également que l'élément neutre n'est pas nécessairement dans la première colonne ou la première ligne.
S'il s'agit d'un groupe, le programme doit renvoyer le caractère représentant l'élément neutre. Sinon, il doit renvoyer une valeur falsifiée (distincte des valeurs 0-9 az)
Cas de test
Les non-groupes peuvent facilement être construits en modifiant simplement un chiffre de la chaîne ou en modifiant artificiellement les tables définissant une opération qui contredit l'un des axiomes du groupe.
Groupes
Banal
* | x
-----
x | x
xxx
Neutral Element: x
H (groupe quaternion)
* | p t d k g b n m
-------------------
m | b d t g k p m n
p | m k g d t n p b
n | p t d k g b n m
b | n g k t d m b p
t | g m n p b k t d
d | k n m b p g d t
k | t b p m n d k g
g | d p b n m t g k
ptdkgbnmmbdtgkpmnpmkgdtnpbnptdkgbnmbngktdmbptgmnpbktddknmbpgdtktbpmndkggdpbnmtgk
Neutral Element: n
D_4
* | y r s t u v w x
-------------------
u | u x w v y t s r
v | v u x w r y t s
w | w v u x s r y t
x | x w v u t s r y
y | y r s t u v w x
r | r s t y v w x u
s | s t y r w x u v
t | t y r s x u v w
yrstuvwxuuxwvytsrvvuxwrytswwvuxsrytxxwvutsryyyrstuvwxrrstyvwxusstyrwxuvttyrsxuvw
Neutral Element: y
Z_6 x Z_2
x | 0 1 2 3 5 7 8 9 a b 4 6
---------------------------
0 | 0 1 2 3 5 7 8 9 a b 4 6
1 | 1 2 3 4 0 8 9 a b 6 5 7
2 | 2 3 4 5 1 9 a b 6 7 0 8
7 | 7 8 9 a 6 2 3 4 5 0 b 1
8 | 8 9 a b 7 3 4 5 0 1 6 2
9 | 9 a b 6 8 4 5 0 1 2 7 3
a | a b 6 7 9 5 0 1 2 3 8 4
b | b 6 7 8 a 0 1 2 3 4 9 5
3 | 3 4 5 0 2 a b 6 7 8 1 9
4 | 4 5 0 1 3 b 6 7 8 9 2 a
5 | 5 0 1 2 4 6 7 8 9 a 3 b
6 | 6 7 8 9 b 1 2 3 4 5 a 0
01235789ab46001235789ab4611234089ab6572234519ab67087789a623450b1889ab7345016299ab684501273aab6795012384bb678a0123495334502ab67819445013b67892a5501246789a3b66789b12345a0
Neutral Element: 0
A_4
* | i a b c d e f g h j k l
---------------------------
i | i a b c d e f g h j k l
a | a b i e c d g h f l j k
b | b i a d e c h f g k l j
c | c f j i g k a d l b e h
d | d h k b f l i e j a c g
e | e g l a h j b c k i d f
f | f j c k i g d l a h b e
g | g l e j a h c k b f i d
h | h k d l b f e j i g a c
j | j c f g k i l a d e h b
k | k d h f l b j i e c g a
l | l e g h j a k b c d f i
iabcdefghjkliiabcdefghjklaabiecdghfljkbbiadechfgkljccfjigkadlbehddhkbfliejacgeeglahjbckidfffjckigdlahbegglejahckbfidhhkdlbfejigacjjcfgkiladehbkkdhflbjiecgalleghjakbcdfi
Neutral Element: i
Non-groupes
Une boucle (groupe manquant d'associativité, ou quasi-groupe avec élément neutre)
* | 1 2 3 4 5
-------------
1 | 1 2 3 4 5
2 | 2 4 1 5 3
3 | 3 5 4 2 1
4 | 4 1 5 3 2
5 | 5 3 2 1 4
12345112345224153335421441532553214
Neutral Element: 1
(2*2)*3 = 4*3 = 5 != 2 = 2*1 = 2*(2*3)
Une boucle IP (depuis http://www.quasigroups.eu/contents/download/2008/16_2.pdf )
* | 1 2 3 4 5 6 7
-----------------
1 | 1 2 3 4 5 6 7
2 | 2 3 1 6 7 5 4
3 | 3 1 2 7 6 4 5
4 | 4 7 6 5 1 2 3
5 | 5 6 7 1 4 3 2
6 | 6 4 5 3 2 7 1
7 | 7 5 4 2 3 1 6
123456711234567223167543312764544765123556714326645327177542316
Neutral Element: 1
2*(2*4) = 2*6 = 5 != 7 = 3*4 = (2*2)*4
Monoid (par Quincunx, merci!)
Les monoïdes sont des magmas avec associativité et un élément neutre.
* | 0 1 2 3
-----------
0 | 0 1 2 3
1 | 1 3 1 3
2 | 2 1 0 3
3 | 3 3 3 3
012300123113132210333333
Neutral Element: 0
Un autre monoïde
(Multiplication mod 10, sans le 5) Nous n'avons évidemment pas d'inverses, et l'associativité est donnée par la multiplication modulo 10.
* | 1 2 3 4 6 7 8 9
-------------------
1 | 1 2 3 4 6 7 8 9
2 | 2 4 6 8 2 4 6 8
3 | 3 6 9 2 8 1 4 7
4 | 4 8 2 6 4 8 2 6
6 | 6 2 8 4 6 2 8 4
7 | 7 4 1 8 2 9 6 3
8 | 8 6 4 2 8 6 4 2
9 | 9 8 7 6 4 3 2 1
Neutral Element: 1 12346789112346789224682468336928147448264826662846284774182963886428642998764321
0-9a-z
règle: ideone.com/vC0ewt
10101010
l'ordre est le même et le neutre est dans la dernière ligne et colonne