Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
52
Task/Permutations/Go/permutations-1.go
Normal file
52
Task/Permutations/Go/permutations-1.go
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
demoPerm(3)
|
||||
}
|
||||
|
||||
func demoPerm(n int) {
|
||||
// create a set to permute. for demo, use the integers 1..n.
|
||||
s := make([]int, n)
|
||||
for i := range s {
|
||||
s[i] = i + 1
|
||||
}
|
||||
// permute them, calling a function for each permutation.
|
||||
// for demo, function just prints the permutation.
|
||||
permute(s, func(p []int) { fmt.Println(p) })
|
||||
}
|
||||
|
||||
// permute function. takes a set to permute and a function
|
||||
// to call for each generated permutation.
|
||||
func permute(s []int, emit func([]int)) {
|
||||
if len(s) == 0 {
|
||||
emit(s)
|
||||
return
|
||||
}
|
||||
// Steinhaus, implemented with a recursive closure.
|
||||
// arg is number of positions left to permute.
|
||||
// pass in len(s) to start generation.
|
||||
// on each call, weave element at pp through the elements 0..np-2,
|
||||
// then restore array to the way it was.
|
||||
var rc func(int)
|
||||
rc = func(np int) {
|
||||
if np == 1 {
|
||||
emit(s)
|
||||
return
|
||||
}
|
||||
np1 := np - 1
|
||||
pp := len(s) - np1
|
||||
// weave
|
||||
rc(np1)
|
||||
for i := pp; i > 0; i-- {
|
||||
s[i], s[i-1] = s[i-1], s[i]
|
||||
rc(np1)
|
||||
}
|
||||
// restore
|
||||
w := s[0]
|
||||
copy(s, s[1:pp+1])
|
||||
s[pp] = w
|
||||
}
|
||||
rc(len(s))
|
||||
}
|
||||
29
Task/Permutations/Go/permutations-2.go
Normal file
29
Task/Permutations/Go/permutations-2.go
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
var a = []int{1, 2, 3}
|
||||
fmt.Println(a)
|
||||
var n = len(a) - 1
|
||||
var i, j int
|
||||
for c := 1; c < 6; c++ { // 3! = 6:
|
||||
i = n - 1
|
||||
j = n
|
||||
for a[i] > a[i+1] {
|
||||
i--
|
||||
}
|
||||
for a[j] < a[i] {
|
||||
j--
|
||||
}
|
||||
a[i], a[j] = a[j], a[i]
|
||||
j = n
|
||||
i += 1
|
||||
for i < j {
|
||||
a[i], a[j] = a[j], a[i]
|
||||
i++
|
||||
j--
|
||||
}
|
||||
fmt.Println(a)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue