निर्धारित करें कि क्या एक चुनौती वर्थ आंसरिंग है


21

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

इनपुट:

  • आपका कोड (फ़ंक्शन या प्रोग्राम) एक इनपुट पैरामीटर लेगा i

आउटपुट:

  • प्रश्न आईडी के लिए सत्य या गलत मूल्य i। आउटपुट सत्य यदि प्रश्न में 5 से अधिक उत्तर हैं, तो 3 से अधिक प्रश्न हैं, और पायथन में एक या कम उत्तर (संस्करण के बीच कोई अंतर नहीं)।

नियमों / स्पष्टीकरण:

  • इनपुट प्रारूप कुछ भी उचित हो सकता है (स्टडिन, फ़ाइल, कमांड लाइन), लेकिन आपके उत्तर में निर्दिष्ट होना चाहिए। डेटा प्रकार और प्रमुख / अनुगामी व्हाट्सएप कोई फर्क नहीं पड़ता।
  • मान लें कि प्रश्न आईडी के लिए मान्य है codegolf.stackexchange.com
  • भाषा विशिष्ट प्रश्न आवश्यकताओं पर ध्यान न दें। (यानी यदि कोई प्रश्न वोट और उत्तर से मिलता है, और उसके पास कोई पायथन उत्तर नहीं है क्योंकि यह केवल जावा है, तब भी यह सत्य में परिणत होता है)।
  • एक उत्तर पायथन के रूप में उत्तीर्ण होता है यदि "अजगर" (मामला असंवेदनशील) पोस्ट की पहली नई पंक्ति से पहले कहीं भी होता है।
  • यह कोड गोल्फ है, इसलिए बाइट्स जीत में सबसे छोटा कोड है।

नमूना मामले *

id = 79082 => True
id = 78591 => False (less than 5 answers, also hella hard)
id = 78410 => True
id = 76428 => False (greater than 1 Python answer)
id = 78298 => False (not high enough question score)

* पोस्टिंग के समय सत्यापित, परिवर्तित हो सकता है


मैं भी केवल पायथन को जानता हूं ...
आर। कप

मैं पायथन को भी मुख्य रूप से जानता हूं।
user48538

मुझे कुछ अन्य भाषाओं को सीखना शुरू करना है।
आर। काप

5
@ R.Kap, इस चुनौती को शुरू करने के लिए एक महान समय होगा!
wnnmaw

2
यह चुनौती स्पष्ट रूप से जवाब देने के लायक है।
R

जवाबों:


8

05AB1E , 167 160 159 158 156 154 143 बाइट्स

धिक्कार है, लगभग एक सामान्य भाषा की तरह ...

बकवास ... अब रूबी के जवाब को 1 बाइट से हरा रहा है ।

अब रूबी जवाब की तुलना में लंबे समय तक, अरे!

मुझे शायद अभी बिस्तर पर जाना चाहिए।

1 बाइट को बचाने के लिए @wnnmaw को धन्यवाद और @R को धन्यवाद। एक और 2 बाइट बचाने के लिए कप!

कोड:

’£Ø ˆå§¾.‡¢ as g;#.¾¿„–(g.ˆåƒÛ('·Ç://ÐÏg.´¢/q/'+•œ_#()).‚Ø())’.e©’„à="Ž»"’DU¢®…ƒŠ‡¡`99£þs\®X¡¦vy’„à="‚¬-„¹"’¡¦'>¡¦¦¬l’±¸’¢s\}rUV)O2‹X5›Y3›)P

या अधिक पठनीयता के साथ:

’£Ø ˆå§¾.‡¢ as g;#.¾¿„–(g.ˆåƒÛ('·Ç://ÐÏg.´¢/q/'+•œ_#()).‚Ø())’
 .e©
’„à="Ž»"’
 DU¢®
“ƒŠ‡“
 ¡`99£þs\®X¡¦
v
 y’„à="‚¬-„¹"’¡¦'>¡¦¦¬l’±¸’¢s\}rUV)O2‹X5›Y3›)P

स्पष्टीकरण:

सबसे पहले, यहां बहुत सारे पाठ संकुचित किए जा रहे हैं, जो अच्छे पुराने पायथन में अनुवाद करता है। असम्पीडित संस्करण है:

"import urllib.request as g
 f=g.urlopen('http://ppcg.lol/q/'+pop_#())
 #.append(f.read())"
.e©“class="answer"“¢®"useful and clear"¡`99£þs\®“class="answer"“¡¦vy“class="post-text"“¡¦'>¡¦¦¬l"python"¢s\}rUV)O2‹X5›Y3›)P

यह भाग:

import urllib.request as g
stack.append(g.urlopen('http://ppcg.lol/q/'+pop_stack()).read())`

वास्तव में स्टैक वैल्यू को पॉप करता है, इसे url में कॉपी करता है और सभी HTML डेटा प्राप्त करता है। HTML डेटा का उपयोग करके स्टैक के शीर्ष पर धकेल दिया जाता है #.append(f.read())

हम उत्तर की संख्या की गणना करते हैं , की घटनाओं की संख्या की गणना करते हैं class="answer"

वोटों की संख्या गिनती करने के लिए, हम सिर्फ "उपयोगी और स्पष्ट" पर डेटा विभाजित है और का केवल अंकों मान रखने [0:99]का उपयोग कर ®"useful and clear"¡`99£þ। यह अपवित्रों की संख्या है।

आखिरकार, हमें प्रत्येक उत्तर की जांच करने की आवश्यकता है यदि पाठ "Python"शीर्ष लेख पाठ से पहले मौजूद है। सभी उत्तरों को प्राप्त करने के लिए, हम सिर्फ डेटा को class="post-text"विभाजित करते हैं और उनमें से प्रत्येक को फिर से विभाजित करते हैं <। हम उस भाग को प्राप्त करने के लिए पहले दो तत्वों को हटाते हैं जिसमें भाषा प्रदर्शित होती है और जांचती है कि क्या लोअरकेस संस्करण इस स्ट्रिंग में है।

तो, अब हमारे स्टैक आईडी के लिए इस तरह दिखता है 79273:

`[6, '14', 0, 0, 0, 1, 0, 0]`
  │    │   └───────┬──────┘
  │    │           │
  │    │   is python answer?
  │    │
  │    └── number of upvotes
  │
  └─── number of answers

यह -dदुभाषिया में ईबग ध्वज के साथ भी देखा जा सकता है ।

तो, यह डेटा को संसाधित करने की बात है:

rUV)O2‹X5›Y3›)P

r                # Reverse the stack
 U               # Pop the number of answers value and store into X
  V              # Pop the number of upvotes value and store into Y
   )O            # Wrap everything together and sum it all up
     2‹          # Check if smaller than 2
       X5›       # Push X and check if greater than 5
          Y3›    # Push Y and check if greater than 3
             )P  # Wrap everything into an array and take the product.
                   This results into 1 if and only if all values are 1 (and not 0).

CP-1252 एन्कोडिंग का उपयोग करता है । आप यहाँ दुभाषिया डाउनलोड कर सकते हैं


12
मुझे "अधिक पठनीय" संस्करण पसंद है; उन अतिरिक्त लाइन टूट वास्तव में एक फर्क पड़ता है! ;)
वाइल्डकार्ड

@Wildcard वे वास्तव में एक फर्क पड़ता है;)
एरिक द आउटगोल्फ

क्या आप ppcg.lol/q/idसंपीड़न का उपयोग करके बाइट्स बचा सकते हैं ?
wnnmaw

@wnnmaw धन्यवाद, अब मैं रूबी के उत्तर से सिर्फ 1 बाइट दूर हूं : पी।
अदनान

1
अरे नहीं! मुझे नहीं लगता कि मैं 7 बाइट्स को बचाने के लिए पर्याप्त कोनों को काट सकता हूं मुझे फिर से आगे बढ़ने की जरूरत है ... मुझे लगता है कि मुझे बस दूसरे स्थान पर बसना होगा
मूल्य इंक

5

पायथन 3.5, 280 272 260 242 240 बाइट्स:

( 2 बचा बाइट्स में जिसके परिणामस्वरूप तुलना में ऑपरेटर का उपयोग करने के बारे में चाल के लिए अदनान का धन्यवाद *! )

def g(o):import urllib.request as u,re;R=re.findall;w=bytes.decode(u.urlopen('http://ppcg.lol/q/'+o).read());print((len(R('(?:<h[0-9]>|<p>).*python',w.lower()))<2)*(int(R('(?<="vote-count-post ">)[0-9]+',w)[0])>3)*w.count('answercell">')>5)

काफी सरल। urllibप्रश्न की साइट पर जाने के लिए लाइब्रेरी में निर्मित पायथन का उपयोग करता है , और फिर मतगणना, उत्तर गणना, और वेबसाइट से लौटे डिकोड पाठ में पायथन के विशिष्ट उत्तरों की गिनती के लिए नियमित अभिव्यक्ति का उपयोग करता है। अंत में, इन मानों की तुलना किसी truthyमान को लौटाने के लिए आवश्यक शर्तों से की जाती है , और यदि वे सभी शर्तों को पूरा करते हैं, तो Trueवापस कर दिया जाता है। नहीं तो Falseहै

केवल एक चीज जो मुझे यहां चिंतित कर सकती है, वह यह है कि नियमित भाव बाइट्स को बचाने के लिए अजगर के विशिष्ट उत्तरों की संख्या के संदर्भ में बहुत अधिक रास्ता देते हैं, इसलिए यह कई बार थोड़ा गलत हो सकता है, हालांकि यह बहुत अच्छा है इस चुनौती के उद्देश्य। हालाँकि, यदि आप बहुत अधिक सटीक चाहते हैं, तो मैंने नीचे एक जोड़ा है, हालाँकि यह ऊपर वाले की तुलना में अधिक लंबा है। नीचे दिखाया गया वर्तमान में 298 बाइट्स हैं क्योंकि यह बहुत अधिक नियमित अभिव्यक्ति का उपयोग करता है-एक जिसे आप नहीं जान सकते थे कि सटीकता की खातिर मेरे मूल कार्य की तुलना में पायथन के उत्तर गिनने में मुझे कितना समय लगा। यह एक कम से कम 80% से 90% सभी परीक्षण मामलों के लिए काम करना चाहिए।

def g(o):import urllib.request as u,re;R=re.findall;w=bytes.decode(u.urlopen('http://ppcg.lol/q/'+o).read());print(len(R('(?<=answercell">).*?(?:<h[0-9]>|<strong>)[^\n]*python[^\n]*(?=</h[0-9]>|</strong>)',w.lower()))<2and int(R('(?<="vote-count-post ">)[0-9]+',w)[0])>3and w.count('answercell">')>5)

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

def g(o):
 import urllib.request as u,re;R=re.findall;w=bytes.decode(u.urlopen('http://ppcg.lol/q/'+o).read());t=0if len(re.findall('="go to page ([0-9]+)">',w))<1else max([int(i)for i in re.findall('="go to page ([0-9]+)">',w)])
 if t<1:print(len(R('(?<=answercell">).*?(?:<h[0-9]>|<strong>)[^\n]*python[^\n]*(?=</h[0-9]>|</strong>)',w.lower(),re.DOTALL))<2and int(R('(?<="vote-count-post ">)[0-9]+',w)[0])>3and w.count('answercell">')>5)
 else:
  P=[];U=[];K=[]
  for i in range(2,t+2):P.append(len(R('(?<=answercell">).*?(?:<h[0-9]>|<strong>)[^\n]*python[^\n]*(?=</h[0-9]>|</strong>)',w.lower(),re.DOTALL)));U.append(int(R('(?<="vote-count-post ">)[0-9]+',w)[0]));K.append(w.count('answercell">'));w=bytes.decode(u.urlopen('http://ppcg.lol/questions/'+o+'/?page='+str(i)).read())
  print(sum(P)<2and U[0]>3and sum(K)>5);print('# Python answers: ',sum(P));print('# Votes: ',U[0]);print('# Answers: ',sum(K))

काफी लंबा है, है ना? मैं वास्तव में इस के साथ कोड गोल्फ के लिए ज्यादा नहीं जा रहा था, हालांकि, यदि आप चाहें, तो मैं इसे थोड़ा और नीचे गोल्फ कर सकता हूं। अन्यथा, मैं इसे प्यार करता हूं, और खुश नहीं हो सकता। ओह, मैं लगभग भूल गया, एक अतिरिक्त बोनस के रूप में, यह सवाल पर अजगर जवाब की कुल संख्या, सवाल पर कुल वोट, और सवाल पर जवाब की कुल संख्या का आउटपुट देता है, अगर सवाल id1 से अधिक पेज वाले प्रश्न से मेल खाता है जवाब के। अन्यथा, यदि प्रश्न में केवल उत्तर के एक पृष्ठ होते हैं, तो यह केवल truthy/falsyमूल्य का उत्पादन करता है । मैं वास्तव में इस चुनौती से थोड़ा दूर चला गया।

ये प्रत्येक प्रश्न idको एक स्ट्रिंग के रूप में लेते हैं ।

मैं Try It Online!प्रत्येक फ़ंक्शन के लिए यहां लिंक डालूंगा , लेकिन दुर्भाग्य से, न तो पायथन की लाइब्रेरी के माध्यम से संसाधनों को लाने की अनुमति देता है repl.itऔर न ही ।Ideoneurllib


आप http://codegolf.stackexchange.com/q/प्रश्न लाने के लिए उपयोग कर सकते हैं । साथ ही, http://अनिवार्य है?
मार्व

Ideone और repl.it बाहरी संसाधनों को लाने की अनुमति नहीं देता है।
मेगो

@ मेगो डांग ... ठीक है, मुझे लगता है कि लोगों को अपने स्वयं के पायथन दुभाषियों का उपयोग करके इसकी पुष्टि करने जा रहा है।
आर। काप

@Marv हाँ, जाहिरा तौर पर यह है। अन्यथा, मुझे एक unknown url typeत्रुटि मिलती है ।
आर। काप

6
ppcg.lol/q/idयह भी काम करता है
हटा दिया

4

जूलिया, 275 बाइट्स

using Requests
f(q,p=(s,t)->JSON.parse(readall(get("https://api.stackexchange.com/2.2/questions/$q$s",query=Dict(:site=>"codegolf",:filter=>"$t"))))["items"],x=p("","")[1])=x["answer_count"]>5&&x["score"]>3&&count(i->ismatch(r"python",i["body"]),p("/answers","!9YdnSMKKT"))<2

यह एक फ़ंक्शन है जो पूर्णांक को स्वीकार करता है और एक बूलियन देता है। यह स्टैक एक्सचेंज एपीआई से जुड़ता है और फ़ंक्शन का प्रत्येक रन 2 एपीआई अनुरोध करता है, इसलिए इसे बहुत बार न चलाएं या आप अपने 300 अनुरोधों / दिन कोटा को समाप्त कर देंगे।

Ungolfed:

using Requests

function f(q)
    # Define a function that takes two strings and returns a Dict
    # that connects to the SE API
    p = (s,t) -> JSON.parse(readall(get("https://api.stackexchange.com/2.2/questions/$q$s",
        query = Dict(:site => "codegolf", :filter=> "$t"))))["items"]

    # Get the question object
    x = p("", "")[1]

    # Get all answers using the `withbody` API filter
    y = p("/answers", "!9YdnSMKKT")

    x["answer_count"] > 3 && x["score"] > 5 &&
        count(i -> ismatch(r"python", i["body"], y) < 2
end

मैं "withbody" एपीआई फिल्टर के बारे में पता नहीं था! +1। अगर यह मेरे रूबी जवाब पर बाइट्स बचाता है, तो क्या मैं उस चाल का उपयोग कर सकता हूं?
वैल्यू इंक

1
@ केविनलाउ-नहीं केनी! गोल्फ के नाम पर आप क्या करते हैं। : पी
एलेक्स ए

मैं ppcg.lolसभी चीजों को कोडगॉल्फ की एक छोटी कड़ी के रूप में सीखने के बाद = 3 लेकिन अफसोस नहीं करना चाहता था , एपीआई संस्करण सिर्फ पर्याप्त नहीं था
मान स्याही

4

रैकेट, 339 बाइट्स

(λ(q)((λ(h)((λ(g)((λ(j)(and(>(h j'score)3)(>(h j'answer_count)5)(<(for/sum([a(g"~a/answers"q)]#:when(regexp-match #rx"(?i:python)"(h a'body)))1)2)))(car(g"~a"q))))(λ(s d)(define-values(x y b)(http-sendrecv"api.stackexchange.com"(format"/2.2/questions/~a?site=codegolf&filter=withbody"(format s d))))(h(read-json b)'items))))hash-ref))

अभी भी गोल्फ के लिए बहुत कुछ है।


1
मुझे इससे हराएं! : पी
बिल्ली

TODO: एक रैकेट जैसा बना जो गोल्फ-सक्षम है। :)
विनी

1
339 बाइट्स जिनमें से 68 परेंस हैं ... इसलिए गोल्फ के लिए एक LISP को शॉर्ट आइडेंटिफ़ायर और न ही पैरेंस की जरूरत होगी। बहुत कम नहीं :(
बिल्ली

4

रूबी + HTTParty , 170 146 145 142 139 138 + 11 ( -rhttpartyध्वज) = 181 157 156 153 150 149 बाइट्स

मुझे नहीं लगता कि ऐसा कोई भी किनारा मामला है जो मेरे रेगेक्स पैटर्न को तोड़ने का कारण होगा, मुझे उम्मीद है ...

@WashingtonGuedes द्वारा उपलब्ध कराए गए शॉर्टलिंक को अपडेट करना और यह पता लगाना कि अगर मैं //इसके बजाय शुरू करता हूं तो HTTParty शिकायत नहीं करता है http://

थोड़ा और अधिक सुरक्षित रेगीज़ के लिए अपडेट किया गया। मैं किसी भी तरह से बाइट्स को बचा लेता हूं ताकि यह पता चल सके कि HTTParty प्रतिक्रिया ऑब्जेक्ट स्ट्रिंग से विरासत में मिली है, जिसका मतलब है कि मुझे .bodyरेगेक्स से मेल खाते समय उपयोग करने की आवश्यकता नहीं है !

@manatwork ने एक आकस्मिक चरित्र जोड़ को इंगित किया था जिसे मैंने छोड़ दिया था, और गोल्फ के लिए, iअब एक स्ट्रिंग के रूप में स्वीकार किया जाना है।

अपडेटेड रेक्सक्स। एक ही लंबाई। -1 बाइट काटकर पारन।

->i{/"up.*?(\d+)/=~s=HTTParty.get("//ppcg.lol/q/"+i)
$1.to_i>3&&(a=s.scan /st.*xt".*\n(.*)/).size>5&&a[1..-1].count{|e|e[0]=~/python/i}<2}

अतिरिक्त नोट:

  • एक उत्तर की पहली पंक्ति (जिसमें कल्पना के अनुसार भाषा होनी चाहिए) कक्षा के साथ HTML टैग के बाद दो पंक्तियाँ हैं "post-text", जिनके साथ हम मेल खाते हैं st.*xt"। एक अधिक सुरक्षित संस्करण ने इसके बाद एक स्थान जोड़ा होगा, लेकिन हम गोल्फ की खातिर बलिदान कर रहे हैं।
  • net/httpदिए गए URL के लिए उचित पुनर्निर्देशन के कारण HTTP मॉड्यूल का उपयोग देशी मॉड्यूल पर किया जाता है ।
  • "up*?\dसबसे कम अनुक्रम मैंने पाया कि वोटों की संख्या के साथ मेल खाता था। हमें केवल पहले एक की आवश्यकता है, इसलिए शुक्र है कि उत्तर इस पर प्रभाव नहीं डालते हैं।

3
ppcg.lol/q/#{i}यह भी काम करता है
हटा दिया

@AshingtonGuedes ppcg.ga/q#{i}शायद? (मैं रूबी को नहीं जानता)
आउटग्राफर एरिक

@ ΥριΈνσταντόποςλοpc ppcg.ga एक वाइल्डकार्ड पुनर्निर्देशित नहीं है, इसे स्वयं आज़माएं - ppcg.ga/q/79273
टिमटेक

@Timtech ppcg.lol/q#{i}लागू है तो मुझे लगता है? ( a/#bजैसा है a#b)
एरिक द आउटगेलर

1
"को बर्बाद कर रहा है /"e-c.*?(\d+)/नियमित अभिव्यक्ति। वैसे, इनपुट के बारे में आवश्यकता कहते हैं कि "डेटा प्रकार (...) बात नहीं करता है।" तो बेहतर है, स्ट्रिंग के रूप में मैं पैरामीटर पारित ताकि आप संयोजन के साथ प्रतिस्थापन की जगह ले सकता: "//ppcg.lol/q/"+i
मैनटवर्क'

3

ग्रूवी, 179 161 157

{i->t=new URL("http://ppcg.lol/q/$i").text;a=0;p=0;(t=~/"(?i)p.{25}>\n.*python/).each{p++};(t=~/(?m)v.{13}t ">(\d+)/).each{if(it[1].toLong()>3)a++};a>5&&p<2}

टिमटेक के लिए धन्यवाद 17 चार्ट बच गए।

कीवर्ड डीफ़ भी आवश्यक नहीं है।


आप pgg.lol के साथ codegolf.stackexchange.com को बदल सकते हैं
टाइमटेक

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