Cómo crear un Validador de Coordenadas en Golang


El reto

Debe crear una función que valide si los parámetros dados son coordenadas geográficas válidas.

Las coordenadas válidas se parecen a las siguientes: “23.32353342, -32.543534534”. El valor devuelto debe ser verdadero o FALSO.

La latitud (que es el primer flotante) puede estar entre 0 y 90, positiva o negativa. La longitud (que es el segundo flotante) puede estar entre 0 y 180, positiva o negativa.

Las coordenadas solo pueden contener dígitos o uno de los siguientes símbolos (incluido el espacio después de la coma)

No debe haber espacio entre el signo menos “-” y el dígito que le sigue.

Aquí hay algunas coordenadas válidas:

  • -23, 25
  • 24.53525235, 23.45235
  • 04, -23.234235
  • 43.91343345, 143
  • 4, -3

Y algunos inválidos:

  • 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

La solución en Golang

Opción 1:

bundle answer
import (
  "strconv"
  "strings"
)
func IsValidCoordinates(coordinates string) bool {
    if strings.Comprises(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
}

Opcion 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') { //verify 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
}

Opción 3:

bundle answer
import "regexp"
func IsValidCoordinates(coordinates string) bool (01)?(0-7)?d(.d+)?)$`)
  return regex.MatchString(coordinates)

Casos de prueba para validar nuestra solución

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 {
			Anticipate(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 {
			Anticipate(IsValidCoordinates(coordinates)).To(Equal(false))
		}
	})
})

Related Articles

Cómo evaluar y comparar diferentes soluciones de paletizado

Cuando busca automatizar su proceso de fin de línea con...

Comments

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Same Category

Cómo evaluar y comparar diferentes soluciones de paletizado

Cuando busca automatizar su proceso de fin de...

Rastreador de actualizaciones de Android 14: ¿cuándo lo recibirá su teléfono?

Édgar Cervantes / Autoridad AndroidEn febrero de 2023,...
spot_img

Stay in touch!

Follow our Instagram