यात्रा टूथब्रश


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
जब मैं अपने कंप्यूटर पर वापस आऊंगा तो @JonathanAllan जुड़ जाएगा।
उभयचरी

1
"दांत से दांत की ओर बढ़ने में 0 यूनिट समय लगता है।" <- अधिक सटीक, मुझे लगता है कि आपका मतलब है "एक दांत से अगले बग़ल में चलना 0 इकाइयों का समय लेता है"। (मैंने पहली बार इसका मतलब किसी भी दांत से किसी अन्य में ले जाने के लिए 1 इकाई लिया, जिसने अगले वाक्य को भ्रमित कर दिया।)
सूंदर - मोनिका

@sundar आप सही हैं, संपादित करेंगे।
उभयलिंगी

1
@JonathanAllan ने किया।
उभयलिंगी

जवाबों:


3

जेली ,  24  20 बाइट्स

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

दो पूर्णांक ( [14,31]14 से 31 उदाहरण के लिए) की सूची को स्वीकार करने वाला एक विचित्र लिंक जो ब्रश करने के समय की पैदावार देता है।

इसे ऑनलाइन आज़माएं!


पिछले 24 बटर ने मुंह बनाया और बेस 8 का उपयोग किया, इनपुट अंकों की सूची की एक सूची थी:

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

5

जावास्क्रिप्ट (ईएस 6), 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

जावास्क्रिप्ट (ईएस 6), 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]मुझे आशा है कि यह स्वीकार्य है।

इसे ऑनलाइन आज़माएं!

@Chas Brown के पाइथन उत्तर के पास एक डुप्लिकेट की तरह दिखता है , इसलिए यदि आवश्यक हो (यहां सम्मेलनों का अनिश्चित) तो मैं इसे हटा सकता हूं।

व्याख्या

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
" @Chas Brown के पाइथन उत्तर के पास एक डुप्लिकेट की तरह दिखता है, इसलिए यदि आवश्यक हो तो मैं इसे हटा सकता हूं (यहां सम्मेलनों के अनिश्चित) " क्योंकि वे अलग-अलग भाषाएं हैं जो दोनों रह सकती हैं। केवल अगर एक ही भाषा में दो उत्तर बिल्कुल समान हैं, तो यह सबसे अच्छा अभ्यास है कि पोस्ट किया गया अंतिम उनके उत्तर को हटा दें (हालांकि यदि दो लोगों के पास एक ही उत्तर है और उन्होंने इसे एक दूसरे से स्वतंत्र पाया है तो उन्हें दोनों को रखने की अनुमति है; उनका उत्तर हटा दें यदि उनके पास ठीक वैसा ही है जो किसी व्यक्ति ने पोस्ट किया है, हालांकि)। लेकिन विभिन्न भाषाओं के साथ कोई समस्या नहीं है। PPCG में आपका स्वागत है! :)
केविन क्रूज़सेन

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, जो कार्टेशियन निर्देशांक के रूप में सिर्फ दो दांतों के बीच की दूरी पाता है। बहुत उबाऊ समाधान वास्तव में।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.