কোডিং চ্যালেঞ্জ করা আপনার রুবি ও সমস্যা সমাধানের দক্ষতা উন্নত করার একটি চমৎকার উপায়। এবং কোডিং ইন্টারভিউর জন্য প্রস্তুত होने!
কেন?
কারণ একটি চ্যালেঞ্জের সময় আপনি আপনার সारा ফোকাস একটি নির্দিষ্ট সমস্যা সমাধানে রাখেন।
আপনাকে অন্য কিছু নিয়ে চিন্তা করতে হয় না।
এই ধরনের প্র্যাকটিস আপনার চিন্তা করার ক্ষমতা বাড়িয়ে দেয়, আপনাকে রোমান্চক ভাষা ফিচার এক্সপ্লোর করতে দেয় এবং আপনাকে একটি ভালো রুবি ডেভেলপার বানাতে সাহায্য করে।
এই চ্যালেঞ্জগুলোর কিছু কম্পিউটার অ্যালগরিদম, ডেটা স্ট্রাকচার বা কনসেপ্ট সংক্রান্ত বিশেষ জ্ঞান দরকার হতে পারে, যেন কোনো ম্যাথ ট্রিক।
আপনি যদি অধিকাংশ সমাধান না করতে পারেন তেও কোনো সমস্যা নেই।
চিন্তা করবেন না!
এখন:
মনে হয় কয়েকটি সমাধান পড়া প্রক্রিয়া বোঝার জন্য সহায়ক হতে পারে।
শুরু করা যাক…
চ্যালেঞ্জ ১: ডুপ্লিকেট খোঁজা
প্রথম চ্যালেঞ্জটি হলো: একটি ইন্টিজার মান সম্বিষ্ট অ্যারে দেওয়া আছে, আপনাকে সকল ডুপ্লিকেট নাম্বার খুঁজে বের করতে হবে।
এখানে একটি উদাহরণ:
numbers = [1,2,2,3,4,5] find_duplicates(numbers) # [2]
একটি প্রশ্ন থেকে শুরু করি…
“আমি কীভাবে জানব যে একটি নির্দিষ্ট নাম্বার ডুপ্লিকেট?”
আমি এক ধাপে সমাধান পেতে চাই না।
এই স্টেজে, আমি শুধু একটি প্রশ্ন করব এবং উত্তর দিব যা আমাকে সমাধানের কাছাকাছি ले যাবে।
কয়েকটি আইডিয়া লিখুন:
- আমি অ্যারেতে প্রতিটি নাম্বার কতবার আছে সেটি কাউন্ট করতে পারি, তারপর কাউন্ট = ২ মানে ডুপ্লিকেট।
- আমি প্রতিটি এলিমেন্টের ওপর যেতে পারি এবং "দেখা" এলিমেন্টগুলোর একটি লিস্ট রাখতে পারি, যদি কোনো এলিমেন্ট দুবার দেখি তবে ডুপ্লিকেট পেয়ে গেলাম।
- আমি নাম্বারগুলোকে স্ট্রিংয়ে জয়েন করতে পারি এবং রেগুলার এক্সপ্রেশন দিয়ে ডুপ্লিকেট নাম্বার ম্যাচ করতে পারি।
এই মুহূর্তে “কোনটি ভালো” বিষয়টি মনে করবেন না।
সেটি নিয়ে চিন্তা করবেন না!
এখন, গুরুত্বপূর্ণ হলো একটি ওয়ার্কিং সমাধান পেতে। যেটি আপনার মতে ভালো লাগে সেটি বেছে নিন এবং সেটির কোড লিখুন।
উদাহরণ:
seen = [] numbers.each_with_object([]) do |n, dups| dups << n if seen.include?(n) seen << n end # [2]
এটি সঠিক সমাধান মনে হচ্ছে।
এখন:
আপনি অন্য ইনপুট (বিভিন্ন অ্যারে) দিয়ে চেষ্টা করবেন যেন এটি সত্যিকারের কাজ করে, ইউনিট টেস্ট লিখা এর জন্য চমৎকার।
যদি সমাধান ১০০% ওয়ার্কিং হয় তবে আপনি অন্যান্য সমাধানগুলো ট্রাই করতে পারেন এবং যেটি বোঝা সহজ সেটি ব্যবহার করতে পারেন।
পারফেকশন খুঁজবেন না।
শিখতে, বোঝাতে এবং প্রতিদিন প্রগতি করার দিকে লক্ষ্য করুন!
চ্যালেঞ্জ ২: বৈধ শব্দ (Valid Words)
একটি ক্যারেক্টার অ্যারে এবং একটি শব্দ দেওয়া আছে, শব্দটি কীভাবে ক্যারেক্টারগুলো থেকে বানানো যায় সেটি খুঁজে বের করুন।
উদাহরণ:
word = "orange" characters = %w(e n g a r o) valid_word?(characters, word) # true
আবার একটি প্রশ্ন দিয়ে আমাদের চিন্তা প্রক্রিয়া নির্দেশ করি।
“আমরা কীভাবে নিশ্চিত করব যে শব্দটি এই ক্যারেক্টারগুলো দিয়ে বানানো যায়?”
আইডিয়া বের করুন।
বিচ্ছিন্নতা দূর করুন এবং চিন্তা করুন।
কাগজে খাটায় সাহায্য করতে পারে।
আমার আইডিয়া:
word-এর প্রতিটি ক্যারেক্টারের জন্য, সেটিcharactersঅ্যারে থেকে রিমুভ করুন, আপনি যদি সব ক্যারেক্টার রিমুভ না করতে পারেন তবেfalseরিটার্ন করুনwordএবংcharacters-এ সব ক্যারেক্টার কাউন্ট করুন, তারপর কাউন্ট বিয়োগ করুন
এখানে একটি সম্ভাব্য সমাধান:
word .each_char .all? { |ch| characters.delete_at(characters.index(ch)) rescue nil }
আপনার সমাধান কী?
কমেন্ট সেকশনে শেয়ার করুন।
সারসংক্ষেপ
আপনি কোডিং চ্যালেঞ্জ এবং কীভাবে সেগুলো ব্যবহার করে আপনার রুবি স্কিল বাড়াবেন সেটি শিখেছেন!
মনে রাখবেন:
একটি নির্দিষ্ট চ্যালেঞ্জ সমাধান না করলে কোনো সমস্যা নেই। এটিকে ভিডিও গেম বসের মতো ভাবুন, বস লেভেল ১০০ এবং আপনি লেভেল ৭০ হলে এই বসকে হারানো খুব কঠিন হবে।
আপনি সেক্ষনে কী করবেন?
আপনি লেভেল আপ করবেন এবং সহজ চ্যালেঞ্জ দিয়ে অভিজ্ঞতা অর্জন করবেন (নিম্ন লেভেল বস), এবং ভালো গিয়ার পাবেন (রুবি ও প্রোগ্রামিং সম্পর্কে আরও শিখবেন)।
শুভকামনা এবং মজা করুন! 🙂