Serien

Serien

Einfach

Anleitung

Gegeben ist ein String aus Ziffern. Gib alle zusammenhängenden Teilstrings der Länge n in diesem String in der Reihenfolge aus, in der sie vorkommen.

Zum Beispiel hat der String "49142" die folgenden dreistelligen Serien:

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

Und die folgenden vierstelligen Serien:

  • "4914"
  • "9142"

Und wenn du von einem fünfstelligen String eine sechsstellige Serie verlangst, dann hast du es nicht anders verdient.

Beachte, dass diese Serien in der Eingabe nur benachbarte Positionen einnehmen müssen; die Ziffern müssen nicht aufeinanderfolgende Zahlenwerte sein.

Implementierung

Definiere zwei Funktionen: (Zwei? Ja, manchmal verlangen wir Go etwas mehr ab.)

All gibt eine Liste aller Teilstrings von s mit der Länge n zurück.

All(n int, s string) []string

UnsafeFirst gibt den ersten Teilstring von s mit der Länge n zurück.

UnsafeFirst(n int, s string) string

An diesem Punkt kannst du diese Übung als abgeschlossen betrachten und weitermachen.

Aber warte, vielleicht stellst du dir eine berechtigte Frage: Warum heißt die Funktion Unsafe First? Wenn du neugierig bist, lies weiter, es folgt eine Bonus-Übung.

Bonus-Übung

Sobald du go test zum Laufen gebracht hast, probiere go test -tags asktoomuch aus. Dies nutzt ein Build-Tag, um einen Test zu aktivieren, der vorher nicht aktiviert war. Build-Tags ermöglichen die Auswahl von Dateien, die vom Paket verwendet werden. In unserem Fall steuert es, welche Testdateien verwendet werden. Mehr dazu kannst du in der Go-Dokumentation lesen.

Vielleicht fällt dir auf, dass du diesen asktoomuch-Test nicht bestehen kannst. Wir brauchen eine Möglichkeit, zu signalisieren, dass du in manchen Fällen nicht die ersten N Zeichen des Strings nehmen kannst. UnsafeFirst kann das nicht, da es nur einen String zurückgibt.

Um das zu beheben, fügen wir der Funktion einen weiteren Rückgabewert hinzu. Definiere First(int, string) (first string, ok bool) und teste mit go test -tags first.

Das zweite Rückgabeargument ok bool ist ein gängiges und idiomatisches Muster in Go. Zum Beispiel siehst du es bei Map-Lookups und Typ-Assertions.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Go Exercism

Bereit, mit Serien zu starten?

Melde dich bei Exercism an, um Go mit 34 Konzepte165 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.