Треки
/
Go
Go
/
Вправи
/
Послідовність
Послідовність

Послідовність

Легка

Вказівки

Дано рядок тексту (англ. string) з цифр. Потрібно вивести всі суміжні підрядки довжини 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

На цьому етапі можна вважати цю вправу завершеною і переходити далі.

Але зачекаймо: можливо, виникне слушне питання: чому функція називається 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. Наприклад, його можна побачити в пошуку в мапах та твердженнях типу.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Go Exercism

Час розпочати Послідовність?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Go, а також 34 концепції165 вправ та справжнє наставництво від людей, і все це безкоштовно.