Étant donné une string de chiffres, renvoie toutes les sous-chaînes contiguës de longueur n de cette string, dans l'ordre où elles apparaissent.
Par exemple, la string « 49142 » contient les séries de 3 chiffres suivantes :
Et les séries de 4 chiffres suivantes :
Et si tu demandes une série de 6 chiffres à partir d'une string de 5 chiffres, tant pis pour toi.
Note que ces séries doivent seulement occuper des positions adjacentes dans l'entrée ; les chiffres n'ont pas besoin d'être consécutifs au niveau numérique.
Définis deux fonctions : (Deux ? Oui, parfois on en demande un peu plus à Go.)
All renvoie une liste de toutes les sous-chaînes de s de longueur n.
All(n int, s string) []string
UnsafeFirst renvoie la première sous-chaîne de s de longueur n.
UnsafeFirst(n int, s string) string
À ce stade, tu peux considérer cet exercice comme terminé et passer à la suite.
Mais attends, tu te poses peut-être une question légitime : pourquoi cette fonction s'appelle-t-elle Unsafe First ? Si ça t'intéresse, lis la suite pour un exercice bonus.
Une fois que tu fais passer go test, essaie go test -tags asktoomuch.
Cela utilise un build tag pour activer un test qui ne l'était pas auparavant.
Les build tags permettent de sélectionner les fichiers que le package utilise.
Dans notre cas, ils déterminent quels fichiers de test sont utilisés.
Tu peux en lire plus à ce sujet dans la documentation Go.
Tu remarqueras peut-être que tu ne peux pas satisfaire ce test asktoomuch. Il nous faut un moyen de signaler que, dans certains cas, on ne peut pas prendre les N premiers caractères de la string. UnsafeFirst ne peut pas le faire, puisqu'elle ne renvoie qu'une string.
Pour corriger ça, ajoutons une autre valeur de retour à la fonction.
Définis First(int, string) (first string, ok bool) et teste avec go test -tags first.
Le deuxième argument de retour, ok bool, est un motif courant et idiomatique en Go.
On le retrouve par exemple dans la recherche dans une Map et dans les assertions de type.
Inscris-toi sur Exercism pour apprendre et maîtriser Go avec 34 concepts165 exercices, et un vrai mentorat humain, le tout gratuitement.