गोल्फ प्रैक्टिस: अजगर [बंद]


31

यह पायथन में गोल्फ अनुकूलन का अभ्यास करने की एक चुनौती है - पुन: प्रयोज्य चालें और कुछ वर्णों को बंद करने के लिए शॉर्टकट। कई पायथन गोल्फरों से परिचित होंगे और पायथन टिप्स के सामान्य विचारों का उपयोग करेंगे । इनमें से कुछ पायथन-विशिष्ट सुविधाओं का उपयोग करते हैं, जिन्हें आप तब तक नहीं जानते होंगे जब तक कि आपने उन्हें नहीं देखा होगा, इसलिए यदि आप फंस गए हैं तो युक्तियों पर एक नज़र डालें।

लक्ष्य: दस समस्याएं हैं, प्रत्येक का एक संदर्भ स्निपेट है जिसे आप अनुकूलित करने के लिए और कोड का वर्णन करते हैं। आपका लक्ष्य इसे छोटा करने के लिए फिर से लिखना है लेकिन फिर भी कार्यात्मक रूप से समतुल्य है।

आपका स्कोर, जिसे आप कम करने की कोशिश कर रहे हैं, आपके कोड की कुल लंबाई सभी स्निपेट्स है। संदर्भ स्निपेट की लंबाई 150 है। टाईब्रेकर जल्द से जल्द पोस्ट है।

पोस्टिंग उत्तर: प्रत्येक समस्या के लिए, अपना कोड और उसके वर्ण की गणना करें। यदि आपको कुछ कम नहीं मिला, तो आप संदर्भ स्निपेट पोस्ट कर सकते हैं। यह इरादा है कि जब आप अपना पोस्ट करते हैं तो आप दूसरों के उत्तरों को नहीं देखते हैं। कृपया बिगाड़ने-टैग प्रत्येक व्यक्ति की समस्या सहित व्यक्तिगत चरित्र मायने रखता है। आप प्रकट कुल गिनती छोड़ सकते हैं। बेझिझक अब अपने समाधान का खुलासा करें या नए अप्रकाशित समाधानों को पोस्ट करें।

वैधानिकता पर विवरण: कार्यात्मक तुल्यता का अर्थ है कि कोड को किसी कार्यक्रम में उसके व्यवहार को प्रभावित किए बिना प्रतिस्थापित किया जा सकता है (स्मृति उपयोग की तरह चीजों की अनदेखी और एक अभिव्यक्ति के भाग के रूप में ऑपरेटर पूर्वता)। अभिव्यक्तियों को उन मूल्यों का उत्पादन करना चाहिए जो इसके समकक्ष हैं ==। ध्यान दें 1.0==1==True। जब तक अन्यथा न कहा जाए आपके कोड का कोई दुष्प्रभाव नहीं होना चाहिए। मैं समस्याओं को संस्करण-विशिष्ट होने का इरादा नहीं रखता, लेकिन सिर्फ मामले में, आप प्रत्येक समस्या के लिए पायथन संस्करण निर्दिष्ट कर सकते हैं।

समस्या 1: जब तक सूची Lमें कम से कम 7 तत्व हों, तब तक इसे जारी रखें

# 16 chars
while len(L)>=7:

समस्या 2 : जांचें कि क्या दो तैरती हैं xऔर yदोनों सकारात्मक हैं।

# 11 chars
x>0 and y>0

समस्या 3 : यदि बूलियन bसच है, तो पहले तत्व को हटा दें L। अन्यथा, इसे अपरिवर्तित छोड़ दें।

# 12 chars
if b:L=L[1:]

समस्या 4 : जाँच करें कि क्या गैर-रिक्त सूची Lके सभी तत्व समान हैं। इस समस्या के लिए, सूची को संशोधित करना ठीक है।

# 22 chars
all(x==L[0]for x in L)

समस्या 5 : nकिसी सूची के अंत में किसी संख्या को Lतभी जोड़ें जब Lउसमें वह संख्या पहले से ही हो।

# 16 chars
if n in L:L+=[n] 

समस्या 6 : फ्लोट के संकेत को व्यक्त करें x: +1सकारात्मक के लिए, 00 के लिए, -1नकारात्मक के लिए।

# 20 chars
abs(x)/x if x else 0

समस्या 7 जब तक Lबूलियन्स की एक सूची के पहले तत्व के रूप में एक लूप जारी रखें , है TrueLखाली हो तो भी बंद करो ।

# 17 chars
while L and L[0]:

समस्या 8 : एक लूप जारी रखें जब तक कि n1. से अधिक न हो। संख्या nएक सकारात्मक पूर्णांक होने की गारंटी है।

# 10 chars
while n>1:

समस्या 9 : जांचें कि क्या एक स्ट्रिंग के रूप में दर्शाया गया पूर्णांक sऋणात्मक है (यानी, '-' से शुरू होता है)।

# 9 chars
s[0]=='-'

समस्या 10 : एक बुलियन bको "Win"/ "Lose", True-> "Win"और False-> में बदलें "Lose"

# 17 chars
["Lose","Win"][b]

चेतावनी: यदि आप इन को हल करना चाहते हैं, तो नीचे दिए गए स्पोइलर नीचे स्क्रॉल न करें।

यदि आप किसी समस्या के लिए इष्टतम स्कोर जानना चाहते हैं:

समस्या 1:

12

समस्या 2:

5

समस्या 3:

7

समस्या 4:

13

समस्या 5:

13

समस्या 6:

8

समस्या 7:

12

समस्या 8:

9

समस्या 9:

5

समस्या 10:

15


3
मैंने बंद करने के लिए मतदान किया, क्योंकि यह चुनौती डुप्लिकेट उत्तरों को उकसाती है और प्रभावी रूप से एक में कई प्रश्न हैं, क्योंकि व्यक्तिगत चुनौतियों के बीच कोई बातचीत नहीं है। मुझे लगता है कि अगर हमारे पास इस तरह के सवाल हैं, तो केवल एक ही जवाब होना चाहिए, जो एक समुदाय विकि है।
Wrzlprmft

2
@Wrzlprmft: किसी तरह यह एक दिलचस्प चुनौती है। लेकिन 7 महान योगदान होने के बाद, अब, मैं नियमों को शिथिल करने और एकल समस्याओं के समाधान की अनुमति देने का सुझाव दूंगा, क्योंकि अन्यथा संपूर्ण प्रस्तुतियाँ कुल औसत अंकों के पीछे छिपी रह सकती हैं।
फाल्को

2
मुझे लगता है कि यह एक अच्छा विचार है और हमें अधिक भाषाओं के लिए गोल्फ अभ्यास करना चाहिए।
रॉबी विक्सेज़

2
@Wrzlprmft अब मेटा पर इस बारे में एक चर्चा है । इस प्रश्न की टिप्पणियों को प्रदूषित किए बिना आसान चर्चा के लिए, कृपया अपनी राय दें।
फायरफ्लाइ

3
मैं इस प्रश्न को ऑफ-टॉपिक के रूप में बंद करने के लिए मतदान कर रहा हूं क्योंकि भागों के बीच कोई इंटरैक्शन नहीं होने वाली बहु-भाग चुनौतियां अस्वीकृत हैं। meta.codegolf.stackexchange.com/a/8464/45941
Mego

जवाबों:


21

कुल: 104 101 99 चार्ट

समस्या 1

12 वर्ण
while L[6:]:

समस्या २

5 चरस
x>0<y

समस्या 3

7 चरस
L=L[b:]

समस्या 4

13 वर्ण
len(set(L))<2
L[1:]==L[:-1]

समस्या 5

13 वर्ण
L+=set(L)&{n}

समस्या 6

11 वर्ण
(x>0)-(x<0)

8 वर्ण (अजगर 2)
cmp(x,0)

समस्या 7

12 वर्ण
while[.5]<L:

समस्या 8

9 चरस
while~-n:

समस्या 9

5 चरस
s<'.'

समस्या १०

15 वर्ण
'LWoisne'[b::2]


@FryAmTheEggman आप साइड इफेक्ट समझा सकते हैं? मेरा इरादा था कि एक वैध समाधान हो।
Xnor

@ एक्सनॉर नेवरमाइंड, मैं पूरी तरह से गलत था। मैंने आज कुछ सीखा :)
FryAmTheEggman

मेरा मानना ​​है कि इन समाधानों को इष्टतम होना, कई 99 समाधानों और इस तथ्य को देखते हुए कि मैं कुछ भी बेहतर नहीं पा सकता हूं। मैं हालांकि एक सुधार को देखकर खुश होऊंगा। चूंकि यह पहला 99 था, इसलिए मैं इसे स्वीकार कर रहा हूं।
xnor

7

कुल आकार: 128 122 120 117 117 115 115 111 107 104

समस्या 1

जब तक सूची Lमें कम से कम 7 तत्व हों, तब तक इसे जारी रखें ।

15 वर्ण
while len(L)>6:
(हां, मैं इस पर 3 बाइट्स बचा सकता था, लेकिन मैंने गलती से समाधान Sp3000 का उत्तर देखा, इसलिए मैं उन तीन बाइट्स का दावा नहीं करूंगा।)

समस्या २

जांचें कि क्या दो फ्लोट हैं xऔर yदोनों सकारात्मक हैं।

5 चरस
x>0<y

समस्या 3

यदि बूलियन bसही है, तो पहले तत्व को हटा दें L। अन्यथा, इसे अपरिवर्तित छोड़ दें।

7 चरस
L=L[b:]

समस्या 4

जाँच करें कि क्या Lअंकों की गैर-रिक्त सूची के सभी तत्व समान हैं। इस समस्या के लिए, सूची को संशोधित करना ठीक है।

13 वर्ण
L[1:]==L[:-1]

समस्या 5

nकिसी सूची के अंत में एक संख्या को Lतभी जोड़ें जब Lउसमें वह संख्या पहले से ही हो।

15 वर्ण
L+=[n]*(n in L)
या
L+=[n][:n in L]

समस्या 6

एक फ्लोट के संकेत को व्यक्त करें x: +1सकारात्मक के लिए, 00 के लिए, -1नकारात्मक के लिए।

8 वर्ण, पायथन 2
cmp(x,0)
डॉक्स के अनुसार इससे कोई सकारात्मक / नकारात्मक मान वापस आ सकता है, लेकिन सर्वसम्मति से यह हमेशा -1, 0, 1 होता है।

समस्या 7

जब तक Lबूलियन्स की एक सूची है, के पहले तत्व के रूप में एक लूप जारी रखें TrueLखाली हो तो भी बंद करो ।

12 वर्ण
while[1]<=L:

समस्या 8

एक लूप जारी रखें जब तक कि n1. से अधिक न हो। संख्या nएक सकारात्मक पूर्णांक होने की गारंटी है।

9 चरस
while~-n:

समस्या 9

जांचें कि क्या एक स्ट्रिंग के रूप में दर्शाया गया पूर्णांक sऋणात्मक है (यानी, '-' से शुरू होता है)।

5 चरस
s<'.'

समस्या १०

एक बूलियन bको "Win"/ "Lose", True-> "Win"और False-> में बदलें "Lose"

15 वर्ण
"LWoisne"[b::2]


क्या आप व्यक्तिगत लंबाई भी बिगाड़ सकते हैं?
xnor

@xnor कोई समस्या नहीं, किया।
मार्टिन एंडर

7

कुल: 106 104 102 चार्ट

समस्या 1

12 वर्ण
while L[6:]:

समस्या २


x>0<y
तुलनात्मक श्रृंखलन के लिए 5 वर्ण हुज़ाह

समस्या 3

7 वर्ण
L=L[b:]
अच्छा पुराना निहितार्थ रूपांतरण

समस्या 4

13
len(set(L))<2

वैकल्पिक रूप से:
L[1:]==L[:-1]

Python 2 में जो हम चाहते हैं, उसका निषेध पाने के लिए मूर्खतापूर्ण तरीका:
","in`set(L)`

मुझे यकीन नहीं है कि "सूची को संशोधित करने के लिए यह ठीक है" की प्रासंगिकता हालांकि है, क्योंकि सबसे अच्छा मुझे लगता है कि 14 वर्ण हैं (और है) वास्तव में गलत):
L==[L.pop()]+L

समस्या 5

13 वर्ण
L+={n}&set(L)
सेट के साथ कायरतापूर्ण बातें करना

समस्या 6

11 वर्ण
(x>0)-(x<0)

समस्या 7

12 वर्ण
while[1]<=L:
सूचियों के शाब्दिक क्रम का उपयोग करता है

समस्या 8

9 चरस
while~-n:

समस्या 9

5 चार्ट
s<"."
स्ट्रिंग्स के शाब्दिक क्रम का उपयोग करता है

समस्या १०


"LWoisne"[b::2]

वैकल्पिक रूप से 15 वर्ण :
b*"Win"or"Lose"


1
मैंने # 10 से पहले आपके विकल्प पर विचार नहीं किया था। इसका मतलब यह है कि एक ही चरित्र बचत प्राप्त की जा सकती है क्योंकि सामान्य इंटरलाकिंग ट्रिक की लंबाई स्ट्रिंग्स की लंबाई की परवाह किए बिना, बूल में पूर्ववर्ती मुद्दों को रोकती है। मैं इसे सुझावों में जोड़ दूँगा।
22

1
@ एक्सनोर अहा हां, मुझे लगा कि यह बहुत अच्छा है। यह उतना अच्छा नहीं है जब आपके पास अधिक तार हैं, जो कि नकारात्मक है (उदाहरण के bलिए 0, 1 या 2 है, और आप सभी कर सकते हैं (b-1)*"Hello"or b*"Goodbye"or"Good Afternoon")
Sp3000


यह वास्तव में तीन तारों के लिए बुरा नहीं है। आप पारेंस को हटा सकते हैं ~b*"Hello"
23

@xnor उस बिंदु पर, ["Good Afternoon","Goodbye","Hello"][b]जीत जाएगा: P
Sp3000

6

कुल: 99 बाइट्स

समस्या 1

12 बाइट्स
while L[6:]:

समस्या २

5 बाइट्स
x>0<y

समस्या 3

7 बाइट्स
L=L[b:]

समस्या 4

13 बाइट्स
len(set(L))<2

14 बाइट विकल्प
min(L)==max(L)
set(L)=={L[0]}

समस्या 5

13 बाइट्स
L+=set(L)&{n}

समस्या 6

8 बाइट्स
cmp(x,0)

समस्या 7

12 बाइट्स
while[1]<=L:

समस्या 8

9 बाइट्स
while~-n:

समस्या 9

5 बाइट्स
s<'.'

समस्या १०

15 बाइट्स
b*"Win"or"Lose"
- या -
"LWoisne"[b::2]


4

1: 12
while L[6:]:
2: 5
y>0<x
3: 7
L=L[b:]
4: 15
L==L[:1]*len(L)
5: 15
L+=[n]*(n in L)या L+=[n][:n in L]
6: 11
यह एकमात्र ऐसा है जिसके लिए एक मुहावरेदार अभिव्यक्ति तुरंत मेरे दिमाग में नहीं आई, लेकिन मुझे लगता है कि मुझे सही उत्तर मिला। संपादित करें: नहीं, यह भयानक था।
(x>0)-(x<0)
7: 12
while[1]<=L:
या उसके बाद कार्यक्रम पूरा हुआ, while L[0]तो अच्छा है।
8: 9
while~-n:
9: 5
कई तार यहां काम करेंगे लेकिन "भोली विधि" मज़ेदार है।
s<'0'
10: 15
'LWoisne'[b::2]

कुल: 106


आपके # 4 का उपयोग नहीं करना होगा [L[0]]?
फायरफली

@FireFly वूप्स। यह उतना बुरा नहीं है, लेकिन एक बाइट खर्च होती है।
feersum

2
आपका # 9 एक अद्भुत गोल्फ की सजा है!
22

3

कुल आकार: 123 121 120 116

# 1

(12) while L[6:]:

# 2

(10) min(x,y)>0

# 3

(7) L=L[b:]

# 4

(१३) len(set(L))<2याL[1:]==L[:-1]

# 5

(15) L+=[n]*(n in L)

# 6

(१४) x and abs(x)/xया (हार मानने के बाद क्लाउडिया के समाधान से प्रेरित)x and(x>0)*2-1

# 7

(15) while[0]<L[:1]:

# 8

(9) while~-n:

# 9

(5) s<'.'

# 10

(15) b*"Win"or"Lose"


1

कुल: 121

पहला प्रयास:

समस्या 1

15 वर्ण
while len(L)>6:

समस्या २

5 चरस
x>0<y

समस्या 3

7 चरस
L=L[b:]

समस्या 4

13 वर्ण
len(set(L))<2

समस्या 5

16 वर्ण
if n in L:L+=[n]

समस्या 6

16 वर्ण
x and(1,-1)[x<0]

समस्या 7

16 वर्ण
while(L+[0])[0]:

समस्या 8

10 वर्ण
while n>1:

समस्या 9

8 चरस
s[0]<'0'

समस्या १०

15 वर्ण
"LWoisne"[b::2]

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