পদ্ধতিটি কীভাবে টিডিডি নিম্নলিখিত মামলা পরিচালনা করে তা আমি অস্পষ্ট। ধরুন আমি পাইথনে একীভূত আলগোরিদিমটি প্রয়োগ করতে চাই। আমি লেখার মাধ্যমে শুরু
assert mergesort([]) === []
এবং পরীক্ষা ব্যর্থ হয়
নামের ত্রুটি: নাম 'মার্জোর্ট' সংজ্ঞায়িত করা হয়নি
আমি তারপর যোগ
def mergesort(a):
return []
এবং আমার পরীক্ষা পাস। পরবর্তী আমি যোগ করুন
assert mergesort[5] == 5
এবং আমার পরীক্ষা ব্যর্থ হয়
AssertionError
যা দিয়ে আমি পাস করি
def mergesort(a):
if not a:
return []
else:
return a
এর পরে, আমি যুক্ত করি
assert mergesort([10, 30, 20]) == [10, 20, 30]
এবং আমাকে এখন এই পাসটি করার চেষ্টা করতে হবে। আমি একীভূত অ্যালগরিদমটি "জানি" তাই আমি লিখি:
def mergesort(a):
if not a:
return []
else:
left, right = a[:len(a)//2], a[len(a)//2:]
return merge(mergesort(left)), mergesort(right))
এবং এই সঙ্গে ব্যর্থ
নামের ত্রুটি: নাম 'মার্জ' সংজ্ঞায়িত করা হয়নি
এখন এখানে প্রশ্ন। আমি কীভাবে দৌড়াতে পারি এবং merge
টিডিডি ব্যবহার করে প্রয়োগ শুরু করতে পারি ? এটি দেখে মনে হচ্ছে আমি করতে পারবেন, কারণ আমি এই "ঝুলন্ত" অপূর্ণ, জন্য পরীক্ষার ব্যর্থ mergesort
, যা পর্যন্ত পাস করা হবে না merge
শেষ! যদি এই পরীক্ষাটি প্রায় স্থির হয়ে থাকে তবে আমি সত্যিই টিডিডি কখনই করতে পারি না কারণ আমার টিডিডি পুনরাবৃত্তিগুলি নির্মাণের সময় আমি "সবুজ" হব না merge
।
দেখে মনে হচ্ছে যে আমি নিম্নলিখিত তিনটি কুরুচিপূর্ণ দৃশ্যের সাথে আটকে আছি এবং জানতে চাই (1) এর মধ্যে কোনটি টিডিডি সম্প্রদায় পছন্দ করে, বা (2) আমি যে অন্য কোনও পদ্ধতির অনুপস্থিত রয়েছি? আমি বেশ কয়েকটি চাচা বব টিডিডি ওয়াকথ্রু দেখেছি এবং এর আগে এরকম কেস দেখে মনে নেই!
এখানে 3 টি মামলা রয়েছে:
- একটি পৃথক ডিরেক্টরি স্যুইটের সাথে আলাদা ডিরেক্টরিতে মার্জটি প্রয়োগ করুন।
- সহায়ক ফাংশনটি বিকাশকালে সবুজ হওয়ার বিষয়ে চিন্তা করবেন না, আপনি কোন পরীক্ষাগুলি সত্যিই পাস করতে চান তা নিজেই ট্র্যাক করুন ।
- মন্তব্য করুন (GASP!) বা
mergesort
সেই কলের লাইনগুলি মুছুনmerge
; তারপরেmerge
কাজ করার পরে এগুলি আবার রেখে দিন।
এগুলি আমার কাছে নির্বোধ দেখাচ্ছে (বা আমি কি এই ভুলটির দিকে তাকিয়ে আছি?) কেউ কি পছন্দসই পদ্ধতি জানেন?
mergesort
। আপনি যদি এটি করার জন্য "সঠিক" উপায়টি সন্ধান করেন, তবে mergesort
একক সিরিজের একক সিরিজে আপনার অ্যালগরিদমের ম্যাপিং সম্পর্কে সঠিক হওয়া ছাড়া অন্যটি নেই ; অর্থাত্ তাদের mergesort
প্রকৃতপক্ষে যা ঘটে তা প্রতিফলিত করা উচিত ।
mergesort
লাল-সবুজ-চুল্লী থেকে প্রাকৃতিকভাবে কোনও নকশার উত্থানের প্রত্যাশা করে থাকেন তবে আপনার বিদ্যমান জ্ঞানের উপর ভিত্তি করে প্রক্রিয়াটি পরিচালনা না করা পর্যন্ত তা ঘটবে না mergesort
।
merge
অবশ্যই "রিফ্যাক্টরিং" পর্যায়ে উদ্ভাবন করতে হবে। আপনি যদি merge
পরীক্ষাটি পাশ করার জন্য সেই পদ্ধতিটি চালু করতে পারেন তবে mergesort
প্রথমে আপনার পরীক্ষাগুলি বিনা merge
পদ্ধতিতে পাস করুন । তারপরে merge
পদ্ধতিটি প্রবর্তন করে আপনার বাস্তবায়নটিকে রিফ্যাক্টর করুন ।
mergesort
, এটি আগে থেকেই একটি খুব ভালভাবে সংজ্ঞায়িত অ্যালগরিদম যেহেতু, এই আবিষ্কারের প্রক্রিয়া প্রয়োজন হয় না, এবং এটি তারপর ম্যাপিং আপনি ইতিমধ্যে ইউনিট পরীক্ষা একটি সিরিজ নকশা হতে জানা একটি বিষয় হয়ে ওঠে। সম্ভবত, আপনার শীর্ষ স্তরের পরীক্ষাটি দৃser়ভাবে দাবি করে যে আপনার পরীক্ষার অধীনে থাকা পদ্ধতিটি একটি সাজানো সংগ্রহকে গ্রহণ করে এবং একটি সাজানো একটি ফেরত দেয় ...