কম্পিউটার টিউটোরিয়াল

রুবি ম্যাথ এসেনশিয়ালস: মডুলো, বাইনারি, বিটমাস্কিং এবং আরও

আপনার কি ম্যাথ জানতে হবে একজন ভালো প্রোগ্রামার হতে?

নির্ভর করে!

আপনি যদি সারাদিন CRUD অ্যাপ লিখতে থাকেন তবে আপনাকে সম্ভবত ম্যাথ জানতে হবে না, বা খুব কম।

কিন্তু আপনি যদি আরও আকর্ষণীয় জিনিস করতে চান, যেন কোডিং চ্যালেঞ্জ সমাধান করা এবং কোডিং ইন্টারভিউর জন্য প্রস্তুত থাকা তবে কয়েকটি বেসিক কনসেপ্ট শিখা হেল্পফুল।

আজ আপনি শিখবেন:

  • মডুলো অপারেটর (%)
  • নাম্বার সিস্টেম
  • বিটমাস্কিং

আপনি শিখবেন এই কনসেপ্টগুলো রুবিতে কীভাবে অ্যাপ্লাই করতে হয়, তাই এটি একটি প্র্যাক্টিক্যাল গাইড।

চলুন শুরু করি!

রুবি মডুলো অপারেটর

রুবি মডুলো অপারেটর দেখতে এমন:

%

হ্যাঁ, ঠিক পার্সেন্টেজ সিম্বলের মতো।

এটি কী করে?

মডুলো অপারেটর আপনাকে একটি ভাগশেষ দেয়। এটি জিনিসগুলোর জন্য ব্যবহার করা যায় যেন একটি সংখ্যা জোড় নাকি বিজোড় সেটি চেক করা।

হ্যাঁ।

রুবিতে, আমাদের even?/odd? মেথড আছে।

উদাহরণ:

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

কিন্তু আপনি যদি চেক করতে চান একটি সংখ্যা ৩ দিয়ে বিভাজ্য কিনা, তবে আপনাকে মডুলো অপারেটর ব্যবহার করতে হবে।

উদাহরণ:

 9 % 3 == 0 # true 

চলুন আরও ব্যবহার এক্সপ্লোর করি!

মডুলো অপারেটরের প্র্যাক্টিক্যাল ব্যবহার

আপনি মডুলো ব্যবহার করতে পারেন একটি সংখ্যা অন্য সংখ্যা দিয়ে বিভাজ্য কিনা চেক করতে।

একটি সংখ্যা বিভাজ্য যদি ভাগশেষ ০ হয়।

উদাহরণ:

ক্লাসিক "FizzBuzz" কোডিং চ্যালেঞ্জ আপনাকে চেক করতে চায় একটি সংখ্যা ৩ অথবা ৫ দিয়ে বিভাজ্য কিনা।

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

আপনি modulo অপারেটর ব্যবহার করতে পারেন প্রতিটি Nth 타임ে কিছু করতে।

এভাবে:

 (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 মেথড ব্যবহার করা

মডুলো অপারেটর আরেকটি ব্যবহার হলো মিনিটকে আওয়ার + বাকি মিনিটে কনভার্ট করা।

উদাহরণ:

আমাদের কাছে ৯০ মিনিট আছে, যা ১ ঘণ্টা এবং ৩০ মিনিটের সমান।

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

divmod মেথডটি লক্ষ্য করুন:

এটি ডিভিশন এবং মডুলো (ভাগশেষ) একসাথে করে।

খুব হেল্পফুল!

নাম্বার সিস্টেম বুঝতে

নাম্বার সিস্টেম হলো সংখ্যা রিপ্রেজেন্ট করার একটি পদ্ধতি।

আপনার দৈনন্দিন সংখ্যা ব্যবহারে আপনি ডেসিমাল সিস্টেম ব্যবহার করেন।

 0123456789 

একটি নাম্বার সিস্টেম সংখ্যাগুলোর একটি সেট এবং কখনো কখনো ক্যারেক্টারও দিয়ে কম্পোজ করা থাকে।

উদাহরণস্বরূপ:

হেক্সাডেসিমাল সিস্টেম মোট ১৬টি সিম্বল ব্যবহার করে।

 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 

এখানে ১৬ হলো সংখ্যার "সিম্বল কাউন্ট" বা বেস।

বিটমাস্কিং কী?

আপনি সম্ভবত প্রতিদিন উঠলে চিন্তা করেন না...

"ওহে! আমাকে অনেক বুলিয়ান মান যতটা সম্ভব কম স্পেসে প্যাক করতে হবে।"

কিন্তু যদি কখনো আপনাকে এটা করতে হয়...

একটি দুর্দান্ত টেকনিক যা আপনাকে সাহায্য করতে পারে সেটি হলো "বিটমাস্কিং"।

বিটমাস্কিং দিয়ে আপনি অনেক বুলিয়ান মান একটি সিঙ্গল ইন্টিজার ভ্যালুতে প্যাক করতে পারেন।

এটি কীভাবে সম্ভব?

সंख্যাটি যেসব ইনডিভিজুয়াল বিট দিয়ে তৈরি সেগুলো ব্যবহার করে।

কারণ একটি বুলিয়ান মান একটি সিঙ্গল বিট দিয়ে রিপ্রেজেন্ট করা যায়, এবং একটি ইন্টিজার ভ্যালুর ৬৪ বিট থাকে, আমরা ৬৪টি বুলিয়ান মান একটি সিঙ্গল নম্বরে প্যাক করতে পারি।

আমরা বিটওয়াইজ অপারেটর ব্যবহার করব।

এখানে একটি টেবিল:

নাম সিম্বল ব্যবহার
XOR (Exclusive OR) ^ Toggle Bit
AND & Check Bit
NOT ~ Clear Bit
OR | Set Bit

বিটওয়াইজ অপারেটর বিট লেভেলে কাজ করে এবং সেটিই আমাদের চাওয়া।

এখানে একটি কোড উদাহরণ:

 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 

BitMasking কীভাবে ব্যবহার করবেন

এখন আপনি 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-এর জন্য বৈধ মানগুলো হলো ১ এবং ২-এর পাওয়ারগুলো (2,4,8,16,32...), এটি অন্যান্য বিট ওভাররাইট হওয়া থেকে বাঁচায়।

রুবি ম্যাথ এসেনশিয়ালস: মডুলো, বাইনারি, বিটমাস্কিং এবং আরও

যদি আমাদের ৬৪ + ৩২ + ১ থাকে, তবে স্টোরড ভ্যালু এমন দেখাবে:

 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] 

রুবি ম্যাথ ভিডিও

সারসংক্ষেপ

আপনি কয়েকটি আকর্ষণীয় ম্যাথ ট্রিক শিখেছেন, যেন মডুলো % ব্যবহার করে ভাগশেষ বের করা। আপনি ভাগশেষ ব্যবহার করতে পারেন একটি সংখ্যা অন্য সংখ্যা দিয়ে বিভাজ্য কিনা চেক করতে।

আপনি নাম্বার সিস্টেম, বিটমাস্কিং এবং বিটওয়াইজ অপারেটর সম্পর্কেও শিখেছেন।

এই পোস্টটি শেয়ার করতে ভুলবেন না...

এবং রুবিগাইডস নিউজলেটার সাবস্ক্রাইব করুন যদি এখনো না করেছেন!


  1. রুবিতে সিলেকশন সর্ট মাস্টার করুন: স্টেপ-বাই-স্টেপ ইমপ্লিমেন্টেশন

  2. গুগল TCMalloc দিয়ে রুবির মেমরি অ্যালোকেশন প্রোফাইলিং

  3. রুবি পার্সিং মास্টার: স্ক্র্যাচ থেকে নিজস্ব পার্সার বানান

  4. রুবি স্ট্রিং ফরম্যাটিং: লিডিং জিরো, কলাম ও printf স্টাইল সহজে