Dado un string de dígitos, devuelve todos los substring contiguos de longitud n que aparezcan en él, en el orden en que aparecen.
Por ejemplo, el string «49142» tiene las siguientes series de 3 dígitos:
Y las siguientes series de 4 dígitos:
Y si pides una serie de 6 dígitos de un string de 5 dígitos, te mereces lo que te toque.
Ten en cuenta que estas series solo tienen que ocupar posiciones adyacentes en el string que recibes; los dígitos no necesitan ser numéricamente consecutivos.
Define dos funciones: (¿Dos? Sí, a veces le pedimos más a Go.)
All devuelve una lista de todas las subcadenas de s con longitud n.
All(n int, s string) []string
UnsafeFirst devuelve la primera subcadena de s con longitud n.
UnsafeFirst(n int, s string) string
En este punto podrías considerar el ejercicio terminado y seguir adelante.
Pero espera, tal vez te hagas una pregunta razonable: ¿por qué la función se llama Unsafe First? Si te interesa, sigue leyendo para un ejercicio adicional.
Una vez que logres que go test pase, prueba con go test -tags asktoomuch.
Esto usa una etiqueta de compilación para habilitar una prueba que antes no estaba habilitada.
Las etiquetas de compilación permiten seleccionar los archivos que usará el paquete.
En nuestro caso, controlará qué archivos de prueba se usan.
Puedes leer más sobre esto en la documentación de Go.
Puede que notes que no puedes dejar contenta a esta prueba asktoomuch. Necesitamos una forma de indicar que, en algunos casos, no puedes tomar los primeros N caracteres del string. UnsafeFirst no puede hacerlo, ya que solo devuelve un string.
Para solucionarlo, agreguemos otro valor de retorno a la función.
Define First(int, string) (first string, ok bool) y pruébalo con go test -tags first.
El segundo argumento de retorno ok bool es un patrón común e idiomático en Go.
Por ejemplo, lo ves en las búsquedas en mapas y en las aserciones de tipo.
Regístrate en Exercism para aprender y dominar Go con 34 conceptos165 ejercicios y mentoría humana real, todo gratis.