ट्रैक
/
JavaScript
JavaScript
/
अभ्यास
/
मिले-जुले जूस
मिले-जुले जूस

मिले-जुले जूस

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

परिचय

while लूप

किसी while लूप की मदद से आप कोड को तब तक बार-बार चला सकते हैं, जब तक कि कोई शर्त पूरी होती रहे। इसे while कीवर्ड से लिखा जाता है। कीवर्ड के बाद गोल ब्रैकेट में लिपटी एक शर्त आती है, और फिर घुंघराले ब्रैकेट में लिपटा एक कोड ब्लॉक आता है, जिसमें लूप के अंदर का कोड होता है।

while (condition) {
  // code that is executed repeatedly as long as the condition is true
}

JavaScript में do-while लूप भी होता है। इसमें शर्त की जाँच लूप के अंदर का कोड चलने के बाद होती है। यह तब काम आता है जब शर्त लूप के अंदर की गई गणनाओं पर निर्भर होती है।

do {
  // The code here will always be executed once and then
  // repeatedly while the condition is true.
} while (condition);

लूप के अंदर के कोड में आप break कीवर्ड का इस्तेमाल करके लूप का चलना पूरी तरह रोक सकते हैं। इसके उलट, continue कीवर्ड सिर्फ वर्तमान इटरेशन का चलना रोकता है और अगले इटरेशन के साथ आगे बढ़ जाता है। continue की मदद से आप अक्सर लूप के अंदर के कोड के बड़े हिस्सों को if स्टेटमेंट में लपेटने से बच सकते हैं।

let i = 0;

while (i < 100) {
  i = i + 2;

  if (i % 3 === 0) {
    continue;
  }

  // The code here will only be executed when i was not divisible
  // by 3 in the check above.
}

switch स्टेटमेंट

if स्टेटमेंट के अलावा JavaScript में switch स्टेटमेंट भी होता है, जिससे शर्त के अनुसार लॉजिक चलाया जा सकता है। इसका इस्तेमाल तब होता है जब एक ही वेरिएबल की तुलना कई अलग-अलग विकल्पों से करनी हो। यह तुलना सख्त समानता (===) जाँचकर की जाती है। देखिए तुलना का कॉन्सेप्ट। किसी वेरिएबल x के लिए JavaScript में switch स्टेटमेंट का सिंटैक्स इस तरह होता है।

switch (x) {
  case option1:
    // code that is executed when "x === option1" is true
    break;
  case option2:
    // code that is executed when "x === option2" is true
    break;
  default:
    // code that is executed when x does not equal any of the options
}

default केस वैकल्पिक होता है। अगर कोई भी अन्य विकल्प वेरिएबल से मेल नहीं खाता और आप तब कुछ कोड चलाना चाहते हैं, तो इसका इस्तेमाल कीजिए।

ऊपर दिए गए break स्टेटमेंट इसलिए ज़रूरी हैं, क्योंकि JavaScript में डिफ़ॉल्ट रूप से सभी केस "फॉलथ्रू" होते हैं। इसका मतलब है कि बिना किसी break स्टेटमेंट के, पहले मेल खाने वाले विकल्प के नीचे के सभी केसों का कोड चल जाएगा, भले ही x उन विकल्पों से मेल न खाता हो। JavaScript में switch इस्तेमाल करते समय "डिफ़ॉल्ट रूप से फॉलथ्रू" वाला यह व्यवहार एक आम गलती है। फंक्शन के अंदर इस समस्या से बचने के लिए break की जगह return का भी इस्तेमाल किया जा सकता है।

निर्देश

आपकी दोस्त ली मेई एक जूस बार चलाती है, जहाँ वह स्वादिष्ट मिक्स्ड फ्रूट जूस बेचती है। आप उसकी दुकान पर अक्सर आते हैं और आपको लगा कि आप अपनी दोस्त का काम आसान बना सकते हैं। आपने तय किया कि अपने कोडिंग कौशल से ली मेई की मदद करेंगे।

1. जूस मिलाने में कितना समय लगता है, यह पता कीजिए

ली मेई अपने ग्राहकों को पहले ही बता देना पसंद करती है कि उनके ऑर्डर किए जूस को तैयार होने में कितना समय लगेगा। उसे सही संख्याएँ याद रखने में परेशानी होती है, क्योंकि हर जूस मिलाने में लगने वाला समय अलग-अलग होता है। 'Pure Strawberry Joy' को मिलाने में 0.5 मिनट लगते हैं, 'Energizer' और 'Green Garden' में 1.5 मिनट, 'Tropical Island' में 3 मिनट और 'All or Nothing' में 5 मिनट। बाकी सभी ड्रिंक्स (जैसे स्पेशल ऑफर) के लिए आप मान सकते हैं कि उन्हें तैयार करने में 2.5 मिनट लगते हैं।

अपनी दोस्त की मदद के लिए एक फंक्शन timeToMixJuice लिखिए, जो मेन्यू से एक जूस आर्गुमेंट के रूप में लेता है और उस ड्रिंक को मिलाने में लगने वाले मिनटों की संख्या लौटाता है।

timeToMixJuice('Tropical Island');
// => 3

timeToMixJuice('Berries & Lime');
// => 2.5

2. नींबू की फाँकों का भंडार फिर से भरिए

ली मेई बहुत सी ऐसी चीज़ें बनाती है जिनमें नींबू की फाँकें होती हैं, कभी सामग्री के रूप में तो कभी सजावट के लिए। इसलिए सुबह शिफ्ट शुरू करते समय उसे यह पक्का करना होता है कि आने वाले दिन के लिए नींबू की फाँकों का डिब्बा भरा हुआ हो।

फंक्शन limesToCut बनाइए, जो उन नींबू की फाँकों की संख्या लेता है जितनी ली मेई को काटनी हैं, और एक ऐरे भी लेता है जो उसके पास मौजूद साबुत नींबुओं का भंडार बताता है। एक 'small' नींबू से उसे 6 फाँकें मिलती हैं, एक 'medium' नींबू से 8 और एक 'large' नींबू से 10। वह हमेशा नींबुओं को ऐरे में जिस क्रम में वे दिए हैं, उसी क्रम में काटती है, पहले एलिमेंट से शुरू करके। वह तब तक काटती रहती है जब तक उसे जितनी फाँकें चाहिए उतनी न हो जाएँ या नींबू खत्म न हो जाएँ।

ली मेई पहले से जानना चाहती है कि उसे कितने नींबू काटने हैं। limesToCut फंक्शन को काटने वाले नींबुओं की संख्या लौटानी चाहिए।

limesToCut(25, ['small', 'small', 'large', 'medium', 'small']);
// => 4

3. शिफ्ट का काम पूरा कीजिए

ली मेई हमेशा दोपहर 3 बजे तक काम करती है। उसके बाद उसका कर्मचारी दिमित्री काम संभाल लेता है। अक्सर ऐसा होता है कि ली मेई की शिफ्ट खत्म होने तक कुछ ड्रिंक ऑर्डर हो चुके होते हैं, लेकिन बने नहीं होते। तब दिमित्री बाकी जूस बना देता है।

काम सौंपना आसान बनाने के लिए एक फंक्शन remainingOrders बनाइए, जो ली मेई की शिफ्ट में बचे मिनटों की संख्या लेता है और उन जूस का ऐरे भी लेता है जो ऑर्डर हो चुके हैं, लेकिन अभी बने नहीं हैं। फंक्शन को वे ऑर्डर लौटाने चाहिए जिन्हें ली मेई अपने कामकाजी दिन के खत्म होने से पहले बनाना शुरू नहीं कर सकती।

शिफ्ट में बचा समय हमेशा 0 से अधिक होगा। जो जूस बनाने हैं, उनका ऐरे कभी खाली नहीं होगा। साथ ही, ऑर्डर उसी क्रम में बनाए जाते हैं जिस क्रम में वे ऐरे में दिए हैं। अगर ली मेई कोई जूस मिलाना शुरू करती है, तो वह उसे पूरा ज़रूर करती है, भले ही उसे थोड़ी देर और काम करना पड़े। अगर दिमित्री को संभालने के लिए कोई ऑर्डर बचा ही नहीं है, तो एक खाली ऐरे लौटाया जाना चाहिए।

remainingOrders(5, ['Energizer', 'All or Nothing', 'Green Garden']);
// => ['Green Garden']
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
JavaScript Exercism

मिले-जुले जूस शुरू करने के लिए तैयार हैं?

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