কম্পিউটার

রুবি ট্রান্সপোজ পদ্ধতিতে সারিগুলিকে কলামে পরিণত করুন

আজ আপনি রুবি ট্রান্সপোজ পদ্ধতি ব্যবহার করে রুবিতে গ্রিডের সাথে কীভাবে মোকাবিলা করবেন তা শিখতে যাচ্ছেন।

কল্পনা করুন যে আপনার একটি নিখুঁত গ্রিড আছে, আসুন একটি 3×3 বর্গক্ষেত্র বলি, একটি বহুমাত্রিক বিন্যাসের আকারে৷

এবং আপনি সারিগুলি নিতে চান এবং সেগুলিকে কলামে রূপান্তর করতে চান৷ .

কেন আপনি এটা করতে চান?

একটি ব্যবহার হল ক্লাসিক গেমের জন্য:টিক-ট্যাক-টো।

আপনি একটি গ্রিড হিসাবে আপনার বোর্ড সংরক্ষণ করুন. তারপর একটি বিজয়ী চাল খুঁজে পেতে আপনাকে সারি চেক করতে হবে , কলাম &কর্ণ .

সমস্যা হল যে আপনি যদি আপনার গ্রিড একটি অ্যারে হিসাবে সংরক্ষণ করেন তবে আপনি কেবল সারিগুলিতে সরাসরি অ্যাক্সেস পাবেন৷

কলাম দ্য হার্ড ওয়ে

"সরাসরি অ্যাক্সেস" দ্বারা আমি বলতে চাচ্ছি যে আপনি আপনার অ্যারের উপর যেতে পারেন (each সহ , map , ইত্যাদি) প্রয়োজনের চেয়ে বেশি অ্যারে ইন্ডেক্সিং ব্যবহার না করে।

আসুন একটি উদাহরণ দেখি!

এখানে একটি গ্রিড আছে :

grid = [
  [1,2,3],
  [4,5,6],
  [7,8,9]
]

আমি আপনার জন্য একটি ভিজ্যুয়াল তৈরি করেছি :

রুবি ট্রান্সপোজ পদ্ধতিতে সারিগুলিকে কলামে পরিণত করুন

আপনি সূচী উল্লেখ করে কলাম পেতে পারেন।

উদাহরণস্বরূপ, প্রথম কলামটি হবে :

[grid[0][0], grid[1][0], grid[2][0]]

# [1, 4, 7]

কিন্তু প্রথম সারিটি শুধু এই :

grid[0]

# [1, 2, 3]

কিভাবে আমরা সারি দিয়ে কাজ করার মতো কলামের সাথে কাজ করা সহজ করতে পারি?

কলাম দ্য ইজি ওয়ে

এটি করার সহজ উপায় হল অ্যারে#ট্রান্সপোজ পদ্ধতি।

উদাহরণ :

columns = grid.transpose

হ্যাঁ, আপনাকে এতটুকুই করতে হবে!

এখন আপনি এই মত প্রথম কলাম পেতে পারেন:

columns[0]

# [1, 4, 7]

আপনি দেখতে পাচ্ছেন যে অনেক পদ্ধতি জেনে আপনার অনেক কাজ বাঁচাতে পারে 🙂

টিক-ট্যাক-টো

আমি পুরো বিষয়টি ব্যাখ্যা করতে যাচ্ছি না। আমি আপনাকে দেখাতে চাই কিভাবে এই পদ্ধতিটি একটি বাস্তব প্রকল্পে প্রয়োগ করতে পারে৷

টিক-ট্যাক-টো গেম জিততে আপনাকে একটি সারি, একটি কলাম বা একটি তির্যক পূরণ করতে হবে৷

সারি চেক করার জন্য কোড এখানে আছে :

def check_rows
  @board.each { |row| return row.first if all_equal?(row) }
end

এবং এখানে কলামের কোড আছে :

def check_columns
  @board.transpose.each { |row| return row.first if all_equal?(row) }
end

লক্ষ্য করুন কিভাবে একমাত্র পার্থক্য হল transpose পদ্ধতি!

এখানে all_equal? আছে পদ্ধতি:

def all_equal?(row)
   return if row.first == nil

   row.each_cons(2).all? { |x,y| x == y }
 end

আপনি গণনাযোগ্য পদ্ধতিতে এই পোস্টটি পড়ে প্রতিটি_কন পদ্ধতি সম্পর্কে আরও জানতে পারেন।

সারাংশ

আপনি ট্রান্সপোজ পদ্ধতি সম্পর্কে শিখেছেন।

একটি নিখুঁত গ্রিড দেওয়া, ট্রান্সপোজ আপনাকে সহজে অ্যাক্সেসের জন্য সারিগুলিকে কলামে রূপান্তর করতে দেয়৷

আপনি যদি এই পোস্টটি উপভোগ করেন তবে আপনি আমার বই রুবি ডিপ ডাইভের একটি অনুলিপি কেনার কথা বিবেচনা করতে পারেন৷


  1. রুবি গ্রেপ পদ্ধতি কীভাবে ব্যবহার করবেন (উদাহরণ সহ)

  2. রুবি মানচিত্র পদ্ধতি কীভাবে ব্যবহার করবেন (উদাহরণ সহ)

  3. রুবির সাথে এন-কুইন্স সমস্যা সমাধান করা

  4. রুবি গণনাযোগ্য মডিউলের একটি প্রাথমিক নির্দেশিকা (+ আমার প্রিয় পদ্ধতি)