ভূমিকা
আজকের চ্যালেঞ্জ সবই দাঁত সম্পর্কে। বিশেষত, একটি দাঁত থেকে অন্য দাঁতে ব্রাশ করতে কত সময় লাগে। আপনার চ্যালেঞ্জটি হল, দুটি দাঁতের অবস্থানের ভিত্তিতে প্রথম থেকে দ্বিতীয় বারের জন্য ব্রাশ করার জন্য স্বল্পতম সময়ের আউটপুট আউটপুট।
চ্যালেঞ্জ
এই চ্যালেঞ্জের জন্য আমরা একজন গড় বয়স্ক মানুষের মুখের একটি বিন্যাস ব্যবহার করব:
এই চিত্রটি বহুল ব্যবহৃত আইএসও নম্বরীকরণ সিস্টেমটি দেখায় । সিস্টেমটি মুখকে চারটি ভাগে ভাগ করে এবং তাদের প্রত্যেককে একটি সংখ্যা নির্ধারণ করে: উপরের ডান (1), উপরের বাম (2), নীচে বাম (3) এবং নীচে ডান (4)। এরপরে তারা 1-8 থেকে মুখের মাঝখানে থেকে প্রতিটি বিভাগের দাঁত সংখ্যা করে। অতএব উপরের ডানদিকে (বিভাগ 1) কেন্দ্র থেকে চতুর্থ দাঁতটি দাঁত 14 নম্বরের।
ধরা যাক একটি দাঁত ব্রাশ করতে সময় 1 একক লাগে। এক দাঁত থেকে পরের পাশের পাশের দিকে যেতে 0 ইউনিট সময় নেয়। আপনি দাঁত থেকে সরাসরি উপরে বা নীচে দাঁতে যেতে পারেন, এটিতে 1 একক সময়ও লাগে। তাহলে দাঁত 14 থেকে দাঁত 31 পর্যন্ত ব্রাশ করতে আপনার কতক্ষণ সময় লাগবে? উপরের চিত্রটি দেখে আপনি দেখতে পাবেন এটি 7 ইউনিট সময় নেয়। এখানে এটি গণনা করা হয়:
Action : Unit of time
Brushing tooth 14 : 1 unit
Brushing tooth 13 : 1 unit
Brushing tooth 12 : 1 unit
Brushing tooth 11 : 1 unit
Brushing tooth 21 : 1 unit
Cross to bottom of mouth : 1 unit
Brushing tooth 31 : 1 unit
------------------------------
Total: 7 units
দ্রষ্টব্য যে কেবলমাত্র আমরাই যে পথে চলতে পারি তা নয়, তবে কোনও ছোট রুট নেই।
সুতরাং আপনার চ্যালেঞ্জটি হ'ল:
- আপনি একটি সম্পূর্ণ প্রোগ্রাম বা ফাংশন লিখবেন যা দু'টি আর্গুমেন্টকে গ্রহণ করে যা দাঁত সংখ্যা, এবং আউটপুটগুলি (বা প্রত্যাবর্তন) এক থেকে অন্যের মধ্যে ব্রাশ করার সবচেয়ে কম সময়।
- আপনি ইনপুটটিকে সংখ্যা বা স্ট্রিং হিসাবে গ্রহণ করেন এবং আপনি যেভাবে চান তার আউটপুট ( গ্রহণযোগ্য পদ্ধতিগুলির মধ্যে )।
- স্ট্যান্ডার্ড লুফোলগুলি ডিফল্টরূপে নিষিদ্ধ।
- এই প্রশ্নটি কোড-গল্ফ , তাই সবচেয়ে ছোট বাইকাউন্টের জয়।
এখানে কয়েকটি টেস্টকেস রয়েছে ( ধন্যবাদ জোনাথন অ্যালান ):
14, 21 => 5 14, 44 => 3 14, 14 => 1 33, 37 => 5
শুভকামনা!
