团体疗法：确定团体

17

• 对于G中的所有a，b，a * b再次在G中（闭合）

• 对于G中的所有a，b，c，（a * b）* c = a *（b * c）（关联性）
• G中存在元素e，使得G中所有a的e * a = a * e = a（中性元素的存在）
• 对于G中所有a，G中都有ab使得a * b = b * a = e其中e是中性元素（存在逆）

眼镜

``````+ | 0 1 2 3
-----------
0 | 0 1 2 3
1 | 1 2 3 0
2 | 2 3 0 1
3 | 3 0 1 2
``````

``````+ | 1 3 2 0
-----------
1 | 2 0 3 1
0 | 1 3 2 0
2 | 3 1 0 2
3 | 0 2 1 3
``````

测试用例

团体

不重要的

``````* | x
-----
x | x

xxx

Neutral Element: x
``````

H（四元组）

``````* | 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
``````

非团体

循环（缺少关联性的组，或具有中性元素的拟组）

``````* | 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)
``````
``````* | 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（由Quincunx提供，谢谢！）

``````* | 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
``````

另一个半身像

（乘法模数10，不带5）我们显然没有逆，而相乘性由乘法模数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
``````

Justin

Justin

edc65

@edc组不一定是可交换的（可交换组称为abelian）。一个组的定义是完整的（这是通常的定义），任何其他定义都会提供进一步的限制。在这些表中，与中性元素的乘法通常在第一行/列中，并且标头行/列的元素顺序通常相同，但是您仍然可以写下有效表而无需遵循这些约定，我想在这里包含的内容。

1

Martin Ender

Answers:

4

八度，298290270265字符

``````function e=g(s)
c=@sortrows;d=a=c(c(reshape(a=[0 s],b=numel(a)^.5,b)')');
for i=2:b a(a==a(i))=i-1;end;
a=a(2:b,2:b--);u=1:b;
e=(isscalar(e=find(all(a==u')))&&a(e,:)==u&&sum(t=a==e)==1&&t==t')*e;
for x=u for y=u for z=u e*=a(a(x,y),z)==a(x,a(y,z));end;end;end;e=d(e+1);
``````

265：删除了不必要的功能句柄。

270：毕竟，检查`e==h`对于Ë总是满足·E·A = Aħ总是满足一个·H = A是没有必要的。它们不可能不同（e·h =？）。

290：

``````function e=g(s)
c=@sortrows;d=a=c(c(reshape(a=[0 s],b=numel(a)^.5,b)')');
for i=2:b a(a==a(i))=i-1;end;
a=a(2:b,2:b--);u=1:b;
s=@isscalar;e=(s(e=find(all(a==u')))&&s(h=find(all(a'==u')'))&&sum(t=a==e)==1&&t==t')*e;
for x=u for y=u for z=u e*=a(a(x,y),z)==a(x,a(y,z));end;end;end;e=d(e+1);
``````

`c=@sortrows;d=a=c(c(reshape(a=[0 s],b=numel(a)^.5,b)')');` 只需将输入存储到nxn表中（在操作标记处使用零字符），然后按字典顺序对列和行进行排序，以便行和列的顺序相同：

``````+ | z a t b                        + | a b t z
-----------                        -----------
z | t b a z         becomes        a | t a z b
b | z a t b      ============>     b | a b t z
t | a z b t                        t | z t b a
a | b t z a                        z | b z a t
``````

``````0   1   2   3   4
1   3   1   4   2
2   1   2   3   4
3   4   3   2   1
4   2   4   1   3
``````

，我们可以使用以下方法摆脱第一行和第一列`a=a(2:b,2:b--);u=1:b;`

``````3  1  4  2
1  2  3  4
4  3  2  1
2  4  1  3
``````

• 如果存在中性元素e，则`isscalar`）行和一列正好具有row vector的值`u=[1 2 3 ... number-of-elements]`

`s=@isscalar;e=(s(e=find(all(a==u')))&&s(h=find(all(a'==u')'))&&...`

• 如果每个元件一个具有反向元件 a'，则两件事成立：中性元素e每列仅出现一次，每行（`sum(t=a==e)==1`）只出现一次，并且为了满足a'·a = a·a'e的出现是关于翻译是对称的`t==t'`

• a·b可以通过简单的`t(a,b)`索引检索。然后我们检查无聊循环中的关联性：

`for x=u for y=u for z=u e*=a(a(x,y),z)==a(x,a(y,z));end;end;end;`

2

edc65

pawel.boczarski 2015年

1
OCTAVE FTW =）我不确定两件事（来自matlab），但是也许您可以使用它来改善您的答案：可以减少a（f（a（a == a（i）））= i-1到`a(a==a(i))=i-1`？除此之外，您也许可以使用`(...)^.5`代替`sqrt(...)`

@flawr谢谢，他们俩都使用八度（3.8.1版）。
pawel.boczarski 2015年

6

红宝石，401 ... 272

``````f=->s{n=(s.size+1)**0.5
w=n.to_i-1
e=s[0,w].split''
s=s[w,n*n]
m={}
w.times{(1..w).each{|i|m[s[0]+e[i-1]]=s[i]}
s=s[n,n*n]}
s=e.find{|a|e.all?{|b|x=m[a+b]
x==m[b+a]&&x==b}}
e.all?{|a|t=!0
e.all?{|b|x=m[a+b]
t||=x==m[b+a]&&x==s
e.all?{|c|m[m[a+b]+c]==m[a+m[b+c]]}}&&t}&&s}``````

``````f=->s{
n=((s.size+1)**0.5).to_i
w=n-1
e=s[0,w].split'' # create an array of elements of the potential group
s=s[w,n*n]
m={} # this map is what defines our operation
w.times{
(1..w).each{               # for each element in the row of the table
|i|m[s[0]+e[i-1]]=s[i] # put the value into the map
}
s=s[n,n*n]
}
s=e.find{|a| # s is the identity
e.all?{|b|
x=m[a+b]
x==m[b+a]&&x==b # is a the identity?
}
}
e.all?{|a| # implicit return statement
t = !0 # t = false
e.all?{|b| # check for inverses
x=m[a+b]
t ||= x==m[b+a]&&x==s # t is now true if b was a's inverse
e.all?{|c|
m[m[a+b]+c]==m[a+m[b+c]] # check associativity
}
} && t
}&&s
}``````

5

Martin Ender 2015年

`chars`事情是奇数。您正在使用哪个版本的Ruby？
Martin Ender

@MartinBüttner1.9.3

Martin Ender

1

Cristian Lupascu 2015年

4

的JavaScript（ES6）285 243 278

``````F=t=>(
e=t.slice(0,d=Math.sqrt(t.length)|0),
t=t.slice(d).match('.'.repeat(d+1),'g'),
t.map(r=>{
for(v=r[i=0],
j=e.search(v)+1, // column for current row  element
r!=v+e|t.some(r=>r[j]!=r[0])?0:n=v; // find neutral
c=r[++i];
)h[v+e[i-1]]=c
},h={},n=''),
e=[...e],!e.some(a=>e.some(b=>(
h[a+b]==n&&--d, // inverse
e.some(c=>h[h[a+b]+c]!=h[a+h[b+c]]) // associativity
)
))&&!d&&n
)``````
``input { width: 400px; font-size:10px }``
``````Click on textbox to test - Result : <span id=O></span><br>
<input value='...' onclick='O.innerHTML=F(this.value)'> (?)
<br>Groups<br>
<input value='nezdnnezdeezdnzzdneddnez' onclick='O.innerHTML=F(this.value)'> (n)<br>
<input value='ptdkgbnmmbdtgkpmnpmkgdtnpbnptdkgbnmbngktdmbptgmnpbktddknmbpgdtktbpmndkggdpbnmtgk' onclick='O.innerHTML=F(this.value)'> (n)<br>
<input value='yrstuvwxuuxwvytsrvvuxwrytswwvuxsrytxxwvutsryyyrstuvwxrrstyvwxusstyrwxuvttyrsxuvw' onclick='O.innerHTML=F(this.value)'> (y)<br>
<input value='01235789ab46001235789ab4611234089ab6572234519ab67087789a623450b1889ab7345016299ab684501273aab6795012384bb678a0123495334502ab67819445013b67892a5501246789a3b66789b12345a0'onclick='O.innerHTML=F(this.value)'> (0)<br>
Non groups <br>
<input value='12345112345224153335421441532553214' onclick='O.innerHTML=F(this.value)'> (FAIL)<br>
<input value='123456711234567223167543312764544765123556714326645327177542316' onclick='O.innerHTML=F(this.value)'> (FAIL)<br>
<input value='012300123113132210333333' onclick='O.innerHTML=F(this.value)'> (FAIL)<br>``````

2

哈斯克尔391B

``````import Data.Maybe
import Data.List
o a b=elemIndex b a
l£a=fromJust.o a\$l
a§b=[a!!i|i<-b]
f s|isJust j&&and(map(isJust.o h)s)&&and[or[p%q==e|q<-h]&&and[p%(q%r)==(p%q)%r|q<-h,r<-h]|p<-h]=[e]|True="!"where n=floor\$(sqrt(fromIntegral\$length s+1))-1;h=take n s;g=[s§[a..b]|(a,b)<-zip[1+n,2+n+n..][n+n,3*n+1..(n+1)^2]];v=s§[n,1+2*n..n+n*n];a%b=g!!(b£v)!!(a£h);j=o g h;e=v!!fromJust j``````

``````import Data.Maybe
import Data.List

{- rename elemIndex to save characters -}
o a b=elemIndex b a

{- get the index of l in a -}
l£a=fromJust.o a\$l

{- extract a sublist of a with indices b -}
a§b=[a!!i|i<-b]

f s |isJust j {-Identity-}
&&and (map (isJust.o h) s) {-Closure-}
&&and[
or [p%q==e|q<-h] {-Inverse-}
&& and [ p%(q%r)==(p%q)%r | q<-h,r<-h ] {-Associativity-}
|
p<-h
]=[e]
|True="!"
where
{-size-}    n=floor\$(sqrt(fromIntegral\$length s+1))-1
{-horiz-}   h=take n s
{-table-}   g=[s§[a..b]|(a,b)<-zip[1+n,2+n+n..][n+n,3*n+1..(n+1)^2]]
{-vert-}    v=s§[n,1+2*n..n+n*n]
{-operate-} a%b=g!!(b£v)!!(a£h)
j=o g h {-index of the first row identical to the top-}
{-ident-}   e=v!!fromJust j
``````

说明

`f::String->String`将字符串映射到`e::Char`，identity元素或`!`

`where`子句创建了一堆变量和函数，我已经评论过；`v::[Int]`是元素的垂直列表，`h::[Int]`水平。

`%::Char->Char->Char` 将组操作应用于其参数。

`g::[[Int]]`是组表（用于使用取消引用`%`

`j::Maybe Int``v`如果存在则包含身份的索引，否则包含`Nothing`，这就是为什么身份`isJust j`的条件`f`

xebtl 2015年

xebtl
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.