দ্য ট্র্যাভেলিং টুথব্রাশ


10

ভূমিকা

আজকের চ্যালেঞ্জ সবই দাঁত সম্পর্কে। বিশেষত, একটি দাঁত থেকে অন্য দাঁতে ব্রাশ করতে কত সময় লাগে। আপনার চ্যালেঞ্জটি হল, দুটি দাঁতের অবস্থানের ভিত্তিতে প্রথম থেকে দ্বিতীয় বারের জন্য ব্রাশ করার জন্য স্বল্পতম সময়ের আউটপুট আউটপুট।

চ্যালেঞ্জ

এই চ্যালেঞ্জের জন্য আমরা একজন গড় বয়স্ক মানুষের মুখের একটি বিন্যাস ব্যবহার করব:

মানুষের মুখের বিন্যাস।

এই চিত্রটি বহুল ব্যবহৃত আইএসও নম্বরীকরণ সিস্টেমটি দেখায় । সিস্টেমটি মুখকে চারটি ভাগে ভাগ করে এবং তাদের প্রত্যেককে একটি সংখ্যা নির্ধারণ করে: উপরের ডান (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
    

শুভকামনা!


1
আমি যখন আমার কম্পিউটারে ফিরে আসি তখন @ জোনাথন অ্যালান যুক্ত হবে।
উভচর

1
"দাঁত থেকে দাঁতে স্থানান্তরিত হতে 0 একক সময় লাগে" " <- আরও সুনির্দিষ্টভাবে, আমার মনে হয় আপনার অর্থ "একটি দাঁত থেকে পরবর্তী পাশের রাস্তাগুলিতে সরে যেতে 0 একক সময় লাগে"। (আমি প্রথমে এটি বোঝাতে চেয়েছিলাম যে কোনও দাঁত থেকে অন্য কোনও দিকে চলে যাওয়া 1 ইউনিট লাগে, যা পরবর্তী
বাক্যটিকে

@ সুন্দর আপনি ঠিক বলেছেন, সম্পাদনা করবেন।
উভচর

1
@ জোনাথন অ্যালান সম্পন্ন হয়েছে
উভচরবৃত্তীয়

উত্তর:


3

জেলি ,  24  20 বাইট

d30%20ị2¦⁵R;C$¤)ạ/Ḅ‘

একটি মোনাডিক লিঙ্ক দুটি পূর্ণসংখ্যার (যেমন [14,31]14 থেকে 31 উদাহরণের জন্য) একটি তালিকা গ্রহণ করে যা ব্রাশ করার সময় দেয়।

এটি অনলাইন চেষ্টা করুন!


পূর্ববর্তী 24 বাইটার মুখটি তৈরি করেছে এবং বেস 8 ব্যবহার করেছে, ইনপুটটি ছিল অঙ্কের তালিকার একটি তালিকা:

8R;C$C+⁴U,+ɗ⁴
ḅ8¢œiⱮạ/Ḅ‘

5

জাভাস্ক্রিপ্ট (ES6), 65 বাইট

f=([s,t],[u,v])=>s<3^u<3?f(s+t,5-u+v)+2:s-u?t-+-v:t<v?++v-t:++t-v

for(i=1;i<5;i++)for(j=1;j<9;j++){let o=document.createElement("option");o.text=""+i+j;s.add(o);t.add(o.cloneNode(true));}
<div onchange=o.textContent=f(s.value,t.value)><select id=s></select><select id=t></select><pre id=o>1

স্ট্রিং হিসাবে ইনপুট নেয়।



1

জাভাস্ক্রিপ্ট (ES6), 67 বাইট

([a,b],[x,y])=>(u=(a==x)+3*!(a+x-5))?Math.abs(b-y)+u:2*!(a-x&1)+b+y

সংখ্যার দুটি 2-উপাদান অ্যারে হিসাবে ইনপুটগুলি আশা করে। 12-> [1, 2]আমি আশা করি এটি গ্রহণযোগ্য।

এটি অনলাইন চেষ্টা করুন!

@ চাস ব্রাউন এর পাইথন উত্তরের নিকটবর্তী সদৃশ হিসাবে দেখা যাচ্ছে , তাই আমি প্রয়োজনে এটি অপসারণ করতে পারি (এখানে সম্মেলনের বিষয়ে অনিশ্চিত)।

ব্যাখ্যা

var g =
([a,b], [x,y]) =>
    (u = (a == x)                // if same quadrant of mouth
     + 3 * !(a + x - 5))         // or strictly traversing vertically (e.g. 1 to 4, or 2 to 3)
        ? Math.abs(b - y) + u    // absolute difference plus additional units of time
        : 2 * !(a - x & 1)       // = 2 if traversing diagonally
            + b + y

2
" @ চাস ব্রাউন এর পাইথন উত্তরের নিকটবর্তী সদৃশটির মতো মনে হচ্ছে, তাই প্রয়োজনে আমি এটিকে সরিয়ে ফেলতে পারি (এখানে অধিবেশনগুলির বিষয়ে অনিশ্চিত)। " যেহেতু এগুলি ভিন্ন ভাষা উভয়ই থাকতে পারে। কেবল একই ভাষায় দুটি উত্তর হুবহু হ'ল তবেই এটি সবচেয়ে ভাল অনুশীলন যে সর্বশেষ পোস্ট করা উত্তরটি তাদের উত্তরটি মুছে ফেলবে (যদিও দুটি ব্যক্তির সঠিক উত্তর রয়েছে এবং তারা একে অপরের থেকে স্বতন্ত্র দেখতে পেয়েছে তবে তাদের উভয়ই রাখার অনুমতি রয়েছে; সর্বাধিক ইচ্ছা যদিও তাদের উত্তর মুছুন যদি তাড়াতাড়ি পোস্ট করা কারওর মতো ঠিক একই থাকে তবে)। তবে বিভিন্ন ভাষা নিয়ে কোনও সমস্যা নেই। পিপিসিজিতে আপনাকে স্বাগতম! :)
কেভিন ক্রুইজসেন

1

পাইথন 2 ,  80  78 বাইট

সম্ভবত এখানে কিছু গল্ফ করার সুযোগ রয়েছে

lambda s,e,l=(range(11)+range(0,-9,-1))*2:abs(l[s%30]-l[e%30]+s/30*2-e/30*2)+1

একটি নামবিহীন ফাংশন দুটি পূর্ণসংখ্যা গ্রহণ করে sএবং eযা ব্রাশিং-সময় দেয়।

এটি অনলাইন চেষ্টা করুন!


0

পরিষ্কার , 134 128 126 বাইট

import StdEnv
@n=hd[i\\i<-[0..]&k<-[18,17..11]++[21..28]++[48,47..41]++[31..38]|n==k]rem 16
$a b=abs(@a- @b)+a/30bitxor b/30+2

এটি অনলাইন চেষ্টা করুন!

ফাংশনটি সংজ্ঞায়িত করে $ :: Int Int -> Int, যা কার্তেসিয়ান স্থানাঙ্ক হিসাবে কেবল দুটি দাঁতের মধ্যে দূরত্ব খুঁজে পায়। সত্যিই খুব বোরিং সমাধান।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.