पुराना ताररहित फोन


9

मुझे अपने दोस्तों को कॉल करने की आवश्यकता है लेकिन मेरे कॉर्डलेस फोन के बटन ठीक से काम नहीं कर रहे हैं। मेरे द्वारा दबाए जाने वाले एकमात्र बटन [ऊपर], [नीचे] और [कॉल] हैं। [ऊपर] और [नीचे] का उपयोग मेरी हाल की कॉल में नेविगेट करने के लिए किया जा सकता है और [कॉल] का उपयोग चयनित नाम को कॉल करने के लिए किया जा सकता है। मेरे फोन में एक सूची है जो Nहाल ही में कॉल रखती है , और मुझे पता है कि मुझे जिन मित्रों को कॉल करने की आवश्यकता है वे सभी इस सूची में हैं।


कार्य:

आपको एक नंबर Nऔर नामों की एक सूची मिलेगी L:

  • N हाल ही में मेरे फोन याद कर सकते हैं की संख्या है;
  • L मुझे जिस क्रम में कॉल करने की आवश्यकता है, उसके नाम हैं।

आपको बटन प्रेस की संख्या को आउटपुट करना होगा जो मुझे हाल ही में कॉल सूची की एक इष्टतम व्यवस्था में करने की आवश्यकता है।


उदाहरण:

-> इनपुट:

अन्ना, बॉब और फिर अन्ना को कॉल करना। हाल ही में कॉल की सूची के साथ आकार 5।

5
Anna
Bob
Anna

-> आउटपुट:

संभव इष्टतम व्यवस्था: Anna, Foo, Bar, Foobar, Bob

5    # Key presses: [Call] Anna, [Up] + [Call] Bob, [Down] + [Call] Anna

अधिक परीक्षण के मामले:

Input: 5, Anna, Bob, Carl
Output: 5

Input: 5, Anna, Bob, Carl, Anna
Output: 8

Input: 5, A, B, C, D, E, A
Output: 11

Input: 6, A, B, C, D, E, A
Output: 12

Input: 4, A, B, C, B, A
Output: 10

नियम:

  • आपका कर्सर हमेशा सूची की पहली स्थिति में शुरू होगा;
  • आप इनपुट Nऔर Lकिसी भी स्रोत से ले सकते हैं : कीबोर्ड, पैरामीटर, फ़ाइल, आदि;
  • सूची में नाम किसी भी उचित प्रारूप में हो सकते हैं जैसे: तार, पूर्णांक, वर्ण;
  • जब आप हाल की कॉल सूची के अंत तक पहुँचते हैं और [डाउन] फिर से दबाते हैं, तो आपका कर्सर इधर-उधर हो जाता है। ऐसा ही तब होता है जब आप हाल की कॉल सूची की भीख मांगते हैं और दबाते हैं [ऊपर];
  • जब आप किसी को कॉल करते हैं, तो उस व्यक्ति का नाम हाल की कॉल सूची की पहली स्थिति में चला जाएगा और बाकी को नीचे धकेल दिया जाएगा;
  • जब आप किसी को कॉल करते हैं, तो आपके कर्सर को पहले स्थान पर ले जाया जाएगा;
  • हाल ही की कॉल सूची में एक मित्र का नाम एक से अधिक बार नहीं आ सकता है;
  • आप डमी प्रविष्टियों के साथ अपनी हाल की कॉल सूची भर सकते हैं (उदाहरण देखें);
  • कॉल करने वाले दोस्तों की संख्या इससे अधिक नहीं होगी N

जवाबों:


1

रूबी , 97 95 94 बाइट्स

->n,a{r=a.size;1.upto(r-1){|i|r+=[p=a[(a[0,i].rindex(a[i])||i-2)+1...i].uniq.size,n-p].min};r}

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

एक इष्टतम व्यवस्था में, पहला नाम एक प्रेस ( Call) लेगा । जिन नामों को अभी तक नहीं बुलाया गया है, वे दो प्रेस ( Up Call), और ऐसे नाम लेते हैं, जो इस आधार पर अलग-अलग संख्या लेते हैं कि कितने अन्य अद्वितीय नाम तब से बुलाए गए हैं और क्या यह सूची के शीर्ष या तल के करीब रखता है।

मुझे लगता है कि यह वैफलकेन के समान या समान रणनीति है।


3

पायथन 3 , 195 185 164 बाइट्स

-4 बाइट्स के लिए धन्यवाद @ नॉटजागन
-27 बाइट्स थैंक्स टू @FelipeNardiBatista

lambda n,l:min(g([*x],l,n)for x in permutations(range(n)))
def g(x,l,n,r=0):
 for p in l:a=x.index(p);x=[x.pop(a)]+x;r-=~min(a,n-a)
 return r
from itertools import*

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

L से पूर्णांकों की सूची के रूप में लिया जाता है [0, N)



@ नोटजैन यह एक नई सूची ऑब्जेक्ट को x=[x[a]]+x[:a]+x[a+1:]असाइन xकरने के रूप में काम नहीं कर रहा है । iअभी भी indexपुरानी सूची ऑब्जेक्ट पर विधि होगी
ovs

@ovs -10 बाइट्स फेलिप के सुझाव का उपयोग करते हुए और जिनके पास मेरे अलावा था x.index
नॉटजैगन


@FelipeNardiBatista बहुत बहुत धन्यवाद
अंडा

1

जावास्क्रिप्ट (स्पाइडरमोनी) , 213 143 बाइट्स

(N,L)=>L.reduce((t,v,i)=>{x=0,a=[v]
for(j=i;j-->=0&!~a.indexOf(L[j]);x++)a+=L[j]+","
return i?t+((x=L.indexOf(v)-i?x:1)<N-x?x:N-x):t},L.length)

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

दिए गए नामों की एक इष्टतम व्यवस्था बनाता है, फिर कुंजी प्रेस की संख्या गिना जाता है।

पीढ़ी को छोड़ दिया और सिर्फ गिना कि यह अधिकतम व्यवस्था में प्रत्येक नाम को कितने कुंजी दबाएगा

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