The challenge
Given a month as an integer from 1 to 12, return to which quarter of the year it belongs as an integer number.
For example: month 2 (February), is part of the first quarter; month 6 (June), is part of the second quarter; and month 11 (November), is part of the fourth quarter.
The solution in Golang
Option 1:
1
2
3
4
5
|
package solution
func QuarterOf(month int) int {
return (month + 2) / 3
}
|
Option 2:
1
2
3
4
5
6
7
8
|
package solution
import("math")
func QuarterOf(month int) int {
quarter := math.Ceil(float64(month)/3)
return int(quarter)
}
|
Option 3:
1
2
3
4
5
6
|
package solution
func QuarterOf(month int) int {
q := [12]int{1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4}
return q[month-1]
}
|
Test cases to validate our solution
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
|
package our_test
import (
"time"
"math"
"math/rand"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("Test Example", func() {
It("should test all values", func() {
for i := 1; i < 13; i++ {
Expect(QuarterOf(i)).To(Equal(solution(i)))
}
})
It("should test random values", func() {
rand.Seed(time.Now().UnixNano())
for i := 1; i < 100; i++ {
n := rand.Intn(12)+1
Expect(QuarterOf(n)).To(Equal(solution(n)))
}
})
})
func solution(month int) int {
return int(math.Ceil(float64(month) / 3))
}
|