ट्रैक
/
Common Lisp
Common Lisp
/
अभ्यास
/
पिज़्ज़ा पाई
पिज़्ज़ा पाई

पिज़्ज़ा पाई

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

परिचय

Common Lisp में, कई भाषाओं की तरह, संख्याएँ कई प्रकार की होती हैं। इनमें से दो सबसे बुनियादी प्रकार ये हैं:

पूर्णांक

कई भाषाओं की तरह Common Lisp में भी पूर्णांक होते हैं। ये ऐसी पूर्ण संख्याएँ होती हैं जिनमें दशमलव बिंदु नहीं होता (जैसे -6, 0, 25, 1234, इत्यादि)।

Common Lisp पूर्णांकों के आकार पर कोई सीमा नहीं रखता। पूर्णांक कितने भी बड़े हो सकते हैं (या ऋणात्मक होने पर कितने भी छोटे)।

सामान्य तौर पर, अगर आप केवल पूर्ण संख्याओं के साथ काम कर रहे हैं, तो आपको पूर्णांक चुनने चाहिए, क्योंकि कई गणनाओं के बाद दशमलव संख्याओं जैसी शुद्धता की कमी इनमें नहीं होती।

दशमलव संख्याएँ

कई भाषाओं की तरह, Common Lisp में भी दशमलव संख्याएँ होती हैं। ये भिन्नात्मक या पूर्ण संख्याएँ होती हैं, जिनमें दशमलव बिंदु होता है (जैसे 3.14, -1.7, 99.99, 2048.0)।

अंकगणित

Common Lisp अधिकांश कामों के लिए मानक अंकगणितीय ऑपरेटर इस्तेमाल करता है, लेकिन एक बात में यह कुछ अलग है: यह जानी-पहचानी "इनफिक्स नोटेशन" की जगह "प्रीफिक्स नोटेशन" इस्तेमाल करता है।

इसे और साफ़ तरीके से देखिए:

;; Infix-notation (non-lisp languages)
1 + 2 + 3 + 4 + 5 ; => 15
;; Prefix-notation (lisp languages)
(+ 1 2 3 4 5)     ; => 15

प्रीफिक्स नोटेशन कुछ कामों को, जैसे 2 + 2 को, कुछ अनजाने रूप (+ 2 2) में बदल देता है, लेकिन इससे एक साथ कई संख्याओं पर काम करना बहुत आसान हो जाता है।

बुनियादी गणित

Common Lisp में सभी आम फंक्शन मौजूद हैं: जोड़, घटाव, गुणा और भाग के लिए +, -, *, /।

भाग देते समय कभी-कभी यह जानना ज़रूरी होता है कि भाग का शेष क्या है। यह काम mod (मॉड्यूलो के लिए) फंक्शन करता है, जो आर्गुमेंट के रूप में एक संख्या और एक भाजक लेता है:

(mod 4 2)  ; => 0
(mod 2 4)  ; => 2
(mod 10 3) ; => 1

संख्याओं की तुलना

अंत में, अलग-अलग संख्याओं की तुलना करने के लिए आपको = (बराबर), /= (बराबर नहीं), और >= (से बड़ा या बराबर) जैसे फंक्शन काम के लग सकते हैं। जब ये तुलनाएँ सही होती हैं (जैसे (= 1 1)), तो ये T लौटाती हैं, और जब सही नहीं होतीं (जैसे (> 0 1)), तो NIL लौटाती हैं।

निर्देश

लिस्प एलियन लिली को खाना बनाना बहुत पसंद है। वह अपने दोस्तों के साथ पिज़्ज़ा पार्टी करना चाहती है, लेकिन अपनी सामग्री का पूरा-पूरा उपयोग करने के लिए वह शुरू करने से पहले यह जानना चाहती है कि उसे हर सामग्री कितनी चाहिए होगी।

इसे हल करने के लिए लिली ने कुछ योजना अपने आप करने वाला एक प्रोग्राम बनाया है, लेकिन उसे इसे पूरा करने में आपकी मदद चाहिए। क्या आप लिली की मदद करेंगे, ताकि उसकी पिज़्ज़ा पार्टी अनुपात के हिसाब से एकदम सही हो?

1. आटे का अनुपात

सबसे पहले तो यह बात ध्यान में रखिए: हर बढ़िया पिज़्ज़ा की शुरुआत स्वादिष्ट आटे से होती है!

लिली को पतले और कुरकुरे पिज़्ज़ा पसंद हैं, जिनका किनारा थोड़ा मोटा होता है। बीच के हिस्से के लिए हमेशा 200 ग्राम आटा लगता है, लेकिन किनारे के हर 20 सेंटीमीटर के लिए 45 ग्राम आटा चाहिए।

अच्छी बात यह है कि लिली ने पिज़्ज़ा की संख्या (n) और उनके व्यास (d) से आटे के ग्राम (g) निकालने का समीकरण तैयार कर लिया है:

g = n * (((45 * pi * d) / 20) + 200)

लिली को एक ऐसा फंक्शन चाहिए जो:

  • पिज़्ज़ा की संख्या (n) और उनका व्यास (d) लेता है,
  • और आटे की ज़रूरत को निकटतम ग्राम (g) तक लौटाता है।

उदाहरण के लिए, 30 सेंटीमीटर व्यास के 4 पिज़्ज़ा बनाने के लिए:

(dough-calculator 4 30) ; => 1648

2. सॉस की एक बूँद

लिली सॉस लगाने में बहुत सावधान रहती है, लेकिन उसके पिज़्ज़ा का आकार हर बार एक जैसा नहीं होता।

व्यास (d) निकालने के लिए वह नीचे दिया गया समीकरण इस्तेमाल करती है, जिसमें लगाया गया सॉस (s) एक वेरिएबल होता है:

d = square-root of ((40 * s) / (3 * pi))

लिली को एक ऐसा फंक्शन चाहिए जो लगाए गए सॉस के हर मिलीलीटर (s) से पिज़्ज़ा का व्यास (d) निकालता हो।

उदाहरण के लिए, मान लीजिए लिली ने 250 मिलीलीटर सॉस इस्तेमाल किया है:

(size-from-sauce 250) ; => 32.57

3. थोड़ा चीज़ भी दीजिए

लिली के ग्रह पर सारा चीज़ बिल्कुल सही घनों में आता है और आकार के हिसाब से बिकता है। (आपको और क्या उम्मीद थी? यह तो एक एलियन ग्रह है ही...)

एक बार फिर, लिली ने भुजा की लंबाई (l) वाले चीज़ के घन से बनने वाले कुछ व्यास (d) के पिज़्ज़ा की संख्या (n) का समीकरण निकाल लिया है:

n = (2 * (l^3)) / (3* pi * (d^2))

एक ऐसा फंक्शन बनाइए जो:

  • चीज़ के घन की भुजा की लंबाई (l) और पिज़्ज़ा का व्यास (d) लेता है,
  • और बनने वाले पिज़्ज़ा की संख्या (n) नीचे की ओर पूर्णांकित करके लौटाता है।

उदाहरण के लिए, मान लीजिए 25x25x25 सेंटीमीटर का चीज़ का घन है और पिज़्ज़ा का व्यास 30 सेंटीमीटर है:

(pizzas-per-cube 25 30) ; => 3

4. सबका बराबर हिस्सा

अंत में, लिली चाहती है कि हर पिज़्ज़ा 8 स्लाइस में बंटे और उसके दोस्तों में बराबर-बराबर बाँटा जाए।

एक ऐसा फंक्शन बनाइए जो:

  • पिज़्ज़ा की संख्या और दोस्तों की संख्या लेता है,
  • और अगर पिज़्ज़ा दोस्तों में बराबर बँट जाएँ तो T लौटाता है, वरना NIL।

उदाहरण के लिए:

;; For splitting 3 pizzas between 4 friends
(fair-share-p 3 4) ; => T
;; For splitting 2 pizzas between 3 friends
(fair-share-p 2 3) ; => NIL
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Common Lisp Exercism

पिज़्ज़ा पाई शुरू करने के लिए तैयार हैं?

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