با گرفتن یک رشته از رقمها، همهی زیررشتههای پیوستهی به طول n در آن رشته را به ترتیبی که ظاهر میشوند خروجی بدهید.
برای مثال، رشتهی "49142" سریهای سهرقمی زیر را دارد:
و سریهای چهاررقمی زیر را:
و اگر از یک رشتهی پنجرقمی سری ششرقمی بخواهید، هر چه گیرتان بیاید حق خودتان است.
توجه داشته باشید که این سریها فقط باید موقعیتهای مجاور را در ورودی اشغال کنند؛ لازم نیست رقمها از نظر عددی متوالی باشند.
دو تابع تعریف کنید: (دو تا؟ بله، گاهی ما بیشتر از 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 را امتحان کنید.
این از یک برچسب ساخت استفاده میکند تا آزمونی را فعال کند که پیشتر فعال نبود.
برچسبهای ساخت امکان انتخاب فایلهایی را فراهم میکنند که بسته از آنها استفاده میکند.
در مورد ما، این برچسب مشخص میکند که کدام فایلهای آزمون استفاده شوند.
میتوانید دربارهی آنها بیشتر در مستندات Go بخوانید.
ممکن است متوجه شوید که نمیتوانید این آزمون asktoomuch را راضی کنید.
ما به راهی نیاز داریم که نشان دهد در برخی موارد نمیتوانید N کاراکتر اول رشته را بردارید.
UnsafeFirst نمیتواند این کار را انجام دهد، چون تنها یک رشته برمیگرداند.
برای رفع این مشکل، بیایید یک مقدار بازگشتی دیگر به تابع اضافه کنیم.
تابع First(int, string) (first string, ok bool) را تعریف کنید و با go test -tags first آزمایش کنید.
آرگومان بازگشتی دوم، ok bool، الگویی رایج و اصطلاحی در Go است.
برای نمونه، آن را در جستوجو در Map و تأییدهای نوع میبینید.