আজ আপনি শিখবেন রুবি ট্রান্সপোজ মেথড ব্যবহার করে গ্রিড কীভাবে হ্যান্ডেল করতে হয়।
কল্পনা করুন আপনার কাছে একটি পারফেক্ট গ্রিড রয়েছে, বলুন ৩x৩ স্কোয়ার, একটি মাল্টি-ডাইমেনশনাল অ্যারের রূপে। এবং আপনি রোগুলোকে কলামে রূপান্তর করতে চান। কেন করবেন এটি? একটি ব্যবহার হলো ক্লাসিক গেম: টিক-ট্যাক-টো। আপনি আপনার বোর্ডকে একটি গ্রিড হিসেবে স্টোর করেন। তারপর একটি বিনিং মুভ খুঁজে বের করতে আপনাকে রো, কলাম এবং ডায়াগোনাল চেক করতে হয়। সমস্যা হলো আপনি যদি আপনার গ্রিডকে একটি অ্যারে হিসেবে স্টোর করেন তবে আপনি শুধু রোতে ডাইরেক্ট অ্যাক্সেস পান।
কঠিন পদ্ধতিতে কলাম
"ডাইরেক্ট অ্যাক্সেস" বলতে আমি মানে করছি আপনি আপনার অ্যারেতে ইটারেট করতে পারেন (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]
আমরা কলামের সাথে কাজ করা কতটুকু সহজ করতে পারি রোএর মতো?
সহজ পদ্ধতিতে কলাম
এটি করার সহজ পদ্ধতি হলো Array#transpose মেথড ব্যবহার করা। উদাহরণ:
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
আপনি each_cons মেথড সম্পর্কে আরও জানতে এই পোস্ট পড়তে পারেন Enumerable মেথড সম্পর্কে।
সারসংক্ষেপ
আপনি transpose মেথড সম্পর্কে শিখলেন। একটি পারফেক্ট গ্রিড দেওয়া থাকলে, transpose আপনাকে রোকে কলামে রূপান্তর করতে দেয় সহজ অ্যাক্সেসের জন্য। আপনি যদি এই পোস্টটি উপভোগ করেন তবে আপনি আমার বই Ruby Deep Dive-এর একটি কপি কেনার কথা বিবেচনা করতে পারেন।