تمرین عملی به تمرینهایی گفته میشود که طراحی شدهاند تا به دانشجوها اجازه دهند یک مسئلهی دلبخواه را حل کنند، با این هدف که از مفاهیمی که تا اینجا آموختهاند بهره ببرند.
علاقهمندید اولین تمرین عملی خود را به یک ترک اضافه کنید؟ نگاهی به مستندات افزودن تمرین عملی بیندازید یا ویدیوی آموزشی ما را تماشا کنید 👇
میتوانید با اجرای دستورهای زیر از پوشهی ریشهی ترک، بهسرعت یک تمرین عملی تازه بسازید:
bin/fetch-configlet
bin/configlet create --practice-exercise <slug>
برای اطلاعات بیشتر، مستندات configlet create را ببینید.
فرادادهی تمرین عملی در کلید exercises.practice در فایل config.json تعریف میشود. این فراداده، UUID، اسلاگ و موارد بیشتر تمرین را مشخص میکند.
{
"exercises": {
"practice": [
{
"uuid": "8ba15933-29a2-49b1-a9ce-70474bad3007",
"slug": "leap",
"name": "Leap",
"practices": ["if-statements", "numbers", "operator-precedence"],
"prerequisites": ["if-statements", "numbers"],
"difficulty": 1
}
]
}
}
practicesکلید practices باید اسلاگ مفاهیمی را فهرست کند که این تمرین عملی به دانشجو اجازه میدهد فعالانه آنها را تمرین کند.
strings). در چنین مواردی توصیه میکنیم چند تمرین خوب انتخاب کنید که افراد را به فکر کردن دربارهی آن مفاهیم به شیوههای جالب وادارند. برای مثال، تمرینهایی که به UTF-8، اتصال رشتهها، برشماری کاراکترها و مواردی از این دست نیاز دارند، همه نمونههای خوبی هستند.prerequisitesکلید prerequisites مفاهیمی را فهرست میکند که دانشجو باید تکمیل کرده باشد تا به این تمرین عملی دسترسی پیدا کند.
strings، optional-params و implicit-return باشد.loops یا recursion حل میشود)، نگهدارنده باید همان رویکردی را انتخاب کند که میخواهد با آن قفل تمرین را باز کند، با در نظر گرفتن مسیر دانشجو در طول ترک. برای مثال، در نمونهی حلقه/بازگشت، ممکن است فکر کنند این تمرین تمرین خوبی برای شروع loops است یا شاید ترجیح دهند آن را برای بعد بگذارند تا recursion را آموزش دهند. همچنین میتوانند از تحلیلگر استفاده کنند تا دانشجو را به امتحان کردن رویکرد جایگزین ترغیب کنند: «آفرین که این را با حلقهها حل کردید. ممکن است بخواهید آن را با استفاده از Recursion هم امتحان کنید.»هر تمرین عملی پوشهی خودش را درون پوشهی exercises/practice ترک دارد. نام پوشهی تمرین عملی باید با ویژگی slug تمرین عملی مطابقت داشته باشد، همانطور که در فایل config.json تعریف شده است.
یک تمرین عملی چهار نوع فایل دارد:
این فایلها به دانشجو ارائه میشوند تا به توضیح تمرین کمک کنند.
.docs/introduction.md: محیط و پیشینهی تمرین را معرفی میکند (اختیاری).docs/introduction.append.md: متن مقدمهی اضافی که پس از مقدمهی موجود افزوده میشود (اختیاری).docs/instructions.md: دستورهای تمرین را ارائه میدهد (الزامی).docs/instructions.append.md: متن مقدمهی اضافی که پس از دستورهای موجود افزوده میشود (اختیاری).docs/hints.md: راهنماییهایی به دانشجو ارائه میدهد تا کمکش کند در تمرین گیر نکند (اختیاری)این فایلها به دانشجو ارائه نمیشوند، بلکه برای تعریف فرادادهی تمرین به کار میروند.
.meta/config.json: شامل اطلاعات فراداده دربارهی تمرین است (الزامی).meta/design.md: طراحی تمرین را توصیف میکند (اختیاری).meta/tests.toml: شامل اطلاعاتی دربارهی این است که چه تستهایی پیادهسازی شدهاند (اختیاری)این فایلها رویکردهای تمرین را توصیف میکنند.
.approaches/introduction.md: مقدمهای بر رایجترین رویکردهای تمرین (اختیاری).approaches/config.json: فرادادهی رویکردها (اختیاری).approaches/<approach-slug>/content.md: توصیف رویکرد (اختیاری).approaches/<approach-slug>/snippet.txt: نمونهای که رویکرد را نمایش میدهد (اختیاری)این فایلها مقالههای تمرین را توصیف میکنند.
.articles/config.json: فرادادهی مقالهها (اختیاری).articles/<article-slug>/content.md: توصیف مقاله (اختیاری).articles/<article-slug>/snippet.md: نمونهای که مقاله را نمایش میدهد (اختیاری)فایلهای مخصوص هر زبان، مانند فایلهای پیادهسازی و تست. نام این فایلها مختص هر ترک است.
exercises
└── practice
└── isogram
├── .approaches
| ├── for-loop
| | ├── content.md
| | └── snippet.txt
| ├── config.json
| └── introduction.md
├── .articles
| ├── performance
| | ├── content.md
| | └── snippet.md
| └── config.json
├── .docs
| ├── introduction.md
| ├── instructions.md
| └── hints.md
├── .meta
| ├── config.json
| ├── design.md
| ├── tests.toml
| └── Example.cs (example implementation)
├── Isogram.cs (stub implementation)
└── IsogramTests.cs (tests)
.docs/introduction.md
هدف: معرفی محیط و پیشینهی تمرین به دانشجو.
حضور: الزامی است اگر تمرین، یک تمرین Problem Specifications با فایل introduction.md را پیادهسازی کند
اگر تمرین یک تمرین Problem Specifications را پیادهسازی میکند، محتوای این فایل باید با فایل introduction.md آن تمرین Problem Specifications مطابقت داشته باشد. configlet این قابلیت را دارد که محتوای این فایل را بهطور خودکار همگامسازی کند.
اگر تمرین بر پایهی یک تمرین Problem Specifications نیست، موارد زیر را در نظر بگیرید:
ما برای ایمن بودن محتوای Exercism برای همه ارزش زیادی قائل هستیم و به همین دلیل هنگام تصمیمگیری دربارهی مناسب بودن یا نبودن داستانها، اغلب جانب احتیاط را رعایت میکنیم. هرچند در مورد آنچه ادغام میکنیم دقت میکنیم، میدانیم که آگاه بودن از آنچه ممکن است مشکلدار تلقی شود دشوار است، بنابراین همیشه فرض میکنیم شما با حسن نیت عمل میکنید و تلاش میکنیم در بازبینی، هر مشکلی را به شیوهای غیرتقابلی پیدا کنیم. اگر میخواهید داستانی را با ما بررسی کنید، لطفاً @exercism/leadership را منشن کنید تا با هم به آن نگاه کنیم. در ادامه چند نکتهی راهنما آمده است:
# Introduction
Bob is a lackadaisical teenager. In conversation, his responses are very limited.
.docs/introduction.append.md
هدف: متن مقدمهی اضافی که پس از مقدمهی موجود افزوده میشود.
حضور: اختیاری
در برخی موارد (کمیاب)، ممکن است بخواهید فایل introduction.md تمرین را گسترش دهید، برای مثال زمانی که تمرین تستهایی را پیادهسازی کرده است که دستورهای موجود آنها را پوشش نمیدهند.
ترکی که نمیخواهد Bob از پیامهای غیر ASCII پشتیبانی کند، ممکن است موارد زیر را اضافه کند:
# Introduction append
## Note
As part of his teenage rebellion, Bob has decided to only communicate using ASCII.
فایلهای افزودنی باید با یک سرصفحهی H1 شروع شوند. این سرصفحه نمایش داده نمیشود، اما باید همچنان وجود داشته باشد. سرصفحهی H1 اغلب با یک سرصفحهی H2 دنبال میشود که به جدا کردن محتوای عمومی از محتوای مخصوص ترک کمک میکند.
.docs/instructions.md
هدف: ارائهی دستورهای تمرین.
حضور: الزامی
اگر تمرین یک تمرین Problem Specifications را پیادهسازی میکند، محتوای این فایل باید با فایل instructions.md آن تمرین Problem Specifications مطابقت داشته باشد (یا فایل description.md اگر فایل instructions.md وجود ندارد). configlet این قابلیت را دارد که محتوای این فایل را بهطور خودکار همگامسازی کند.
اگر تمرین بر پایهی یک تمرین Problem Specifications نیست، موارد زیر را در نظر بگیرید:
ما برای ایمن بودن محتوای Exercism برای همه ارزش زیادی قائل هستیم و به همین دلیل هنگام تصمیمگیری دربارهی مناسب بودن یا نبودن داستانها، اغلب جانب احتیاط را رعایت میکنیم. هرچند در مورد آنچه ادغام میکنیم دقت میکنیم، میدانیم که آگاه بودن از آنچه ممکن است مشکلدار تلقی شود دشوار است، بنابراین همیشه فرض میکنیم شما با حسن نیت عمل میکنید و تلاش میکنیم در بازبینی، هر مشکلی را به شیوهای غیرتقابلی پیدا کنیم. اگر میخواهید داستانی را با ما بررسی کنید، لطفاً @exercism/leadership را منشن کنید تا با هم به آن نگاه کنیم. در ادامه چند نکتهی راهنما آمده است:
# Instructions
Bob answers 'Sure.' if you ask him a question, such as "How are you?".
He answers 'Whoa, chill out!' if you YELL AT HIM (in all capitals).
He answers 'Calm down, I know what I'm doing!' if you yell a question at him.
He says 'Fine. Be that way!' if you address him without actually saying anything.
He answers 'Whatever.' to anything else.
.docs/instructions.append.md
هدف: متن دستورهای اضافی که پس از دستورهای موجود افزوده میشود.
حضور: اختیاری
در برخی موارد (کمیاب)، ممکن است بخواهید فایل instructions.md تمرین را گسترش دهید، برای مثال زمانی که تمرین تستهایی را پیادهسازی کرده است که دستورهای موجود آنها را پوشش نمیدهند.
# Instructions append
## Note
Bob's conversational partner is a purist when it comes to written communication and always follows normal rules regarding sentence punctuation in English.
فایلهای افزودنی باید با یک سرصفحهی H1 شروع شوند. این سرصفحه نمایش داده نمیشود، اما باید همچنان وجود داشته باشد. سرصفحهی H1 اغلب با یک سرصفحهی H2 دنبال میشود که به جدا کردن محتوای عمومی از محتوای مخصوص ترک کمک میکند.
.docs/hints.md
هدف: ارائهی راهنمایی به دانشجو تا کمکش کند در تمرین گیر نکند.
حضور: اختیاری
## General ظاهر شوند.دیدن راهنماییها یک مسیر «توصیهشده» نیست و ما (به ملایمت) از استفاده از آن دلسرد میکنیم، مگر اینکه دانشجو بدون آن نتواند پیش برود. بنابراین ارزش دارد در نظر بگیرید که دانشجویی که آن را میخواند کمی گیج یا درمانده و شاید ناامید باشد.
## General
- There are many [built-in methods][integers] to simplify working with integers.
[integers]: https://ruby-doc.org/core-2.7.0/Integer.html
هدف: توصیف طراحی تمرین.
حضور: اختیاری
این فایل شامل اطلاعاتی دربارهی طراحی تمرین است که چیزهایی مانند هدف آن، اهداف آموزشیاش، آنچه نباید آموزش داده شود و موارد دیگر را در بر میگیرد.
این فایل وجود دارد تا نگهدارندگان یا مشارکتکنندگان آینده را دربارهی دامنه و محدودیتهای یک تمرین آگاه کند و از روند طبیعی پیچیدهتر شدن تمرینها در طول زمان جلوگیری کند.
# Design
## Goal
The goal of this exercise is help students practice how to work with strings.
## Notes
This exercise does not contain any error handling tests.
.meta/config.json
هدف: شامل اطلاعات فراداده دربارهی تمرین.
حضور: الزامی
این فایل شامل اطلاعات فراداده دربارهی تمرین است:
authors: نام کاربری GitHub نویسنده(گان) تمرین (اختیاری)
contributors: نام کاربری GitHub مشارکتکننده(گان) تمرین (اختیاری)
files: مکان فایلهای استفادهشده در این تمرین، نسبت به پوشهی تمرین (الزامی)
solution: فایل(های) پیادهسازی اسکلتی (الزامی)test: فایل(های) تست (الزامی)example: فایل(های) پیادهسازی نمونه (الزامی)editor: فایلهای اضافی که در ویرایشگر بهصورت فقطخواندنی نشان داده میشوند (اختیاری)invalidator: فایلهایی که وقتی تغییر کنند، باعث میشوند یک راهحل قدیمی شود (اختیاری)language_versions نیازمندیهای نسخهی زبان (اختیاری)blurb: توضیح کوتاهی از این تمرین. طول آن باید حداکثر ۳۵۰ باشد. Markdown پشتیبانی نمیشود (الزامی)source: منبعی که این تمرین بر پایهی آن است (اختیاری)source_url: URL منبعی که این تمرین بر پایهی آن است (اختیاری)test_runner: مشخص میکند که آیا راهحلهای این تمرین باید در اجراکنندهی تست تست شوند یا نه. اگر مشخص نشود، بهطور پیشفرض true است. (اختیاری)representer: اطلاعات فرادادهی مرتبط با نحوهی پردازش این فایل توسط representer (اختیاری)
version: یک عدد صحیح برای نسخهی representer که برای تمرین استفاده میشود (در صورت وجود کلید والد، الزامی)icon: اسلاگ آیکون (به فهرست کامل آیکونها مراجعه کنید). اگر مشخص نشود، از اسلاگ تمرین استفاده میشود (اختیاری)custom: هر دادهی غیراستاندارد و مخصوص تمرین. میتوان از آن برای سفارشیسازی رفتار ابزارهای ترک بهازای هر تمرین استفاده کرد (اختیاری)اگر کسی هم نویسنده و هم مشارکتکننده است، او را فقط بهعنوان نویسنده فهرست کنید.
{
"authors": ["FSharpForever"],
"files": {
"solution": ["Bob.fs"],
"test": ["BobTests.fs"],
"example": [".meta/Example.fs"]
},
"blurb": "Bob is a lackadaisical teenager. In conversation, his responses are very limited"
}
توجه کنید که:
language_versions رشتهای آزاد است که ترکها میتوانند آزادانه آن را به هر شکلی که میخواهند استفاده و تفسیر کنند.هدف: شامل اطلاعاتی دربارهی این است که چه تستهایی پیادهسازی شدهاند.
حضور: اختیاری
این فایل شامل اطلاعاتی دربارهی این است که چه تستهایی پیادهسازی میشوند، به شرط آنکه تمرین تستهایی در فایل canonical-data.json خود در مخزن problem-specifications تعریف کرده باشد.
این فایل وجود دارد تا به نگهدارندگان کمک کند پیگیری کنند چه تستهایی پیادهسازی شدهاند و (بهصورت اختیاری) مستند کنند چرا تست خاصی پیادهسازی نشده است. همچنین میتوان از آن برای شناسایی تستهای پیادهسازینشده استفاده کرد.
ابزار configlet بهروزرسانی/همگامسازی این فایل با دادههای مخزن problem-specifications را از طریق دستور configlet sync انجام میدهد. هنگام همگامسازی، configlet برای هر تست پیادهسازینشده میپرسد که آن تست گنجانده شود یا نه.
# This is an auto-generated file.
#
# Regenerating this file via `configlet sync` will:
# - Recreate every `description` key/value pair
# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications
# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion)
# - Preserve any other key/value pair
#
# As user-added comments (using the # character) will be removed when this file
# is regenerated, comments can be added via a `comment` key.
[3e5c30a8-87e2-4845-a815-a49671ade970]
description = "empty strand"
[a0ea42a6-06d9-4ac6-828c-7ccaccf98fec]
description = "can count one nucleotide in single-character input"
[eca0d565-ed8c-43e7-9033-6cefbf5115b5]
description = "strand with repeated nucleotide"
[40a45eac-c83f-4740-901a-20b22d15a39f]
description = "strand with multiple nucleotides"
[b4c47851-ee9e-4b0a-be70-a86e343bd851]
description = "strand with invalid nucleotides"
include = false
comment = "error handling omitted on purpose"
.approaches/introduction.md
هدف: مقدمهای بر رایجترین رویکردهای تمرین
حضور: اختیاری
این فایل رایجترین رویکردهای تمرین را توصیف میکند. برای اطلاعات بیشتر دربارهی اینکه چه چیزی باید در این فایل باشد، مستندات را ببینید.
# Introduction
The key to this exercise is to deal with C# strings being immutable, which means that a `string`'s value cannot be changed.
Therefore, to reverse a string you'll need to create a _new_ `string`.
## Using LINQ
```csharp
public static string Reverse(string input)
{
return new string(input.Reverse().ToArray());
}
```
For more information, check the [LINQ approach][approach-linq].
## Which approach to use?
If readability is your primary concern (and it usually should be), the LINQ-based approach is hard to beat.
.approaches/config.json
هدف: فرادادهی رویکردها
حضور: اختیاری (الزامی زمانی که یک مقدمهی رویکرد یا رویکرد وجود دارد)
این فایل شامل اطلاعات فراداده دربارهی رویکردهای تمرین است:
introduction: نام کاربری GitHub نویسنده(گان) مقدمهی رویکرد تمرین (اختیاری)
authors: نام کاربری GitHub نویسنده(گان) مقدمهی رویکرد تمرین (الزامی)
contributors: نام کاربری GitHub مشارکتکننده(گان) مقدمهی رویکرد تمرین (اختیاری)
approaches: آرایهای که رویکردهای تفصیلی را فهرست میکند (اختیاری)
uuid: یک UUID نسخهی ۴ که رویکرد را بهطور یکتا مشخص میکند. UUID باید هم درون ترک و هم در میان همهی ترکها یکتا باشد و هرگز تغییر نکندslug: اسلاگ رویکرد که رشتهای با حروف کوچک و به سبک kebab-case است. اسلاگ باید در میان همهی اسلاگهای رویکرد درون ترک یکتا باشد. طول آن باید حداکثر ۲۵۵ باشد.title: عنوان رویکرد. طول آن باید حداکثر ۲۵۵ باشد.blurb: توضیح کوتاهی از این رویکرد. طول آن باید حداکثر ۳۵۰ باشد. Markdown پشتیبانی نمیشود (الزامی)authors: نام کاربری GitHub نویسنده(گان) رویکرد تمرین (الزامی)
contributors: نام کاربری GitHub مشارکتکننده(گان) رویکرد تمرین (اختیاری)
tags: شرایطی را مشخص میکند که یک ارسال به یک رویکرد پیوند داده میشود. (اختیاری)
all: آرایهای از برچسبها که همهی آنها باید روی یک ارسال حاضر باشند (اختیاری، مگر اینکه any هیچ عنصری نداشته باشد)any: آرایهای از برچسبها که دستکم یکی از آنها باید روی یک ارسال حاضر باشد (اختیاری، مگر اینکه all هیچ عنصری نداشته باشد)not: هیچیک از برچسبها نباید روی یک ارسال حاضر باشد (اختیاری){
"introduction": {
"authors": ["erikschierboom"]
},
"approaches": [
{
"uuid": "448fb2b4-18ab-4e55-aa54-ad4ed6d5f7f6",
"slug": "span",
"title": "Use Span<T>",
"blurb": "Use Span<T> to efficiently reverse a string.",
"authors": ["erikschierboom"]
}
]
}
.approaches/<approach-slug>/content.md
هدف: توصیف تفصیلی رویکرد
حضور: اختیاری (برای رویکردها الزامی)
این فایل توصیف تفصیلی رویکرد را در بر میگیرد. برای اطلاعات بیشتر دربارهی اینکه چه چیزی باید در این فایل باشد، مستندات را ببینید.
# Span
```csharp
Span<char> chars = stackalloc char[input.Length];
for (var i = 0; i < input.Length; i++)
{
chars[input.Length - 1 - i] = input[i];
}
return new string(chars);
```
This `Span<T>` approach uses a `for` loop.
.approaches/<approach-slug>/snippet.txt
هدف: نمونهای که رویکرد را نمایش میدهد
حضور: اختیاری (برای رویکردها الزامی)
این فایل شامل نمونهی کوچکی است که رویکرد را نمایش میدهد. این نمونه در صفحهی dig deeper یک تمرین نشان داده میشود.
تعداد خطوط آن باید حداکثر ۸ باشد.
برای اطلاعات بیشتر دربارهی اینکه چه چیزی باید در این فایل باشد، مستندات را ببینید.
Span<char> chars = stackalloc char[input.Length];
for (var i = 0; i < input.Length; i++)
{
chars[input.Length - 1 - i] = input[i];
}
return new string(chars);
.article/config.json
هدف: فرادادهی مقالهها
حضور: اختیاری (الزامی زمانی که یک مقاله وجود دارد)
این فایل شامل اطلاعات فراداده دربارهی مقالههای تمرین است:
articles: آرایهای که مقالههای تفصیلی را فهرست میکند (اختیاری)
uuid: یک UUID نسخهی ۴ که مقاله را بهطور یکتا مشخص میکند. UUID باید هم درون ترک و هم در میان همهی ترکها یکتا باشد و هرگز تغییر نکندslug: اسلاگ مقاله که رشتهای با حروف کوچک و به سبک kebab-case است. اسلاگ باید در میان همهی اسلاگهای مقاله درون ترک یکتا باشد. طول آن باید حداکثر ۲۵۵ باشد.title: عنوان مقاله. طول آن باید حداکثر ۲۵۵ باشد.blurb: توضیح کوتاهی از این مقاله. طول آن باید حداکثر ۳۵۰ باشد. Markdown پشتیبانی نمیشود (الزامی)authors: نام کاربری GitHub نویسنده(گان) مقالهی تمرین (الزامی)
contributors: نام کاربری GitHub مشارکتکننده(گان) مقالهی تمرین (اختیاری)
{
"articles": [
{
"uuid": "6db71962-62d5-448b-a980-c20ae41013ed",
"slug": "performance",
"title": "Optimizing performance",
"blurb": "Explore how to most efficiently reverse a string and what the trade-offs are.",
"authors": ["erikschierboom"]
}
]
}
.articles/<article-slug>/content.md
هدف: توصیف تفصیلی رویکرد
حضور: اختیاری (برای رویکردها الزامی)
این فایل توصیف تفصیلی رویکرد را در بر میگیرد. برای اطلاعات بیشتر دربارهی اینکه چه چیزی باید در این فایل باشد، مستندات را ببینید.
# Performance
In this document, we'll find out which approach is the most performant one.
## Benchmark results
| Method | Mean | Error | StdDev | Median | Allocated |
| -----: | --------: | --------: | --------: | --------: | --------: |
| Linq | 29.133 ns | 0.5865 ns | 0.5486 ns | 28.984 ns | 80 B |
| Array | 4.806 ns | 0.4999 ns | 1.4739 ns | 3.967 ns | - |
.articles/<article-slug>/snippet.txt
هدف: نمونهای که رویکرد را نمایش میدهد
حضور: اختیاری (برای مقالهها الزامی)
این فایل شامل نمونهی کوچکی است که مقاله را نمایش میدهد. این نمونه در صفحهی dig deeper یک تمرین نشان داده میشود.
تعداد خطوط آن باید حداکثر ۸ باشد.
برای اطلاعات بیشتر دربارهی اینکه چه چیزی باید در این فایل باشد، مستندات را ببینید.
| Method | Mean | Allocated |
| -----: | --------: | --------: |
| Linq | 29.133 ns | 80 B |
| Array | 4.806 ns | - |
هدف: فراهم کردن نقطهی شروعی برای دانشجوها.
حضور: الزامی
"files.solution" فایل .meta/config.json مشخص شوند.using System;
public static class Isogram
{
public static bool IsIsogram(string word)
{
throw new NotImplementedException("You need to implement this function.");
}
}
هدف: بررسی درستی یک راهحل.
حضور: الزامی
"files.test" فایل .meta/config.json مشخص شوند.using Xunit;
public class IsogramTest
{
[Fact]
public void Empty_string() =>
Assert.True(Isogram.IsIsogram(""));
[Fact(Skip = "Remove this Skip property to run this test")]
public void Isogram_with_only_lower_case_characters() =>
Assert.True(Isogram.IsIsogram("isogram"));
[Fact(Skip = "Remove this Skip property to run this test")]
public void Word_with_one_duplicated_character() =>
Assert.False(Isogram.IsIsogram("eleven"));
}
هدف: ارائهی پیادهسازی نمونهای که همهی تستها را پاس میکند.
حضور: الزامی
"files.example" فایل .meta/config.json مشخص شوند.using System.Linq;
public static class Isogram
{
public static bool IsIsogram(string word)
{
var lowerCaseLetters = word.ToLower().Where(char.IsLetter).ToList();
return lowerCaseLetters.Distinct().Count() == lowerCaseLetters.Count;
}
}
هدف: فایلهای اضافی پروژه، ساخت یا پشتیبان که برای اجرای تستها لازم است.
حضور: در صورت کافی نبودن فایلهای پیشفرض برای اجرای تستها، الزامی است
برخی زبانها برای اجرای تستها به فایلهای اضافی نیاز دارند. نمونهی اینها فایلهای پروژهی C# و فایلهای package.json در Node است که بدون آنها اجرای تستها ممکن نخواهد بود.
برخی فایلها مخصوص تمرینهای جداگانه نیستند، بلکه برای همهی تمرینها کاربرد دارند. برای اطلاعات بیشتر مستندات را ببینید.
در نحوهی ارائهی مستندات تمرین به دانشجو هنگام استفاده از ویرایشگر مرورگر در مقابل استفاده از CLI تفاوت وجود دارد. برای اطلاعات بیشتر این سند را ببینید.
هر تمرین یک آیکون همراه دارد.
بهطور پیشفرض، آیکون نمایشدادهشده همانی است که نامش با اسلاگ تمرین مطابقت دارد.
میتوان با مشخص کردن ویژگی icon در فایل .meta/config.json تمرین، این را بازنویسی کرد.
اگر تمرینی را از فرادادهی problem-specifications پیادهسازی میکنید، احتمالاً از قبل آیکونی برای آن تمرین وجود دارد. اگر نه، لطفاً یک ایشو در مخزن website-icons باز کنید.