कॉन्सेप्ट अभ्यास ऐसे अभ्यास हैं जो खास (प्रोग्रामिंग) कॉन्सेप्ट सिखाने के लिए बनाए गए हैं। कॉन्सेप्ट अभ्यास जो कॉन्सेप्ट सिखाते हैं, वे मिलकर एक सिलेबस बनाते हैं। सिलेबस डिज़ाइन करने के तरीके के बारे में अधिक जानने के लिए सिलेबस डॉक्यूमेंटेशन देखिए।
ट्रैक की मूल डायरेक्टरी से ये कमांड चलाकर आप जल्दी से एक नया कॉन्सेप्ट अभ्यास तैयार कर सकते हैं:
bin/fetch-configlet
bin/configlet create --concept-exercise <slug>
अधिक जानकारी के लिए configlet create डॉक्स देखिए।
कॉन्सेप्ट अभ्यास का मेटाडेटा config.json फाइल की exercises.concept key में तय किया जाता है। यह मेटाडेटा अभ्यास का UUID, स्लग और बहुत कुछ तय करता है।
{
"exercises": {
"concept": [
{
"uuid": "93fbc7cf-3a7e-4450-ad22-e30129c36bb9",
"slug": "cars-assemble",
"name": "Cars, Assemble!",
"concepts": ["if-statements", "numbers"],
"prerequisites": ["basics"]
}
]
}
}
हर कॉन्सेप्ट अभ्यास की अपनी डायरेक्टरी ट्रैक की exercises/concept डायरेक्टरी के अंदर होती है। कॉन्सेप्ट अभ्यास की डायरेक्टरी का नाम उस अभ्यास की slug प्रॉपर्टी से मेल खाना चाहिए, जो config.json फाइल में तय की गई है।
कॉन्सेप्ट अभ्यास में चार तरह की फाइलें होती हैं:
ये फाइलें छात्र के सामने रखी जाती हैं, ताकि अभ्यास को समझाने में मदद मिले।
.docs/introduction.md: छात्र को वे कॉन्सेप्ट बताती है जो यह अभ्यास सिखाता है (आवश्यक)।.docs/instructions.md: अभ्यास के निर्देश देती है (आवश्यक)।.docs/hints.md: अभ्यास में अटके छात्र की मदद के लिए संकेत देती है (आवश्यक)।ये फाइलें छात्र के सामने नहीं रखी जातीं, बल्कि अभ्यास का मेटाडेटा तय करने के लिए इस्तेमाल होती हैं।
.meta/config.json: अभ्यास की मेटा जानकारी रखती है (आवश्यक)।.meta/design.md: अभ्यास का डिज़ाइन बताती है (आवश्यक)।ये फाइलें अभ्यास के अप्रोच बताती हैं।
.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
└── concept
└── cars-assemble
├── .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
| └── Exemplar.cs (exemplar implementation)
├── CarsAssemble.cs (stub implementation)
└── CarsAssemblyTests.cs (tests)
नए अभ्यासों के लिए हम "ऑप्टिमिस्टिक मर्जिंग" का तरीका अपनाते हैं, जिसमें ट्रैक किसी अभ्यास को "कार्य प्रगति पर" स्थिति में विकसित कर सकते हैं। वह न्यूनतम मान्य स्थिति, जिसमें configlet पास हो जाएगा और आप मर्ज कर सकेंगे, यह है:
config.json में एक मान्य एंट्री, जिसमें status को wip पर सेट किया गया हो।.meta/config.json फाइल।.docs/introduction.md.docs/instructions.md.docs/hints.md.docs/introduction.md
उद्देश्य: छात्र को वे कॉन्सेप्ट बताना जो यह अभ्यास सिखाता है।
उपस्थिति: आवश्यक
about.md डॉक्यूमेंट के लिए छोड़ दीजिए।उदाहरण के लिए, "स्ट्रिंग" वाले अभ्यास का परिचय स्ट्रिंग को बस "यूनिकोड अक्षरों का क्रम" या "बाइट्स की श्रृंखला" कहकर बता सकता है, उपयोगकर्ताओं को बता सकता है कि स्ट्रिंग कैसे बनाई जाती है, और समझा सकता है कि स्ट्रिंग में मेथड होते हैं जिनसे उसे बदला जा सकता है। जब तक अभ्यास हल करने के लिए छात्र को इससे बारीक बातें समझने की ज़रूरत न हो, इस तरह की छोटी व्याख्या (और उसकी सिंटैक्स का एक उदाहरण) छात्र के लिए अभ्यास हल करने भर की जानकारी होनी चाहिए।
# Introduction
There are two primary ways to assign objects to names in Ruby - using variables or constants. Variables are always written in snake case. A variable can reference different objects over its lifetime. For example, `my_first_variable` can be defined and redefined many times using the `=` operator:
```ruby
my_first_variable = 1
my_first_variable = "Some string"
my_first_variable = SomeComplexObject.new
```
.docs/introduction.md.tpl
उद्देश्य: वह टेम्पलेट जिससे introduction.md फाइल बनाई जाती है।
उपस्थिति: वैकल्पिक
introduction.md डॉक्यूमेंट छात्र को अभ्यास के कॉन्सेप्ट बताता है। हर कॉन्सेप्ट का अपना अलग introduction.md डॉक्यूमेंट भी होता है, जो अभ्यास के संदर्भ के बाहर नहीं दिखाया जाता।
अगर कॉन्सेप्ट का परिचय अभ्यास के परिचय में ज्यों का त्यों शामिल करना हो, तो introduction.md.tpl फाइल इस्तेमाल की जा सकती है। यह फाइल प्लेसहोल्डर के ज़रिए कॉन्सेप्ट के परिचय का हवाला देने देती है: %{concept:<concept-slug>}।
configlet टेम्पलेट फाइल से introduction.md फाइल बना सकता है। बनी हुई फाइल में कॉन्सेप्ट वाले प्लेसहोल्डर की जगह उस कॉन्सेप्ट की introduction सामग्री आ जाती है।
Exercism वेबसाइट को सिर्फ introduction.md डॉक्यूमेंट की जानकारी होती है। टेम्पलेट फाइल इस्तेमाल होने पर introduction.md बनाना ट्रैक की ज़िम्मेदारी है।
ट्रैक हर अभ्यास के लिए तय कर सकते हैं कि टेम्पलेट इस्तेमाल करना है या नहीं। कुछ मामलों में कॉन्सेप्ट का परिचय ज्यों का त्यों इस्तेमाल करना सबसे अच्छा नहीं होता। हमेशा वही चुनिए जिससे छात्र को सीखने का सबसे अच्छा अनुभव मिले।
# Introduction
%{concept:variables}
.docs/instructions.md
उद्देश्य: अभ्यास के निर्देश देना।
उपस्थिति: आवश्यक
यह फाइल दो हिस्सों में बँटी होती है।
हर टास्क को इन नियमों का पालन करना चाहिए:
## 1. Do X, ## 2. Do Y)।## 1. Check if an appointment has already passed)।Implement method X(...) that takes an A and returns a Z),हमारे लिए यह बहुत ज़रूरी है कि Exercism की सामग्री सबके लिए सुरक्षित रहे, इसलिए कहानियाँ उपयुक्त हैं या नहीं, यह तय करते समय हम अक्सर सतर्कता की तरफ झुकते हैं। हम मर्ज करते समय सावधानी बरतते हैं, लेकिन हम मानते हैं कि यह पहचानना मुश्किल है कि किसी को क्या आपत्तिजनक लग सकता है। इसलिए हम हमेशा यह मानकर चलेंगे कि आप अच्छे इरादे से काम कर रहे हैं, और रिव्यू में किसी भी दिक्कत को बिना टकराव के पकड़ने की पूरी कोशिश करेंगे। अगर आप कोई कहानी हमसे जाँचवाना चाहें, तो @exercism/leadership का ज़िक्र कीजिए और हम उसे साथ में देखेंगे। यहाँ कुछ दिशानिर्देश दिए गए हैं:
# Instructions
In this exercise you're going to write some code to help you cook a brilliant lasagna from your favorite cooking book.
## 1. Calculate the remaining oven time in minutes
Define the `Lasagna#remaining_minutes_in_oven` method that takes the actual minutes the lasagna has been in the oven as a parameter and returns how many minutes the lasagna still has to remain in the oven, based on the expected oven time in minutes from the previous task.
```ruby
lasagna = Lasagna.new
lasagna.remaining_minutes_in_oven(30)
# => 10
```
.docs/hints.md
उद्देश्य: छात्र को संकेत देना, ताकि अभ्यास में अटकने पर वह आगे बढ़ सके।
उपस्थिति: आवश्यक
## General हेडिंग के नीचे Markdown लिस्ट के रूप में हो सकते हैं।instructions.md में उसी टास्क की हेडिंग से मेल खाती हों (जैसे ## 2. Do Y)।## 2. Check if a book can be borrowed)।Implement the 'canBorrowBook' function to check if a book can be borrowed. The function takes a book as its parameter and returns `true` if the book has not already been borrowed; otherwise, return `false`)।संकेत देखना कोई "सिफारिश किया गया" रास्ता नहीं होगा और जब तक छात्र उसके बिना आगे न बढ़ सके, हम (हल्के-फुल्के तरीके से) उसे इस्तेमाल करने से हतोत्साहित करेंगे। इसलिए यह ध्यान रखने लायक है कि संकेत पढ़ते समय छात्र थोड़ा उलझा हुआ या बोझ महसूस कर सकता है, और शायद निराश भी हो सकता है।
# Hints
## General
- You need to define a [constant][constant] which should contain the [integer][integers] value specified in the recipe.
## 1. Calculate the remaining oven time in minutes
- You need to define a [method][methods] with a single parameter for the actual time so far.
[constants]: https://www.rubyguides.com/2017/07/ruby-constants/
[integers]: https://ruby-doc.org/core-2.7.0/Integer.html
[methods]: https://launchschool.com/books/ruby/read/methods
उद्देश्य: अभ्यास का डिज़ाइन बताना।
उपस्थिति: आवश्यक
इस फाइल में अभ्यास के डिज़ाइन की जानकारी होती है, जिसमें उसका लक्ष्य, सिखाने के लक्ष्य, क्या नहीं सिखाना है, और बहुत कुछ शामिल है। यह जानकारी अभ्यास से जुड़े GitHub issue से निकाली जा सकती है।
यह इसलिए होती है ताकि आगे के मेंटेनरों या योगदानकर्ताओं को अभ्यास के दायरे और सीमाओं की जानकारी मिले, और समय के साथ अभ्यासों को और जटिल बनाने की स्वाभाविक प्रवृत्ति से बचा जा सके।
# Design
## Goal
The goal of this exercise is to teach the student the basics of programming in Ruby.
## Learning objectives
- Know what a variable is.
- Know how to define a variable.
- Know how to update a variable.
## Out of scope
- Memory and performance characteristics.
- Method overloads.
## Concepts
The Concepts this exercise unlocks are:
- `basics`: know what a variable is; know how to define a variable; know how to update a variable.
## Prerequisites
There are no prerequisites.
.meta/config.json
उद्देश्य: अभ्यास की मेटा जानकारी रखना।
उपस्थिति: आवश्यक
इस फाइल में अभ्यास की मेटा जानकारी होती है:
authors: अभ्यास के लेखक/लेखकों के GitHub यूज़रनेम (आवश्यक)
contributors: अभ्यास के योगदानकर्ता/योगदानकर्ताओं के GitHub यूज़रनेम (वैकल्पिक)
forked_from: यह किस अभ्यास से फोर्क किया गया है (अगर अभ्यास फोर्क किया गया हो तो आवश्यक)।files: इस अभ्यास में इस्तेमाल होने वाली फाइलों की जगह, अभ्यास की डायरेक्टरी के सापेक्ष (आवश्यक)
solution: स्टब इम्प्लीमेंटेशन फाइल (आवश्यक)test: टेस्ट फाइल (आवश्यक)exemplar: एक्ज़ेम्प्लर इम्प्लीमेंटेशन फाइल (आवश्यक)editor: एडिटर में सिर्फ पढ़ने के लिए दिखाई जाने वाली दूसरी फाइलें (वैकल्पिक)invalidator: ऐसी फाइलें जिनके बदलने पर हल पुराना पड़ जाता है (वैकल्पिक)language_versions: भाषा के वर्ज़न की ज़रूरतें (वैकल्पिक)blurb: इस अभ्यास का छोटा विवरण। इसकी लंबाई <= 350 होनी चाहिए। Markdown का समर्थन नहीं है (आवश्यक)source: वह स्रोत जिस पर यह अभ्यास आधारित है (वैकल्पिक)source_url: उस स्रोत का URL जिस पर यह अभ्यास आधारित है (वैकल्पिक)representer: इस बारे में मेटा जानकारी कि रेप्रेज़ेंटर इस फाइल को कैसे प्रोसेस करता है (वैकल्पिक)
version: अभ्यास के लिए इस्तेमाल होने वाले रेप्रेज़ेंटर के वर्ज़न का पूर्णांक (अगर मुख्य key मौजूद हो तो आवश्यक)icon: आइकन का स्लग (देखिए आइकनों की पूरी सूची)। अगर तय न किया गया हो, तो अभ्यास का स्लग इस्तेमाल होगा (वैकल्पिक)custom: अभ्यास से जुड़ा कोई भी गैर-मानक डेटा। इससे हर अभ्यास के लिए ट्रैक की टूलिंग का व्यवहार बदला जा सकता है (वैकल्पिक)अगर कोई व्यक्ति लेखक भी हो और योगदानकर्ता भी, तो उसे सिर्फ लेखक के रूप में लिखिए।
{
"authors": ["FSharpForever"],
"files": {
"solution": ["Lasagna.fs"],
"test": ["LasagnaTests.fs"],
"exemplar": [".meta/Exemplar.fs"]
},
"blurb": "Learn the basics of F# by cooking Lucian's Luscious Lasagna"
}
मान लीजिए कि उपयोगकर्ता FSharpForever ने F# ट्रैक के लिए log-levels नाम का अभ्यास लिखा है। PythonProfessor उस अभ्यास को Python ट्रैक के लिए ढालता है। बाद में उपयोगकर्ता GladToHelp उस अभ्यास को बेहतर बनाता है।
{
"authors": ["PythonProfessor"],
"contributors": ["GladToHelp"],
"files": {
"solution": ["log_levels.py"],
"test": ["log_levels_test.py"],
"exemplar": [".meta/exemplar.py"],
"editor": ["test_helper.py"]
},
"forked_from": ["fsharp/log-levels"],
"language_versions": ">=3.7",
"blurb": "Learn how to work with strings by processing log lines.",
"source": "Wikipedia",
"source_url": "https://en.wikipedia.org/wiki/Log_file",
"representer": {
"version": 2
},
"icon": "logs",
"custom": {
"parallel": true
}
}
ध्यान दीजिए:
forked_from सही है।language_versions एक खुली स्ट्रिंग है, जिसे ट्रैक अपनी मर्ज़ी से इस्तेमाल और समझ सकते हैं।.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: एक V4 UUID जो अप्रोच की पहचान अलग-अलग तरीके से करता है। यह UUID ट्रैक के अंदर भी और सारे ट्रैकों में भी अलग होना चाहिए, और कभी नहीं बदलना चाहिएslug: अप्रोच का स्लग, जो छोटे अक्षरों में और kebab-case में होता है। यह स्लग ट्रैक के अंदर सारे अप्रोच स्लगों में अलग होना चाहिए। इसकी लंबाई <= 255 होनी चाहिए।title: अप्रोच का शीर्षक। इसकी लंबाई <= 255 होनी चाहिए।blurb: इस अप्रोच का छोटा विवरण। इसकी लंबाई <= 350 होनी चाहिए। 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 पेज पर दिखाया जाता है।
इसकी लाइनों की संख्या <= 8 होनी चाहिए।
इस फाइल में क्या होना चाहिए, इसकी अधिक जानकारी के लिए डॉक्यूमेंटेशन देखिए।
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: एक V4 UUID जो आर्टिकल की पहचान अलग-अलग तरीके से करता है। यह UUID ट्रैक के अंदर भी और सारे ट्रैकों में भी अलग होना चाहिए, और कभी नहीं बदलना चाहिएslug: आर्टिकल का स्लग, जो छोटे अक्षरों में और kebab-case में होता है। यह स्लग ट्रैक के अंदर सारे आर्टिकल स्लगों में अलग होना चाहिए। इसकी लंबाई <= 255 होनी चाहिए।title: आर्टिकल का शीर्षक। इसकी लंबाई <= 255 होनी चाहिए।blurb: इस आर्टिकल का छोटा विवरण। इसकी लंबाई <= 350 होनी चाहिए। 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 पेज पर दिखाया जाता है।
इसकी लाइनों की संख्या <= 8 होनी चाहिए।
इस फाइल में क्या होना चाहिए, इसकी अधिक जानकारी के लिए डॉक्यूमेंटेशन देखिए।
| Method | Mean | Allocated |
| -----: | --------: | --------: |
| Linq | 29.133 ns | 80 B |
| Array | 4.806 ns | - |
उद्देश्य: छात्रों को शुरुआत करने की जगह देना।
उपस्थिति: आवश्यक
.meta/config.json फाइल की "files.solution" key में दिए जाने चाहिए।class Lasagna
def remaining_minutes_in_oven(actual_minutes_in_oven)
raise NotImplementedError, 'Please implement the Lasagna#remaining_minutes_in_oven method'
end
def preparation_time_in_minutes(layers)
raise NotImplementedError, 'Please implement the Lasagna#preparation_time_in_minutes method'
end
end
उद्देश्य: यह जाँचना कि हल सही है।
उपस्थिति: आवश्यक
instructions.md फाइल के उदाहरण इस्तेमाल नहीं होने चाहिए।.meta/config.json फाइल की "files.test" key में दिए जाने चाहिए।require 'minitest/autorun'
require_relative 'lasagna'
class LasagnaTest < Minitest::Test
def test_remaining_minutes_in_oven
assert_equal 15, Lasagna.new.remaining_minutes_in_oven(25)
end
def test_preparation_time_in_minutes_with_one_layer
assert_equal 2, Lasagna.new.preparation_time_in_minutes(1)
end
def test_preparation_time_in_minutes_with_multiple_layers
assert_equal 8, Lasagna.new.preparation_time_in_minutes(4)
end
end
उद्देश्य: वह लक्ष्य इम्प्लीमेंटेशन देना जिस तक छात्र को पहुँचना है।
उपस्थिति: आवश्यक
.meta/config.json फाइल की "files.exemplar" key में दिए जाने चाहिए।class Lasagna
EXPECTED_MINUTES_IN_OVEN = 40
PREPARATION_MINUTES_PER_LAYER = 2
def remaining_minutes_in_oven(actual_minutes_in_oven)
EXPECTED_MINUTES_IN_OVEN - actual_minutes_in_oven
end
def preparation_time_in_minutes(layers)
layers * PREPARATION_MINUTES_PER_LAYER
end
end
उद्देश्य: यह पक्का करना कि टेस्ट चल सकें।
उपस्थिति: अगर डिफ़ॉल्ट फाइलें टेस्ट चलाने के लिए काफी न हों तो आवश्यक
कुछ भाषाओं में टेस्ट चलाने के लिए अतिरिक्त फाइलें चाहिए। जैसे C# की प्रोजेक्ट फाइलें और Node की package.json फाइलें, जिनके बिना टेस्ट चलाना मुमकिन नहीं होगा।
कुछ फाइलें किसी एक अभ्यास की नहीं, बल्कि सारे अभ्यासों पर लागू होती हैं। अधिक जानकारी के लिए डॉक्यूमेंटेशन देखिए।
कॉन्सेप्ट अभ्यासों के नाम उनकी कहानी या विषय पर रखे जाने चाहिए, उनके कॉन्सेप्ट पर नहीं।
अच्छे नामों के उदाहरण:
Tim from MarketingLucian's Luscious LasagnaCalculator Conundrumनाम जो मान्य नहीं हैं:
Booleans: यह कॉन्सेप्ट का नाम है, कहानी का नाम नहींExercise #1: अभ्यास कोई कहानी या विषय नहीं होताकिसी अभ्यास को बिना बड़े बदलावों के फोर्क करते समय, जहाँ संभव हो मूल नाम ही रखिए।
हर अभ्यास का एक स्लग भी होता है, जो अभ्यास के नाम का नीचे दिए नियमों से बना सामान्यीकृत रूप होता है:
[a-z0-9-]+)2-fer की जगह two-fer)स्लग के अच्छे उदाहरण:
tim-from-marketinglucians-luscious-lasagnacalculator-conundrumस्लग जो मान्य नहीं हैं:
TIM-FROM-MARKETING: छोटे अक्षर इस्तेमाल नहीं करता (यानी tim-from-marketing)TimFromMarketing: kebab-case इस्तेमाल नहीं करता (यानी tim-from-marketing)floating-point-numbers: यह कॉन्सेप्ट का नाम है, कहानी का नाम नहींब्राउज़र वाले एडिटर से और CLI से काम करते समय अभ्यास का डॉक्यूमेंटेशन छात्र के सामने अलग-अलग तरीके से रखा जाता है। अधिक जानकारी के लिए यह डॉक्यूमेंट देखिए।
हर अभ्यास के साथ एक आइकन होता है।
डिफ़ॉल्ट रूप से वही आइकन दिखाया जाता है जिसका नाम अभ्यास के स्लग से मेल खाता है।
इसे अभ्यास की .meta/config.json फाइल में icon प्रॉपर्टी देकर बदला जा सकता है।
अगर आप किसी मौजूदा अभ्यास को फोर्क कर रहे हैं, तो उस अभ्यास के लिए शायद पहले से ही आइकन होगा। अगर न हो, तो कृपया website-icons रिपॉज़िटरी में एक issue खोलिए।