ट्रैक
/
Crystal
Crystal
/
अभ्यास
/
पार्टी रोबोट
पार्टी रोबोट

पार्टी रोबोट

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

परिचय

Crystal में String नाम का एक टाइप होता है, जो टेक्स्ट को दर्शाने के लिए इस्तेमाल किया जाता है। Crystal की स्ट्रिंग यूनिकोड अक्षरों का एक क्रम होती है। स्ट्रिंग अपरिवर्तनीय होती हैं, यानी एक बार बन जाने के बाद उन्हें बदला नहीं जा सकता। इसका मतलब है कि जब भी आप किसी स्ट्रिंग में बदलाव करते हैं, एक नई स्ट्रिंग बनती है। इसलिए मूल स्ट्रिंग नहीं बदलती।

स्ट्रिंग बनाने के लिए आप डबल कोट्स " का इस्तेमाल करते हैं।

"Hello World"

स्ट्रिंग जोड़ना

दो स्ट्रिंग जोड़ने के लिए + ऑपरेटर का इस्तेमाल कीजिए। + ऑपरेटर दोनों स्ट्रिंग को मिलाकर एक नई स्ट्रिंग लौटाता है।

hello = "Hello"
hello + " World"
# => "Hello World"

स्ट्रिंग और संख्याओं के बीच बातचीत

to_i मेथड स्ट्रिंग को पूर्णांक में बदल देता है। वैकल्पिक रूप से, दशमलव संख्या पाने के लिए to_f मेथड इस्तेमाल की जा सकती है। अगर स्ट्रिंग को संख्या में नहीं बदला जा सकता, तो ArgumentError फेंका जाता है।

"1".to_i
# => 1

"1.0".to_f
# => 1.0

"Hello".to_i
# => ArgumentError: Invalid integer: Hello

किसी पूर्णांक या दशमलव संख्या को to_s मेथड की मदद से स्ट्रिंग में बदला जा सकता है।

1.to_s
# => "1"

1.0.to_s
# => "1.0"

इंटरपोलेशन

इंटरपोलेशन स्ट्रिंग जोड़ने और स्ट्रिंग के अंदर एक्सप्रेशन डालने का एक आसान तरीका है। किसी स्ट्रिंग में इंटरपोलेशन करने के लिए # अक्षर के बाद घुंघराले ब्रैकेट {} लगाइए और उनके अंदर एक्सप्रेशन लिखिए।

name = "World"
"Hello #{name}!"
# => "Hello World!"

Crystal एक्सप्रेशन के परिणाम को अपने आप स्ट्रिंग में बदल देता है।

"Hello #{1 + 1}!"
# => "Hello 2!"

आकार

जब आपको किसी स्ट्रिंग में अक्षरों की संख्या जाननी हो, तो size मेथड इस्तेमाल कीजिए, जो स्ट्रिंग की लंबाई पूर्णांक के रूप में लौटाता है। स्ट्रिंग का आकार स्ट्रिंग में ही संग्रहीत एक प्रॉपर्टी होती है, इसलिए मेथड को कॉल करने पर हर बार आकार की गणना नहीं करनी पड़ती, और यह बहुत तेज़ होता है।

"Hello World".size
# => 11

इंडेक्सिंग

इंडेक्सिंग का मतलब है किसी स्ट्रिंग से कोई खास अक्षर निकालना। किसी String से अक्षर निकालने के लिए आप ब्रैकेट वाला जाना-पहचाना तरीका इस्तेमाल कर सकते हैं।

Note

[] एक String इंस्टेंस मेथड के रूप में लागू किया गया है, जिसमें इंडेक्स ही मेथड का आर्गुमेंट होता है।

किसी स्ट्रिंग का पहला अक्षर इंडेक्स 0 पर होता है।

"Hello World"[0]
# => 'H'

"Hello World"[6]
# => 'W'

स्ट्रिंग के अंत से कोई अक्षर निकालने के लिए आप स्ट्रिंग की लंबाई में से एक घटाकर अंतिम अक्षर का इंडेक्स पा सकते हैं। अंत से दूसरे अक्षर के लिए लंबाई में से दो घटाइए, और इसी तरह आगे भी। इसका एक छोटा तरीका भी है, और वह है बस ऋणात्मक इंडेक्स इस्तेमाल करना। इसमें अंतिम अक्षर का इंडेक्स -1 होता है, अंत से दूसरे अक्षर का -2, और इसी तरह आगे भी।

name = "Hello World"
name[name.size - 1]
# => 'd'

name[-1]
# => 'd'

एस्केपिंग

कुछ अक्षर स्ट्रिंग में सीधे नहीं लिखे जा सकते। ऐसे में आपको एस्केप सीक्वेंस इस्तेमाल करना पड़ता है। जैसे, अगर आप स्ट्रिंग में डबल कोट्स लिखना चाहते हैं, तो डबल कोट्स को एस्केप करना पड़ता है। एस्केप सीक्वेंस लिखने के लिए \ अक्षर इस्तेमाल कीजिए और उसके बाद वह अक्षर लिखिए जिसे एस्केप करना है।

Crystal में ये खास अक्षर हैं:

Value Description
\a अलर्ट
\b बैकस्पेस
\e एस्केप
\f फॉर्म फीड
\n लाइन फीड या नई लाइन
\r कैरिज रिटर्न
\t आड़ा टैब
\v खड़ा टैब
\\ बैकस्लैश
\' सिंगल कोट
\" डबल कोट
\377 ऑक्टल ASCII अक्षर
\xFF हेक्साडेसिमल ASCII अक्षर
\uFFFF हेक्साडेसिमल यूनिकोड अक्षर
puts "Hello \"World\""
# => Hello "World"

puts "Hello \nWorld"
# => Hello
# => World

बहु-पंक्ति स्ट्रिंग

बहु-पंक्ति स्ट्रिंग लिखने के लिए वही सिंटैक्स इस्तेमाल कीजिए जो एक-पंक्ति स्ट्रिंग के लिए करते हैं, बस स्ट्रिंग में जितनी पंक्तियाँ चाहिए, उतनी बार नई लाइन लिखिए।

"Hello
World"
# => "Hello\nWorld"

निर्देश

एक बार की बात है, एक अनोखा प्रोग्रामर था जो सलाखों वाली खिड़कियों के एक अजीब घर में रहता था। एक दिन उसने एक ऑनलाइन जॉब बोर्ड से पार्टी रोबोट बनाने का काम स्वीकार किया। रोबोट को लोगों का स्वागत करना है और उन्हें उनकी सीट तक पहुँचाना है। पहला संस्करण बहुत तकनीकी था और उसमें साफ झलकता था कि प्रोग्रामर में लोगों से मेलजोल की कमी है। उसमें से कुछ बातें अगले संस्करण में भी पहुँच गईं।

1. पार्टी में नए मेहमान का स्वागत कीजिए

welcome मेथड लिखिए, जो दिए गए नाम का इस्तेमाल करके स्वागत का संदेश लौटाए:

PartyRobot.welcome("Christiane")
# => Welcome to my party, Christiane!

2. पार्टी में उस नए मेहमान का स्वागत कीजिए जिसका जन्मदिन आज है

happy_birthday मेथड लिखिए, जो व्यक्ति का दिया गया नाम और उम्र लेकर जन्मदिन का संदेश लौटाए। दुर्भाग्य से प्रोग्रामर थोड़ा दिखावा करने वाला है, इसलिए रोबोट को हर मेहमान के जन्मदिन का अपना ज्ञान दिखाना पड़ता है।

PartyRobot.happy_birthday("Frank", 58)
# => Happy birthday Frank! You are now 58 years old!

3. रास्ता बताइए

रास्ता बताने के लिए assign_table फंक्शन लिखिए। यह 5 पैरामीटर लेता है।

  • जिस नए मेहमान का स्वागत करना है उसका नाम (String)
  • टेबल का नंबर (Int)
  • साथ बैठने वाले का नाम (String)
  • टेबल किस दिशा में है (String)
  • टेबल की दूरी (Float64)

सही परिणाम का फॉर्मेट नीचे दिए उदाहरण में देखा जा सकता है।

साथ बैठने वाले के नाम को छोटा करके उसके पहले और अंतिम अक्षर लिखे जाने चाहिए। Frank, Fk बन जाता है; Christian, Cn बन जाता है, और इसी तरह।

टेबल का नंबर रोबोट ही बताता है। रोबोट टेबल की दूरी भी बताता है। अच्छी बात यह है कि दूरी 1 दशमलव स्थान की सटीकता तक ही बताई जाती है।

PartyRobot.assign_table("Christiane", "on the left", 27, 23.7834298, "Frank")
# =>
# Welcome to my party, Christiane!
# You have been assigned to table 27. Your table is on the left, exactly 23.8 meters from here.
# You will be sitting next to Fk.
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Crystal Exercism

पार्टी रोबोट शुरू करने के लिए तैयार हैं?

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