-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtopedges.go
106 lines (96 loc) · 2.52 KB
/
topedges.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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package main
func (env *Env) topedgesorangeisPlaced() bool {
if ((env.currentCube.cube[ORANGE] >> 24) & 15) == ORANGE {
return true
}
return false
}
func (env *Env) topedgesgreenisPlaced() bool {
if ((env.currentCube.cube[GREEN] >> 24) & 15) == GREEN {
return true
}
return false
}
func (env *Env) topedgesredisPlaced() bool {
if ((env.currentCube.cube[RED] >> 8) & 15) == RED {
return true
}
return false
}
func (env *Env) topedgesblueisPlaced() bool {
if ((env.currentCube.cube[BLUE] >> 24) & 15) == BLUE {
return true
}
return false
}
func (env *Env) topedgesisFinnished() bool {
if ((env.currentCube.cube[ORANGE]>>24)&15) == ORANGE &&
((env.currentCube.cube[GREEN]>>24)&15) == GREEN &&
((env.currentCube.cube[RED]>>8)&15) == RED &&
((env.currentCube.cube[BLUE]>>24)&15) == BLUE {
return true
}
return false
}
func (env *Env) topedges() {
// try to place maximum before
for i := 0; i < 4; i++ {
if env.topedgesorangeisPlaced() && (env.topedgesgreenisPlaced() || env.topedgesredisPlaced() || env.topedgesblueisPlaced()) {
break
}
if env.topedgesgreenisPlaced() && (env.topedgesredisPlaced() || env.topedgesblueisPlaced()) {
break
}
if env.topedgesredisPlaced() && env.topedgesblueisPlaced() {
break
}
env.exec("U")
}
for true {
for i := 0; i < 4; i++ {
if ((env.currentCube.cube[ORANGE] >> 24) & 15) != ORANGE {
env.execFace("R U R' U R U2 R' U", ORANGE)
}
if ((env.currentCube.cube[GREEN] >> 24) & 15) != GREEN {
env.execFace("R U R' U R U2 R' U", GREEN)
}
if ((env.currentCube.cube[RED] >> 8) & 15) != RED {
env.execFace("R U R' U R U2 R' U", RED)
}
if ((env.currentCube.cube[BLUE] >> 24) & 15) != BLUE {
env.execFace("R U R' U R U2 R' U", BLUE)
}
if env.topedgesisFinnished() {
return
}
}
}
}
func (env *Env) topcrossisFinnished(cube [6]int32) bool {
if ((cube[WHITE]>>8)&15) == WHITE &&
((cube[WHITE]>>16)&15) == WHITE &&
((cube[WHITE]>>24)&15) == WHITE &&
((cube[WHITE]>>0)&15) == WHITE {
return true
}
return false
}
func (env *Env) topcross() {
for true {
if ((env.currentCube.cube[ORANGE] >> 24) & 15) == WHITE {
env.execFace("F R U R' U' F'", ORANGE)
}
if ((env.currentCube.cube[GREEN] >> 24) & 15) == WHITE {
env.execFace("F R U R' U' F'", GREEN)
}
if ((env.currentCube.cube[RED] >> 8) & 15) == WHITE {
env.execFace("F R U R' U' F'", RED)
}
if ((env.currentCube.cube[BLUE] >> 24) & 15) == WHITE {
env.execFace("F R U R' U' F'", BLUE)
}
if env.topcrossisFinnished(env.currentCube.cube) {
return
}
}
}