Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

रूबी मैथ एसेंशियल्स: मोड्यूलो, बाइनरी, बिटमास्किंग और अधिक

क्या आपको एक अच्छा प्रोग्रामर बनने के लिए गणित जानने की आवश्यकता है?

यह निर्भर करता है!

यदि आप पूरे दिन सिर्फ CRUD ऐप्स लिखने जा रहे हैं तो आपको शायद ज्यादा गणित जानने की आवश्यकता नहीं है, यदि कोई हो।

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

आज आप सीखने जा रहे हैं:

  • मोड्यूलो ऑपरेटर (%)
  • संख्या प्रणालियाँ
  • बिटमास्किंग

आप सीखेंगे कि इन अवधारणाओं को रूबी में कैसे लागू करें, इसलिए यह एक व्यावहारिक गाइड होने जा रहा है।

चलिए करते हैं!

रूबी मोड्यूलो ऑपरेटर

रूबी मोड्यूलो ऑपरेटर इस तरह दिखता है:

%

हां, ठीक प्रतिशत सिंबल की तरह।

यह क्या करता है?

मोड्यूलो ऑपरेटर आपको एक डिवीजन का शेष देता है। इसका उपयोग चीजों के लिए किया जा सकता है जैसे जांचना कि कोई संख्या सम या विषम है।

हाँ।

रूबी में, हमारे पास even?/odd? मेथड्स हैं।

उदाहरण:

8.even? # true
5.even? # false

लेकिन अगर आप जांचना चाहते हैं कि कोई संख्या 3 से विभाज्य है या नहीं, तो आपको मोड्यूलो ऑपरेटर का उपयोग करना होगा।

उदाहरण:

9 % 3 == 0 # true

आइए अधिक उपयोग एक्सप्लोर करते हैं!

मोड्यूलो ऑपरेटर के व्यावहारिक उपयोग

आप मोड्यूलो का उपयोग यह जांचने के लिए कर सकते हैं कि कोई संख्या किसी अन्य से विभाज्य है या नहीं।

एक संख्या विभाज्य होती है यदि शेष 0 है।

उदाहरण:

क्लासिक "FizzBuzz" कोडिंग चैलेंज चाहता है कि आप पता लगाएं कि कोई संख्या 3 या 5 से विभाज्य है या नहीं।

if n % 3 == 0
  puts "Fizz"
end
if n % 5 == 0
  puts "Buzz"
end

आप modulo ऑपरेटर का उपयोग हर Nवीं बार चीजें करने के लिए कर सकते हैं।

इस तरह:

(1..10).select { |n| n % 2 == 0 } # [2, 4, 6, 8, 10]

या आप step मेथड का उपयोग कर सकते हैं:

(2..10).step(2).to_a # [2, 4, 6, 8, 10]

Divmod मेथड का उपयोग करना

मोड्यूलो ऑपरेटर का एक और उपयोग मिनटों को घंटे + शेष मिनटों में बदलना है।

उदाहरण:

हमारे पास 90 मिनट हैं, जो 1 घंटे और 30 मिनट के समान है।

hours, minutes = 90.divmod(60) # [1, 30]

divmod मेथड पर ध्यान दें:

यह डिवीजन और मोड्यूलो (डिवीजन का शेष) एक ही समय में करता है।

बहुत मददगार!

संख्या प्रणालियों को समझना

संख्या प्रणाली संख्याओं को दर्शाने का एक तरीका है।

अपने दैनिक संख्याओं के उपयोग में आप दशमलव प्रणाली का उपयोग करते हैं।

0123456789

एक संख्या प्रणाली संख्याओं के एक सेट और कभी-कभी कैरेक्टर्स से भी बनी होती है।

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

हेक्साडेसिमल प्रणाली कुल 16 सिंबल्स का उपयोग करती है।

0123456789abcdef

यहाँ सामान्य संख्यात्मक प्रणालियों की एक टेबल है:

नाम सिंबल काउंट सिंबल्स
हेक्साडेसिमल 16 0123456789abcdef
दशमलव 10 0123456789
ऑक्टल 8 01234567
बाइनरी 2 01

आप रूबी में to_s मेथड के साथ संख्या प्रणालियों के बीच कन्वर्ट कर सकते हैं।

यहाँ दशमलव (9) से बाइनरी (1001) में कन्वर्ट करने का तरीका है:

9.to_s(2) # "1001"

आप स्ट्रिंग पर to_i मेथड का उपयोग करके वापस इंटीजर में कन्वर्ट कर सकते हैं।

इसलिए यदि आप हेक्साडेसिमल (ff) से दशमलव (255) में जाना चाहते हैं तो आप यह कर सकते हैं:

"ff".to_i(16) # 255

जहां 16 संख्या के लिए "सिंबल काउंट" या बेस है।

बिटमास्किंग क्या है?

आप शायद हर दिन जागते हुए नहीं सोचते...

"अरे! मुझे बहुत सारे बूलियन मानों को जितना संभव हो उतनी कम जगह में पैक करने की आवश्यकता है।"

लेकिन अगर किसी दिन आपको ऐसा करने की आवश्यकता है...

एक बेहतरीन तकनीक जो आपकी मदद कर सकती है वह है "बिटमास्किंग"।

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

यह कैसे संभव है?

उन व्यक्तिगत बिट्स का उपयोग करके जिनसे संख्या बनी होती है।

क्योंकि एक बूलियन मान को एक सिंगल बिट द्वारा दर्शाया जा सकता है, और एक इंटीजर मान में 64 बिट्स होते हैं, हम एक सिंगल संख्या में 64 बूलियन मानों तक पैक कर सकते हैं।

हम बिटवाइज ऑपरेटर्स का उपयोग करने जा रहे हैं।

यहाँ एक टेबल है:

नाम सिंबल उपयोग
XOR (एक्सक्लूसिव OR) ^ टॉगल बिट
AND & चेक बिट
NOT ~ क्लियर बिट
OR | सेट बिट

बिटवाइज ऑपरेटर्स बिट लेवल पर काम करते हैं और यही हम चाहते हैं।

यहाँ एक कोड उदाहरण है:

class Bitmask
  def initialize
    @value = 0
  end
  def set(bit)
    @value |= bit
  end
  def clear(bit)
    @value &= ~bit
  end
  def check(bit)
    (@value & bit) == bit
  end
  def to_binary
    @value.to_s(2)
  end
end
bit = Bitmask.new

बिटमास्किंग का उपयोग कैसे करें

अब आप इस डेटा संरचना के साथ काम करने के लिए set, clear और check मेथड्स का उपयोग कर सकते हैं। आप यह वर्णन करने के लिए कॉन्स्टेंट्स भी परिभाषित करना चाह सकते हैं कि प्रत्येक मान का क्या अर्थ है।

उदाहरण:

class Bitmask
  ENGINES_ENABLED = 1
  CAPTAIN_ABOARD = 2
  SHIELDS_UP = 4
  # ... rest of code here
end
bit = Bitmask.new
bit.set(Bitmask::ENGINES_ENABLED)
bit.check(Bitmask::ENGINES_ENABLED)

set के लिए वैध मानों में 1 और 2 की घातें (2,4,8,16,32...) शामिल हैं, यह अन्य बिट्स को ओवरराइट करने से बचाता है।

रूबी मैथ एसेंशियल्स: मोड्यूलो, बाइनरी, बिटमास्किंग और अधिक

यदि हमारे पास 64 + 32 + 1 है, तो स्टोर्ड वैल्यू इस तरह दिखेगी:

1100001

रूबी मैथ मेथड्स

रूबी में कुछ बिल्ट-इन मैथ मेथड्स शामिल हैं जो मददगार हो सकते हैं।

हमने पहले ही divmod, even? और odd? को कवर किया है।

अन्य मेथड्स में शामिल हैं:

  • ** / pow (एक्सपोनेंशिएशन)
  • gcd (ग्रेटेस्ट कॉमन डिवाइजर)
  • abs (एब्सोल्यूट वैल्यू, नेगेटिव साइन हटाता है)
  • round (निकटतम इंटीजर तक राउंड)
  • floor और ceil (राउंड डाउन / राउंड अप)
  • Math.sqrt(n) (n का वर्गमूल)
  • Math.log2(n) (n का log2)
  • digits (इंटीजर को रिवर्स डिजिट्स की ऐरे में कन्वर्ट करता है)

उदाहरण:

5 ** 2 # 25
-10.abs # 10
300.digits # [0, 0, 3]

रूबी में मैथ वीडियो

सारांश

आपने कुछ दिलचस्प मैथ ट्रिक्स सीखे, जैसे डिवीजन का शेष खोजने के लिए मोड्यूलो % का उपयोग करना। आप शेष का उपयोग यह जांचने के लिए कर सकते हैं कि कोई संख्या किसी अन्य से विभाज्य है या नहीं।

आपने संख्या प्रणालियों, बिटमास्किंग और बिटवाइज ऑपरेटर्स के बारे में भी सीखा।

इस पोस्ट को शेयर करना न भूलें...

और यदि आपने अभी तक नहीं किया है तो RubyGuides न्यूज़लेटर को सब्सक्राइब करें!

  1. गूगल TCMalloc के साथ रूबी की मेमोरी आवंटन प्रोफाइलिंग गूगल TCMalloc के साथ रूबी की मेमोरी आवंटन प्रोफाइलिंग

    रूबी में मेमोरी आवंटन कैसे काम करता है? रूबी मेमोरी को चंक्स में प्राप्त करता है, जिन्हें पेज कहा जाता है, नए ऑब्जेक्ट्स यहां सहेजे जाते हैं। फिर… जब ये पेज भर जाते हैं, तो अधिक मेमोरी की आवश्यकता होती है। रूबी malloc फंक्शन के साथ ऑपरेटिंग सिस्टम से अधिक मेमोरी का अनुरोध करता है। यह malloc फंक्शन ऑ

  1. रूबी पार्सिंग में मास्टर करें: स्क्रैच से अपना खुद का पार्सर बनाएं रूबी पार्सिंग में मास्टर करें: स्क्रैच से अपना खुद का पार्सर बनाएं

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

  1. रूबी स्ट्रिंग फॉर्मेटिंग आसान: लीडिंग जीरोज, कॉलम और printf स्टाइल रूबी स्ट्रिंग फॉर्मेटिंग आसान: लीडिंग जीरोज, कॉलम और printf स्टाइल

    आइए बात करते हैं कि आप रूबी में स्ट्रिंग्स को कैसे फॉर्मेट कर सकते हैं। आप स्ट्रिंग को फॉर्मेट क्यों करना चाहेंगे? खैर, आप ऐसी चीजें करना चाह सकते हैं जैसे नंबर 10 से कम होने पर भी लीडिंग ज़ीरो हो (उदाहरण: 01, 02, 03...), या कुछ कंसोल आउटपुट को कॉलम में अच्छी तरह से फॉर्मेट किया गया हो। अन्य भाषाओं