| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package main
- import (
- "fmt"
- "os"
- )
- func numEquivDominoPairs(dominoes [][]int) int {
- var ret int = 0
- var out_size int = len(dominoes)
- var seen map[string][]int = make(map[string][]int)
- var ok bool
- var i int = 0
- for i = 0; i < out_size; i += 1 {
- var a, b rune = rune(dominoes[i][0]), rune(dominoes[i][1])
- var key string = string([]rune{a, b})
- var idxs []int
- idxs, ok = seen[key]
- if ok { seen[key] = append(idxs, i); continue }
- var inv_key string = string([]rune{b, a})
- idxs, ok = seen[inv_key]
- if ok { seen[inv_key] = append(idxs, i); continue }
- seen[key] = []int{ i }
- }
- permuts_num := func (list []int) int {
- var ret int = 0
- var list_size int = len(list)
- var i int = 0
- for ; i < list_size; i += 1 {
- var j int = i+1
- for ; j < list_size; j += 1 { ret += 1 }
- }
- return ret
- }
- for _, v := range seen { ret += permuts_num(v) }
- return ret
- }
- func main() {
- r := func(dominoes [][]int, exp int) {
- fmt.Printf(
- "numEquivDominoPairs(%v) = %v | exp: %v\n", dominoes,
- numEquivDominoPairs(dominoes), exp,
- )
- }
- r([][]int{{1, 2}, {2, 1}, {3, 4}, {5, 6}}, 1)
- r([][]int{{1, 2}, {1, 2}, {1, 1}, {1, 2}, {2, 2}}, 3)
- r([][]int{{2, 1}, {1, 2}, {1, 2}, {1, 2}, {2, 1}, {1, 1}, {1, 2}, {2, 2}}, 15)
- os.Exit(0)
- }
|