Série

Série

Fácil

Instruções

Dada uma string de algarismos, produz todas as substrings contíguas de comprimento n dessa string, pela ordem em que aparecem.

Por exemplo, a string "49142" tem as seguintes séries de 3 algarismos:

  • "491"
  • "914"
  • "142"

E as seguintes séries de 4 algarismos:

  • "4914"
  • "9142"

E se pedires uma série de 6 algarismos a uma string de 5 algarismos, mereces tudo o que te acontecer.

Repara que estas séries só têm de ocupar posições adjacentes na string de entrada; os algarismos não precisam de ser numericamente consecutivos.

Implementação

Define duas funções: (Duas? Sim, às vezes pedimos mais ao Go.)

All devolve uma lista de todas as substrings de s com comprimento n.

All(n int, s string) []string

UnsafeFirst devolve a primeira substring de s com comprimento n.

UnsafeFirst(n int, s string) string

Neste momento, podes considerar este exercício concluído e seguir em frente.

Mas espera, talvez faças uma pergunta razoável: porque é que a função se chama Unsafe First? Se estiveres interessado, continua a ler para um exercício bónus.

Exercício bónus

Quando conseguires que o go test passe, experimenta go test -tags asktoomuch. Isto usa uma etiqueta de compilação para ativar um teste que não estava ativado antes. As etiquetas de compilação permitem selecionar os ficheiros que o pacote vai usar. No nosso caso, vão controlar quais os ficheiros de teste que são usados. Podes ler mais sobre isto na documentação do Go.

Podes notar que não consegues satisfazer este teste asktoomuch. Precisamos de uma forma de sinalizar que, em alguns casos, não podes obter os primeiros N carateres da string. UnsafeFirst não consegue fazer isso, porque só devolve uma string.

Para resolver isso, vamos adicionar outro valor devolvido à função. Define First(int, string) (first string, ok bool) e testa com go test -tags first.

O segundo argumento de retorno ok bool é um padrão comum e idiomático em Go. Por exemplo, encontras isso em consultas de mapas e asserções de tipos.

Editar via GitHub A ligação abre numa nova janela ou separador
Go Exercism

Estás pronto para começar Série?

Inscreve-te no Exercism para aprenderes e dominares Go com 34 conceitos165 exercícios, e mentoria humana real, tudo grátis.