The problem
You should create a perform that may validate if given parameters are legitimate geographical coordinates.
Legitimate coordinates appear to be the next: “23.32353342, -32.543534534”. The return worth ought to be both true or false.
Latitude (which is the primary float) could be between 0 and 90, constructive or detrimental. Longitude (which is the second float) could be between 0 and 180, constructive or detrimental.
Coordinates can solely include digits, or one of many following symbols (together with area after the comma)
There ought to be no area between the minus “-” signal and the digit after it.
Listed below are some legitimate coordinates:
- -23, 25
- 24.53525235, 23.45235
- 04, -23.234235
- 43.91343345, 143
- 4, -3
And a few invalid ones:
- 23.234, – 23.4234
- 2342.43536, 34.324236
- N23.43345, E32.6457
- 99.234, 12.324
- 6.325624, 43.34345.345
- 0, 1,2
- 0.342q0832, 1.2324
The answer in Golang
Possibility 1:
bundle answer
import (
"strconv"
"strings"
)
func IsValidCoordinates(coordinates string) bool {
if strings.Incorporates(coordinates, "e") {
return false
}
coords := strings.Cut up(coordinates, ", ")
coord1, err1 := strconv.ParseFloat(coords[0], 64)
coord2, err2 := strconv.ParseFloat(coords[1], 64)
if err1 != nil || err2 != nil || coord1 < -90 || coord1 > 90 || coord2 < -180 || coord2 > 180 {
return false
}
return true
}
Possibility 2:
bundle answer
import (
"math"
"strings"
"strconv"
)
func IsValidCoordinates(coordinates string) bool {
var (
err error
coord []string
num float64
)
if coord = strings.Cut up(coordinates, ", "); len(coord) != 2 {
return false
}
for indx, c := vary coord {
if strings.ContainsRune(c, 'e') { //test for scientific notation
return false
}
if num, err = strconv.ParseFloat(c, 64); err != nil {
return false
}
if math.Abs(num) > float64(90*(indx+1)) {
return false
}
}
return true
}
Possibility 3:
bundle answer
import "regexp"
func IsValidCoordinates(coordinates string) bool [0-8]?d(.d+)?), -?(180
Check circumstances to validate our answer
bundle solution_test
import (
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("Legitimate coordinates", func() {
validCoordinates := []string{
"-23, 25",
"4, -3",
"24.53525235, 23.45235",
"04, -23.234235",
"43.91343345, 143"}
It("ought to validate the coordinates", func() {
for _, coordinates := vary validCoordinates {
Count on(IsValidCoordinates(coordinates)).To(Equal(true))
}
})
})
var _ = Describe("Invalid coordinates", func() {
invalidCoordinates := []string{
"23.234, - 23.4234",
"2342.43536, 34.324236",
"N23.43345, E32.6457",
"99.234, 12.324",
"6.325624, 43.34345.345",
"0, 1,2",
"0.342q0832, 1.2324",
"23.245, 1e1"}
It("ought to invalidate the coordinates", func() {
for _, coordinates := vary invalidCoordinates {
Count on(IsValidCoordinates(coordinates)).To(Equal(false))
}
})
})