ट्रैक
/
Gleam
Gleam
/
अभ्यास
/
बैंडवैगनर
बैंडवैगनर

बैंडवैगनर

सीखने का अभ्यास

परिचय

लेबल वाले फील्ड

जब किसी कस्टम टाइप का कोई वेरिएंट डेटा रखता है, तो उसे रिकॉर्ड कहते हैं, और उसमें रखी हर वैल्यू एक फील्ड में रहती है।

pub type Rectangle {
  Rectangle(
    Float, // The first field
    Float, // The second field
  )
}

पढ़ने में आसानी के लिए Gleam फील्ड को नाम के साथ लेबल करने देता है।

pub type Rectangle {
  Rectangle(
    width: Float,
    height: Float,
  )
}

लेबल की मदद से रिकॉर्ड के कंस्ट्रक्टर को आर्गुमेंट किसी भी क्रम में दिए जा सकते हैं।

let a = Rectangle(height: 10.0, width: 20.0)
let b = Rectangle(width: 20.0, height: 10.0)

a == b
// -> True

जब किसी कस्टम टाइप में सिर्फ एक ही वेरिएंट हो, तो रिकॉर्ड के फील्ड पाने के लिए .label एक्सेसर सिंटैक्स इस्तेमाल किया जा सकता है।

let rect = Rectangle(height: 10.0, width: 20.0)

rect.height // -> 10.0
rect.width  // -> 20.0

जब किसी कस्टम टाइप में एक ही वेरिएंट हो, तो रिकॉर्ड अपडेट सिंटैक्स की मदद से मौजूदा रिकॉर्ड से नया रिकॉर्ड बनाया जा सकता है, जिसमें कुछ फील्ड की वैल्यू नई वैल्यू से बदल दी जाती हैं।

let rect = Rectangle(height: 10.0, width: 20.0)
let tall_rect = Rectangle(..rect, height: 50.0)

tall_rect.height // -> 50.0
tall_rect.width  // -> 20.0

रिकॉर्ड से वैल्यू निकालने के लिए पैटर्न मैचिंग करते समय भी लेबल इस्तेमाल किए जा सकते हैं।

pub fn is_tall(rect: Rectangle) {
  case rect {
    Rectangle(height: h, width: _) if h >. 20.0 -> True
    _ -> False
  }
}

अगर हमें सिर्फ कुछ फील्ड पर ही मैच करना हो, तो बाकी बचे फील्ड को अनदेखा करने के लिए स्प्रेड ऑपरेटर .. इस्तेमाल कर सकते हैं।

pub fn is_tall(rect: Rectangle) {
  case rect {
    Rectangle(height: h, ..) if h >. 20.0 -> True
    _ -> False
  }
}

निर्देश

इस अभ्यास में आप खेलों के बड़े प्रशंसक हैं और अभी-अभी आपको NBA बास्केटबॉल से लगाव हुआ है। NBA बास्केटबॉल में नए होने के कारण आप NBA के इतिहास में गहराई तक उतर रहे हैं, टीमों और कोचों का हिसाब रख रहे हैं, उनके जीत-हार के आँकड़े जुटा रहे हैं और उनकी आपस में तुलना कर रहे हैं।

चूँकि अभी आपकी कोई पसंदीदा टीम नहीं है, इसलिए आप एक एल्गोरिदम भी बनाएँगे जो यह तय करेगा कि किसी टीम का समर्थन करना चाहिए या नहीं।

अपना खुद का टीम-समर्थन एल्गोरिदम बनाने में आपकी मदद करने के लिए आपके पास सात काम हैं।

1. मॉडल परिभाषित कीजिए

Coach रिकॉर्ड को इन दो फील्डों के साथ परिभाषित कीजिए:

  • name: कोच का नाम, जिसका टाइप String है।
  • former_player: बताता है कि कोच पहले खिलाड़ी था या नहीं, जिसका टाइप Bool है।

Stats रिकॉर्ड को इन दो फील्डों के साथ परिभाषित कीजिए:

  • wins: जीतों की संख्या, जिसका टाइप Int है।
  • losses: हारों की संख्या, जिसका टाइप Int है।

Team रिकॉर्ड को इन तीन फील्डों के साथ परिभाषित कीजिए:

  • name: टीम का नाम, जिसका टाइप String है।
  • coach: टीम का कोच, जिसका टाइप Coach है।
  • stats: टीम के आँकड़े, जिसका टाइप Stats है।

2. टीम का कोच बनाइए

create_coach फंक्शन बनाइए, जो पैरामीटर के रूप में कोच का नाम और उसकी पूर्व-खिलाड़ी स्थिति लेता है और उसका Coach रिकॉर्ड लौटाता है:

create_coach("Larry Bird", True)
// -> Coach(name: "Larry Bird", former_player: True)

3. टीम के आँकड़े बनाइए

create_stats फंक्शन बनाइए, जो पैरामीटर के रूप में जीतों की संख्या और हारों की संख्या लेता है और उसका Stats रिकॉर्ड लौटाता है:

create_stats(58, 24)
// -> Stats(wins: 58, losses: 24)

4. टीम बनाइए

create_team फंक्शन बनाइए, जो पैरामीटर के रूप में टीम का नाम, कोच और रिकॉर्ड लेता है और उसका Team रिकॉर्ड लौटाता है:

let coach = create_coach("Larry Bird", True)
let stats = create_stats(58, 24)
create_team("Indiana Pacers", coach, stats)
// -> Team(
//   name: "Indiana Pacers",
//   coach: Coach(name: "Larry Bird", FormerPlayer = True),
//   stats: Stats(wins: 58, losses: 24),
// ) 

5. कोच बदलिए

NBA के मालिक जल्दबाज़ होते हैं, और आपने पाया कि टीम के खराब नतीजों पर अक्सर कोच बदल दिया जाता है। replace_coach फंक्शन बनाइए, जो पैरामीटर के रूप में टीम और उसका नया कोच लेता है और टीम को नए कोच के साथ लौटाता है:

let coach = create_coach("Larry Bird", True)
let record = create_stats(58, 24)
let team = create_team("Indiana Pacers", coach, record)

let new_coach = create_coach("Isiah Thomas", True)
replace_coach(team, new_coach)
// -> Team(
//   name: "Indiana Pacers",
//   coach: Coach(name: "Isiah Thomas", FormerPlayer = True),
//   stats: Stats(wins: 58, losses: 24),
// ) 

6. जाँचिए कि दोनों टीमें एक ही हैं

आँकड़े खंगालते समय आप टीमों और उनके रिकॉर्ड की सूचियाँ रख रहे हैं। कभी-कभी आपसे गलती हो जाती है और आपकी सूची में दोहराव आ जाते हैं। is_same_team फंक्शन बनाइए, जो दो टीमें लेता है और अगर वे एक ही टीम हैं तो True लौटाता है, वरना False लौटाता है:

let pacers_coach = create_coach("Larry Bird", True)
let pacers_stats = create_stats(58, 24)
let pacers_team = create_team("Indiana Pacers", pacers_coach, pacers_stats)

let lakers_coach = create_coach("Del Harris", False)
let lakers_stats = create_stats(61, 21)
let lakers_team = create_team("LA Lakers", lakers_coach, lakers_stats)

is_same_team(pacers_team, lakers_team)
// -> False

7. जाँचिए कि आपको किसी टीम का समर्थन करना चाहिए या नहीं

बहुत सी टीमों और मैचों को देखने के बाद आपने एक एल्गोरिदम तैयार किया है। अगर इनमें से कोई एक बात सही हो, तो आप उस टीम का समर्थन करते हैं:

  • कोच का नाम "Gregg Popovich" है
  • कोच पहले खिलाड़ी रह चुका है
  • टीम का नाम "Chicago Bulls" है
  • टीम ने 60 या उससे अधिक मैच जीते हैं
  • टीम की हार जीत से ज़्यादा है

root_for_team फंक्शन बनाइए, जो एक टीम लेता है और अगर आपको उस टीम का समर्थन करना चाहिए तो True लौटाता है, वरना False लौटाता है:

let spurs_coach = create_coach("Gregg Popovich", False)
let spurs_stats = create_stats(56, 26)
let spurs_team = create_team("San Antonio Spurs", spurs_coach, spurs_stats)
root_for_team(spurs_team)
// -> True
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Gleam Exercism

बैंडवैगनर शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Gleam को 33 कॉन्सेप्ट122 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।