Séries

Séries

Fácil

Instruções

Dada uma string de dígitos, produza todas as substrings contíguas de comprimento n dessa string, na ordem em que aparecem.

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

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

E as seguintes séries de 4 dígitos:

  • "4914"
  • "9142"

E se você pedir uma série de 6 dígitos a partir de uma string de 5 dígitos, você merece o que receber.

Repare que essas séries só precisam ocupar posições adjacentes na entrada; os dígitos não precisam ser numericamente consecutivos.

Implementação

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

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

All(n int, s string) []string

UnsafeFirst retorna a primeira substring de s de comprimento n.

UnsafeFirst(n int, s string) string

Neste ponto, você pode considerar este exercício concluído e seguir em frente.

Mas espere, talvez você faça uma pergunta razoável: por que a função se chama Unsafe First? Se você tiver interesse, continue lendo para um exercício bônus.

Exercício bônus

Quando você conseguir fazer o go test passar, experimente go test -tags asktoomuch. Isso usa uma build tag para habilitar um teste que não estava habilitado antes. As build tags permitem selecionar quais arquivos o pacote vai usar. No nosso caso, elas vão controlar quais arquivos de teste são usados. Você pode ler mais sobre isso na documentação do Go.

Você pode perceber que não consegue deixar este teste asktoomuch satisfeito. Precisamos de uma forma de sinalizar que, em alguns casos, não dá para pegar os N primeiros caracteres da string. UnsafeFirst não consegue fazer isso, já que só retorna uma string.

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

O segundo argumento de retorno, ok bool, é um padrão comum e idiomático em Go. Por exemplo, você o vê em buscas em mapas e em asserções de tipo.

Editar via GitHub O link abre em uma nova janela ou aba
Go Exercism

Tudo pronto para começar Séries?

Crie sua conta no Exercism para aprender e dominar Go com 34 conceitos165 exercícios e mentoria humana de verdade, tudo de graça.