Дано рядок тексту (англ. string) з цифр. Потрібно вивести всі суміжні підрядки довжини n у цьому рядку в тому порядку, у якому вони йдуть.
Наприклад, рядок тексту «49142» має такі серії з 3 цифр:
А такі серії з 4 цифр:
А якщо попросити серію з 6 цифр із рядка тексту з 5 цифр, то отримаємо те, на що заслужили.
Зауважмо, що ці серії мають займати лише суміжні позиції у вхідних даних; цифри не обовʼязково мають бути послідовними за значенням.
Визначте дві функції: (Дві? Так, іноді ми вимагаємо від Go більшого.)
All повертає масив усіх підрядків s довжини n.
All(n int, s string) []string
UnsafeFirst повертає перший підрядок s довжини n.
UnsafeFirst(n int, s string) string
На цьому етапі можна вважати цю вправу завершеною і переходити далі.
Але зачекаймо: можливо, виникне слушне питання: чому функція називається UnsafeFirst? Якщо цікаво, читаймо далі: на нас чекає бонусна вправа.
Коли go test почне проходити, спробуйте go test -tags asktoomuch.
Тут використовується тег збірки, щоб увімкнути тест, який раніше не був увімкнений.
Теги збірки дозволяють вибирати файли, які використовуватиме пакет.
У нашому випадку вони будуть визначати, які тестові файли буде використано.
Докладніше про них можна прочитати в документації Go.
Можна помітити, що тест asktoomuch ніяк не вдається задовольнити.
Нам потрібен спосіб повідомити, що в деяких випадках не можна взяти перші N символів рядка тексту (англ. string).
UnsafeFirst не може цього зробити, бо повертає лише рядок тексту.
Щоб це виправити, додаймо функції ще одне повернене значення.
Визначте First(int, string) (first string, ok bool) і перевірте за допомогою go test -tags first.
Другий аргумент повернення ok bool - поширений ідіоматичний прийом у Go.
Наприклад, його можна побачити в пошуку в мапах та твердженнях типу.
Зареєструйтеся на Exercism, щоб вивчати й опановувати Go, а також 34 концепції165 вправ та справжнє наставництво від людей, і все це безкоштовно.