Dado un string de dígitos, devuelve todas las subcadenas contiguas de longitud n de ese string 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 a partir de un string de 5 dígitos, te mereces lo que te salga.
Ten en cuenta que estas series solo tienen que ocupar posiciones adyacentes en la entrada; los dígitos no tienen por qué ser numéricamente consecutivos.
Define dos funciones: (¿Dos? Sí, a veces te pedimos más en Go.)
All devuelve un array con todos los substrings de s de longitud n.
All(n int, s string) []string
UnsafeFirst devuelve el primer substring de s de longitud n.
UnsafeFirst(n int, s string) string
En este punto puedes dar por terminado este ejercicio y seguir adelante.
Pero espera, quizá te hagas una pregunta razonable: ¿por qué la función se llama Unsafe First? Si te interesa, sigue leyendo para hacer un ejercicio extra.
Cuando consigas 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án qué archivos de prueba se usan.
Puedes leer más sobre ellas en la documentación de Go.
Puede que te des cuenta de que no hay forma de hacer que esta prueba asktoomuch pase. Necesitamos una forma de indicar que en algunos casos no puedes tomar los primeros N caracteres del string. UnsafeFirst no puede hacer eso, ya que solo devuelve un string.
Para solucionarlo, vamos a añadir otro valor devuelto a la función.
Define First(int, string) (first string, ok bool) y prueba con go test -tags first.
El segundo argumento devuelto, ok bool, es un patrón común e idiomático en Go.
Por ejemplo, lo ves en búsquedas en mapas y aserciones de tipo.
Regístrate en Exercism para aprender y dominar Go con 34 conceptos165 ejercicios y mentoría humana real, todo gratis.