fork download
  1. package main
  2.  
  3. import "fmt"
  4.  
  5. //Prints the complete cayley table for the symmetric group S3
  6. func main() {
  7. //Define S3
  8. type trans func([]int) []int
  9. e := func(x []int) []int {
  10. y := make([]int, 3)
  11. copy(y, x)
  12. return y
  13. }
  14. a := func(x []int) []int {
  15. y := make([]int, 3)
  16. copy(y, x)
  17. y[0], y[1] = y[1], y[0]
  18. return y
  19. }
  20. b := func(x []int) []int {
  21. y := make([]int, 3)
  22. copy(y, x)
  23. y[1], y[2] = y[2], y[1]
  24. return y
  25. }
  26. ab := func(x []int) []int { return a(b(x)) }
  27. ba := func(x []int) []int { return b(a(x)) }
  28. aba := func(x []int) []int { return a(b(a(x))) }
  29.  
  30. s3 := []trans{e, a, b, ab, ba, aba}
  31.  
  32. //Provides an easy way to print an element's name when applied to [1,2,3]
  33. tree := map[int]map[int]string{
  34. 1: map[int]string{2: "e", 3: "b"},
  35. 2: map[int]string{1: "a", 3: "ba"},
  36. 3: map[int]string{1: "ab", 2: "aba"},
  37. }
  38. name := func(x []int) string { return tree[x[0]][x[1]] }
  39.  
  40. //Print cayley table
  41. x := []int{1, 2, 3}
  42. for _, elem1 := range s3 {
  43. for _, elem2 := range s3 {
  44. p := elem1(x)
  45. q := elem2(x)
  46. r := elem1(q)
  47. fmt.Println(name(p), "*", name(q), "=", name(r))
  48. }
  49. }
  50. }
  51.  
Success #stdin #stdout 0.02s 2420KB
stdin
Standard input is empty
stdout
e * e = e
e * a = a
e * b = b
e * ab = ab
e * ba = ba
e * aba = aba
a * e = a
a * a = e
a * b = ab
a * ab = b
a * ba = aba
a * aba = ba
b * e = b
b * a = ba
b * b = e
b * ab = aba
b * ba = a
b * aba = ab
ab * e = ab
ab * a = aba
ab * b = a
ab * ab = ba
ab * ba = e
ab * aba = b
ba * e = ba
ba * a = b
ba * b = aba
ba * ab = e
ba * ba = ab
ba * aba = a
aba * e = aba
aba * a = ab
aba * b = ba
aba * ab = a
aba * ba = b
aba * aba = e