1128.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. func numEquivDominoPairs(dominoes [][]int) int {
  7. var ret int = 0
  8. var out_size int = len(dominoes)
  9. var seen map[string][]int = make(map[string][]int)
  10. var ok bool
  11. var i int = 0
  12. for i = 0; i < out_size; i += 1 {
  13. var a, b rune = rune(dominoes[i][0]), rune(dominoes[i][1])
  14. var key string = string([]rune{a, b})
  15. var idxs []int
  16. idxs, ok = seen[key]
  17. if ok { seen[key] = append(idxs, i); continue }
  18. var inv_key string = string([]rune{b, a})
  19. idxs, ok = seen[inv_key]
  20. if ok { seen[inv_key] = append(idxs, i); continue }
  21. seen[key] = []int{ i }
  22. }
  23. permuts_num := func (list []int) int {
  24. var ret int = 0
  25. var list_size int = len(list)
  26. var i int = 0
  27. for ; i < list_size; i += 1 {
  28. var j int = i+1
  29. for ; j < list_size; j += 1 { ret += 1 }
  30. }
  31. return ret
  32. }
  33. for _, v := range seen { ret += permuts_num(v) }
  34. return ret
  35. }
  36. func main() {
  37. r := func(dominoes [][]int, exp int) {
  38. fmt.Printf(
  39. "numEquivDominoPairs(%v) = %v | exp: %v\n", dominoes,
  40. numEquivDominoPairs(dominoes), exp,
  41. )
  42. }
  43. r([][]int{{1, 2}, {2, 1}, {3, 4}, {5, 6}}, 1)
  44. r([][]int{{1, 2}, {1, 2}, {1, 1}, {1, 2}, {2, 2}}, 3)
  45. r([][]int{{2, 1}, {1, 2}, {1, 2}, {1, 2}, {2, 1}, {1, 1}, {1, 2}, {2, 2}}, 15)
  46. os.Exit(0)
  47. }