зеркало из https://github.com/softlandia/Go.git
Merge pull request #11 from bradleyjkemp/master
Standardise file naming convention
This commit is contained in:
Коммит
0217421e4f
|
@ -0,0 +1,86 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"math"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"github.com/douglasmakey/golang-algorithms-/utils"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Define struct
|
||||||
|
type numberResult struct {
|
||||||
|
number int64
|
||||||
|
isPrime bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// Define functions
|
||||||
|
|
||||||
|
// isPrime: validate N number is prime
|
||||||
|
func isPrime(n int64) bool {
|
||||||
|
var i, limit int64
|
||||||
|
if n <= 1 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if n == 2 {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if math.Mod(float64(n), 2) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
limit = int64(math.Ceil(math.Sqrt(float64(n))))
|
||||||
|
for i = 3; i <= limit; i += 2 {
|
||||||
|
if math.Mod(float64(n), float64(i)) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// createNrAndValidate: Receive number and validate if is prime, send channel this same
|
||||||
|
func createNrAndValidate(n int64, c chan numberResult) {
|
||||||
|
|
||||||
|
result := new(numberResult)
|
||||||
|
result.number = n
|
||||||
|
result.isPrime = isPrime(n)
|
||||||
|
c <- *result
|
||||||
|
}
|
||||||
|
|
||||||
|
func initGoCalculations(min int64, max int64, c chan numberResult) {
|
||||||
|
var i int64
|
||||||
|
for i = min; i <= max; i++ {
|
||||||
|
go createNrAndValidate(i, c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func primesInRange(min int64, max int64) (primeArr []int64) {
|
||||||
|
defer utils.TimeTrack(time.Now(), "primesInRange")
|
||||||
|
|
||||||
|
// Create channels and defer close
|
||||||
|
c := make(chan numberResult)
|
||||||
|
defer close(c)
|
||||||
|
|
||||||
|
// Execute N goroutines in range number
|
||||||
|
go initGoCalculations(min, max, c)
|
||||||
|
|
||||||
|
for i := min; i <= max; i++ {
|
||||||
|
// Receive numberResult
|
||||||
|
r := <-c
|
||||||
|
if r.isPrime {
|
||||||
|
primeArr = append(primeArr, r.number)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// Receive arguments min max
|
||||||
|
min, _ := strconv.ParseInt(os.Args[1], 10, 64)
|
||||||
|
max, _ := strconv.ParseInt(os.Args[2], 10, 64)
|
||||||
|
fmt.Println(primesInRange(min, max))
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
arr:= [9]int{2,1,4,3,5,9,7,6,8}
|
||||||
|
|
||||||
|
for out:=1; out<len(arr); out++{
|
||||||
|
temp:=arr[out]
|
||||||
|
in := out
|
||||||
|
|
||||||
|
for;in>0 && arr[in-1]>=temp;in--{
|
||||||
|
arr[in] = arr[in-1]
|
||||||
|
}
|
||||||
|
arr[in] = temp
|
||||||
|
}
|
||||||
|
|
||||||
|
for sortedvals:= range arr{
|
||||||
|
fmt.Println(sortedvals)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
arr := [5]int{11, 12, 31, 4, 1}
|
||||||
|
fmt.Println("Initial array is:", arr)
|
||||||
|
fmt.Println("")
|
||||||
|
|
||||||
|
var min int = 0
|
||||||
|
var tmp int = 0
|
||||||
|
|
||||||
|
for i := 0; i < len(arr); i++ {
|
||||||
|
min = i
|
||||||
|
for j := i + 1; j < len(arr); j++ {
|
||||||
|
if arr[j] < arr[min] {
|
||||||
|
min = j
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp = arr[i]
|
||||||
|
arr[i] = arr[min]
|
||||||
|
arr[min] = tmp
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Sorted array: ", arr)
|
||||||
|
}
|
Загрузка…
Ссылка в новой задаче