में एक रेंज को गिनती है, मैं एक मानक सांप ड्राफ्ट प्रोग्राम करने की कोशिश कर रहा हूं, जहां टीम ए पिक, टीम बी, टीम सी, टीम सी, टीम बी, टीम ए, विज्ञापन मतली।गिनती और फिर पाइथन
यदि नंबर 13 (या संख्या संख्या चुनें) चुनें तो बस यह पता लगाया जा सकता है कि कौन सी टीम टीमों की संख्या के लिए आगे बढ़ती है।
def slot(n,x):
direction = 'down' if (int(x/n) & 1) else 'up'
spot = (x % n) + 1
slot = spot if direction == 'up' else ((n+1) - spot)
return slot
मैं महसूस कर रही है वहाँ एक सरल, अधिक pythonic क्या इस समाधान से:
मैं की तरह कुछ है। किसी को भी हैक लेने की परवाह है?
तो मैंने थोड़ा और अधिक खेला। मैं एक लूप सूची पर गिनने के सर्वोत्तम तरीके के बजाय, एक मूल्य की वापसी की तलाश में हूं। सबसे शाब्दिक जवाब हो सकता है: (उदाहरण के लिए 13%
def slot(n, x): # 0.15757 sec for 100,000x
number_range = range(1, n+1) + range(n,0, -1)
index = x % (n*2)
return number_range[index]
यह एक सूची [1,2,3,4,4,3,2,1] बनाता है, सूचकांक का पता लगा लेता (4 * 2) = 5), और फिर सूची से सूचकांक मान देता है (उदाहरण के लिए 4)। सूची जितनी लंबी होगी, फंक्शन धीमा होगा।
हम आधे में सूची बनाने में कटौती करने के लिए कुछ तर्क का उपयोग कर सकते हैं। हम तक की गिनती कर रहे हैं (यानी (int(x/n) & 1)
झूठी देता है), हम स्पष्ट सूचकांक मूल्य (एक्स% एन) मिलता है, वरना हम n से है कि मूल्य + 1 घटाना:
def slot(n, x): # 0.11982 sec for 100,000x
number_range = range(1, n+1) + range(n,0, -1)
index = ((n-1) - (x % n)) if (int(x/n) & 1) else (x % n)
return number_range[index]
फिर भी कुल मिलाकर एक सूची से परहेज है सबसे तेजी से:
def slot(n, x): # 0.07275 sec for 100,000x
spot = (x % n) + 1
slot = ((n+1) - spot) if (int(x/n) & 1) else spot
return slot
और अगर मैं नहीं बल्कि एक को उत्पन्न करने की तुलना में चर के रूप में सूची पकड़:
number_list = [1,2,3,4,5,6,7,8,9,10,11,12,12,11,10,9,8,7,6,5,4,3,2,1]
def slot(n, x): # 0.03638 sec for 100,000x
return number_list[x % (n*2)]
, संख्या n, साथ ही टीम नंबर 1 टीम चाहिए मोड़ पर एक पंक्ति में दो बार लेने? –
हां। टीम 1 और टीम एन की बारी में लगातार दो चुनौतियां हैं। – Cole