-
Notifications
You must be signed in to change notification settings - Fork 0
/
onboot.go
80 lines (71 loc) · 1.79 KB
/
onboot.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package rating
import (
"sort"
)
var arPairVariants [][2][]int;
func GeneratePairingVariants() {
var arPlayers []int;
for i := 0; i < 8; i++ {
arPlayers = append(arPlayers, i);
}
var arVariantsUnpaired = permutations(arPlayers);
for _, arCheckedVariantUnpaired := range arVariantsUnpaired {
var arCheckedVariant [2][]int;
for i, _ := range arCheckedVariantUnpaired {
iTeam := i % 2;
arCheckedVariant[iTeam] = append(arCheckedVariant[iTeam], arCheckedVariantUnpaired[i]);
}
sort.Ints(arCheckedVariant[0]);
sort.Ints(arCheckedVariant[1]);
bVariantExists := VariantExists(arCheckedVariant);
if (!bVariantExists) {
arPairVariants = append(arPairVariants, arCheckedVariant);
}
}
}
func VariantExists(arCheckedVariant [2][]int) bool {
for _, arVariant := range arPairVariants {
if ((ArraysMatch(arCheckedVariant[0], arVariant[0]) && ArraysMatch(arCheckedVariant[1], arVariant[1])) || (ArraysMatch(arCheckedVariant[1], arVariant[0]) && ArraysMatch(arCheckedVariant[0], arVariant[1]))) {
return true;
}
}
return false;
}
func ArraysMatch(ar1 []int, ar2 []int) bool {
iLen := len(ar1);
if (iLen != len(ar2)) {
return false;
}
for i := 0; i < iLen; i++ {
if (ar1[i] != ar2[i]) {
return false;
}
}
return true;
}
func permutations(arr []int) [][]int { //https://stackoverflow.com/questions/30226438/generate-all-permutations-in-go
var helper func([]int, int)
res := [][]int{}
helper = func(arr []int, n int){
if n == 1{
tmp := make([]int, len(arr))
copy(tmp, arr)
res = append(res, tmp)
} else {
for i := 0; i < n; i++{
helper(arr, n - 1)
if n % 2 == 1{
tmp := arr[i]
arr[i] = arr[n - 1]
arr[n - 1] = tmp
} else {
tmp := arr[0]
arr[0] = arr[n - 1]
arr[n - 1] = tmp
}
}
}
}
helper(arr, len(arr))
return res
}