The challenge

You will be given an integer array and your task is to return the sum of elements occupying prime-numbered indices.

The first element of the array is at index ``.

The solution in Golang

Option 1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
package solution 
import "math/big"
func Solve(arr []int) int {
  c := 0
  for i := 0; i < len(arr); i++ {
    n := arr[i]  
    if big.NewInt(int64(i)).ProbablyPrime(0) {
        c += n     
    }
  }
  return c
}

Option 2:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
package solution
func Solve(arr []int) int {
  var sieve = make([]bool, len(arr))
  count := 0
  for i := 2; i < len(arr); i++ {
    if !sieve[i] {
      count += arr[i]
      for j := i * i; j < len(sieve); j += i {
        sieve[j] = true
      }
    }
  }
  return count
}

Option 3:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
package solution 
func Solve(arr []int) int {
  count := 0
  sum := 0
  for i := 2; i < len(arr); i++{ 
    for c, n := i, 2; c > 0; n++{
      if i % n == 0{
        count++
        c /= n
        n--
      }
    }
    if count < 3 {
      sum += arr[i]
    }
    count = 0
  }
  return sum
}

Test cases to validate our solution

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
package solution_test
import (
  . "github.com/onsi/ginkgo"
  . "github.com/onsi/gomega"
)
func dotest(arr []int, exp int) {
    var ans = Solve(arr)
    Expect(ans).To(Equal(exp))
}
var _ = Describe("Example tests", func() {
  It("It should work for basic tests", func() {       
        dotest([]int {}, 0)
        dotest([]int {1,2,3,4},7)  
        dotest([]int {1,2,3,4,5,6}, 13)
        dotest([]int {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},47)       
  })
})