Σειρές

Σειρές

Εύκολο

Οδηγίες

Δεδομένης μιας συμβολοσειράς από ψηφία, εμφάνισε όλες τις συνεχόμενες υποσυμβολοσειρές μήκους n που υπάρχουν μέσα της, με τη σειρά που εμφανίζονται.

Για παράδειγμα, η συμβολοσειρά "49142" έχει τις παρακάτω ακολουθίες 3 ψηφίων:

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

Και τις παρακάτω ακολουθίες 4 ψηφίων:

  • "4914"
  • "9142"

Και αν ζητήσεις ακολουθία 6 ψηφίων από μια συμβολοσειρά 5 ψηφίων, σου αξίζει ό,τι σου τύχει.

Σημείωσε ότι αυτές οι ακολουθίες χρειάζεται μόνο να καταλαμβάνουν γειτονικές θέσεις στην είσοδο· τα ψηφία δεν χρειάζεται να είναι αριθμητικά διαδοχικά.

Υλοποίηση

Όρισε δύο συναρτήσεις: (Δύο; Ναι, μερικές φορές ζητάμε κάτι παραπάνω από τη Go.)

Η All επιστρέφει μια λίστα με όλες τις υποσυμβολοσειρές του s μήκους n.

All(n int, s string) []string

Η UnsafeFirst επιστρέφει την πρώτη υποσυμβολοσειρά του s μήκους n.

UnsafeFirst(n int, s string) string

Σε αυτό το σημείο θα μπορούσες να θεωρήσεις την άσκηση ολοκληρωμένη και να προχωρήσεις παρακάτω.

Μα περίμενε, ίσως κάνεις μια εύλογη ερώτηση: Γιατί η συνάρτηση ονομάζεται Unsafe First; Αν σε ενδιαφέρει, διάβασε παρακάτω για μια επιπλέον άσκηση.

Επιπλέον άσκηση

Μόλις καταφέρεις να περνάει το go test, δοκίμασε το go test -tags asktoomuch. Αυτό χρησιμοποιεί ένα build tag για να ενεργοποιήσει ένα τεστ που δεν ήταν ενεργοποιημένο πριν. Τα build tags επιτρέπουν την επιλογή των αρχείων που θα χρησιμοποιήσει το πακέτο. Στη δική μας περίπτωση, θα καθορίζει ποια αρχεία τεστ θα χρησιμοποιηθούν. Μπορείς να διαβάσεις περισσότερα γι' αυτά στην τεκμηρίωση της Go.

Ίσως παρατηρήσεις ότι δεν μπορείς να ικανοποιήσεις αυτό το τεστ asktoomuch. Χρειαζόμαστε έναν τρόπο να δείξουμε ότι σε ορισμένες περιπτώσεις δεν μπορείς να πάρεις τους πρώτους N χαρακτήρες της συμβολοσειράς. Η UnsafeFirst δεν μπορεί να το κάνει αυτό, αφού επιστρέφει μόνο μια συμβολοσειρά.

Για να το διορθώσουμε, ας προσθέσουμε άλλη μια τιμή επιστροφής στη συνάρτηση. Όρισε τη First(int, string) (first string, ok bool) και δοκίμασε με go test -tags first.

Το δεύτερο όρισμα επιστροφής ok bool είναι ένα συνηθισμένο και ιδιωματικό μοτίβο στη Go. Για παράδειγμα, το βλέπεις στις αναζητήσεις σε Map και στους ισχυρισμούς τύπου.

Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Go Exercism

Έτοιμος να ξεκινήσεις την άσκηση Σειρές;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Go με 34 έννοιες165 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.