計算中心和換位子羣(golang版本)

D:\go20190906\src\IGroup>go build ZD.go
[0x7FEF9B63C50] ANOMALY: meaningless REX prefix used
# command-line-arguments
[0x7FEF9B63C50] ANOMALY: meaningless REX prefix used

D:\go20190906\src\IGroup>ZD
[0x7FEF9B63C50] ANOMALY: meaningless REX prefix used
ZD3= [0]
DD3= [0 3 4]
ZD4= [0 3]
DD4= [0 3]
ZQ8= [0 1]
DQ8= [0 1]

package main

import (
    "fmt"
)

func pibub(p *[]int){
    n:=len(*p)
    var j,i,d int
    k:=0
    m:=n-1
    for{
       if(k>=m){
            break
       }
        j=m-1
        m=0
        for i=k; i<=j; i++{
            if ((*p)[i]>(*p)[i+1]){
                d=(*p)[i]
                (*p)[i]=(*p)[i+1]
                (*p)[i+1]=d
                m=i
            }
        }
        j=k+1
        k=0
        for i=m; i>=j; i--{
          if ((*p)[i-1]>(*p)[i]){
                d=(*p)[i]
                (*p)[i]=(*p)[i-1]
                (*p)[i-1]=d
                k=i
            }
      }        
    }
    return
}

func findpos(p *[]int,x int)int{
    N:=len(*p)
    for i:=0;i<N;i++{
        if((*p)[i]==x){
            return i
        }
    }
    return -1
}

func removesame(p *[]int)[]int{
    ret:=[]int{}
    N:=len(*p)
    for i:=0;i<N;i++{
        if(findpos(&ret,(*p)[i])==-1){
            ret=append(ret,(*p)[i])
        }
    }
    return ret
}

func IsInCenterOfG(vvG *[][]int,j int)bool{
    N:=len(*vvG)
    for i:=0;i<N;i++{
        ij:=(*vvG)[i][j]-1
        ji:=(*vvG)[j][i]-1
        if(ij!=ji){
            return false
        }
    }
    return true
}

func CenterOfG(vvG *[][]int)[]int{
    ret:=[]int{}
    N:=len(*vvG)
    for i:=0;i<N;i++{
        if(IsInCenterOfG(vvG,i)){
            ret=append(ret,i)
        }
    }
    return ret
}

func Inv(vvG *[][]int,j int)int{
    N:=len(*vvG)
    for i:=0;i<N;i++{
        ij:=(*vvG)[i][j]-1
        if(ij==0){
            return i
        }
    }
    return -1
}

func commutatorOfG(vvG *[][]int)[]int{
    ret:=[]int{}
    ret=append(ret,0)
    N:=len(*vvG)
    for i:=0;i<N;i++{
        I:=Inv(vvG,i)
        for j:=i+1;j<N;j++{
            ij:=(*vvG)[i][j]-1
            J:=Inv(vvG,j)
            IJ:=(*vvG)[I][J]-1
            ijIJ:=(*vvG)[ij][IJ]-1
            ret=append(ret,ijIJ)
        }
    }
    pibub(&ret)
    ret1:=removesame(&ret)
    return ret1
}

var g_D3Mul [][]int=[][]int{
    {1,2,3,4,5,6},
    {2,1,4,3,6,5},
    {3,5,1,6,2,4},
    {4,6,2,5,1,3},
    {5,3,6,1,4,2},
    {6,4,5,2,3,1},
}

var g_D4Mul [][]int=[][]int{
    {1,2,3,4,5,6,7,8},
    {2,1,4,3,6,5,8,7},
    {3,4,1,2,7,8,5,6},
    {4,3,2,1,8,7,6,5},
    {5,7,6,8,1,3,2,4},
    {6,8,5,7,2,4,1,3},
    {7,5,8,6,3,1,4,2},
    {8,6,7,5,4,2,3,1},
}

var g_Q8Mul [][]int=[][]int{
    {1,2,3,4,5,6,7,8},
    {2,1,4,3,6,5,8,7},
    {3,4,2,1,8,7,5,6},
    {4,3,1,2,7,8,6,5},
    {5,6,7,8,2,1,4,3},
    {6,5,8,7,1,2,3,4},
    {7,8,6,5,3,4,2,1},
    {8,7,5,6,4,3,1,2},
}

func main() {
    ZD3:=CenterOfG(&g_D3Mul)
    DD3:=commutatorOfG(&g_D3Mul)
    fmt.Println("ZD3=",ZD3)  
    fmt.Println("DD3=",DD3)
    
    ZD4:=CenterOfG(&g_D4Mul)
    DD4:=commutatorOfG(&g_D4Mul)
    fmt.Println("ZD4=",ZD4)  
    fmt.Println("DD4=",DD4)

    ZQ8:=CenterOfG(&g_Q8Mul)
    DQ8:=commutatorOfG(&g_Q8Mul)
    fmt.Println("ZQ8=",ZQ8)  
    fmt.Println("DQ8=",DQ8)    
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章