मार्टिन बनाम डेनिस - राउंड 1: किसके पास अधिक प्रतिनिधि हैं?


33

मुझे पता है कि "दुनिया के दो सर्वश्रेष्ठ कोड-गोल्फर" के बारे में बहुत सारी चुनौतियां हैं, लेकिन यह एक और अधिक अनोखी बात है, इन दोनों में से एक (भविष्य की) चुनौतियों की श्रृंखला में राउंड 1 होना।


आपका कार्य एक प्रोग्राम या फ़ंक्शन लिखना है जो दो अलग-अलग गैर-व्हाट्सएप ASCII स्ट्रिंग्स को लौटाता है, उसी के अनुरूप जो कार्यक्रम को चलाया जाता है, डेनिस ♦ और मार्टिन एंडर के बीच इस समय अधिक प्रतिष्ठा है । मुश्किल हिस्सा यह है कि आपको सटीक स्ट्रिंग "टाई" का उत्पादन करना होगा यदि प्रतिष्ठा समान (संभावना नहीं) है, और ऊपर वर्णित दो अलग-अलग गैर-व्हाट्सएप ASCII तार "टाई" * से अलग होना चाहिए ।

कोई इनपुट नहीं लिया जा सकता है, जैसे कि उपयोगकर्ता नाम या उपयोगकर्ता आईडी। हमेशा की तरह, URL शॉर्टर्स निषिद्ध हैं, और इसलिए सामान्य कमियां हैं।

उदाहरण:

Let the chosen string for Dennis be "D" and the chosen one for Martin Ender be "M" (should be specified)

If Dennis' rep > Martin Ender's rep => D
If it's the other way around => M
If it's a tie => tie 

जरूरी! नीचे दिए गए समाधानों का परीक्षण करने के लिए एक टाई को प्रभावित करने के एकमात्र उद्देश्य के लिए डेनिस एंड मार्टिन द्वारा पदों पर मतदान लक्षित वोटिंग का गठन करता है जो स्टैक एक्सचेंज नेटवर्क में निषिद्ध है। यदि आप यह जांचना चाहते हैं कि एक समाधान ठीक से आउटपुट करता है tieतो इसमें आईडी को उन 2 उपयोगकर्ताओं को बदल दें जिन्हें आप बंधे हुए जानते हैं। देखें इस मेटा पोस्ट अधिक जानकारी के लिए।

* मुझे लगता है कि किसी ने भी इसका इस्तेमाल नहीं किया होगा


33
"... दुनिया के दो सबसे अच्छे कोड-गोल्फर ..." [उद्धरण वांछित]
मार्टिन एंडर

9
क्या हम मान सकते हैं कि वे हमेशा इस समुदाय में # 1 और # 2 रहेंगे?
ओव्स

7
एक अनुकूल अनुस्मारक: लक्षित वोट पूरे स्टैक एक्सचेंज नेटवर्क पर निषिद्ध है। इस चुनौती को प्रस्तुत करने के लिए केवल मार्टिन और मेरे पदों पर मतदान की अनुमति नहीं है
डेनिस

2
@ शैगी यह बहुत अच्छा है कि आपने वह नोट जोड़ लिया है। उम्मीद है, इसमें शामिल उपयोगकर्ता ऐसा करना बंद कर देंगे
श्री एक्सकोडर

1
शीर्ष पर @MartinEnder के लिए, उद्धरण सामान्य ज्ञान वाले तथ्यों के लिए अनावश्यक हैं।
ग्रिफॉन - मोनिका

जवाबों:


20

05AB1E , 65 64 बाइट्स

कोड:

•в=6{•5ôvy’ƒËŠˆ.‚‹º.ŒŒ/†š/ÿ’.w’„Ö="ˆ"’¡1èт£þ}})ZQā*O<“D M·‡“#è

05AB1E एन्कोडिंग का उपयोग करता है ।


स्पष्टीकरण:

•в=6{•संख्या в=6{255 को आधार से 10 में परिवर्तित करता है, जिसके परिणामस्वरूप 1201208478 होता है । पहली छमाही डेनिस की आईडी (12012) और दूसरी छमाही मार्टिन की आईडी (8478) है। निम्न सरणी प्राप्त करने के लिए 5 के टुकड़ों में विभाजित करें :

['12012', '08478']

सौभाग्य से, हम मार्टिन की आईडी से अग्रणी शून्य को छोड़ सकते हैं, क्योंकि यह अभी भी काम करेगा (अग्रणी शून्य को देखने के लिए क्लिक करने से पहले लिंक की जांच करें)।

अब हम vyइस 05AB1E कोड से निम्नलिखित स्ट्रिंग का उपयोग करके और इस स्ट्रिंग का निर्माण करते हैं:

’ƒËŠˆ.‚‹º.ŒŒ/†š/ÿ’  -->  codegolf.stackexchange.com/users/ÿ

जबकि ÿइटरेटर का वर्तमान तत्व है (स्ट्रिंग इंटरपोलेशन का उपयोग करके) इसे ऑनलाइन आज़माएं!

लिंक का निर्माण करने के बाद, लिंक .wसे सभी डेटा को पढ़ता है, जिसके परिणामस्वरूप बड़ी मात्रा में पाठ होता है। इससे प्रतिष्ठा को खत्म करने के लिए, हमें स्ट्रिंग पर विभाजित करने की आवश्यकता है title="reputation"। या अधिक संकुचित संस्करण में ’„Ö="ˆ"’:। स्ट्रिंग के इस टुकड़े पर विभाजित करें (साथ ¡) और दूसरा तत्व प्राप्त करें (साथ ) और पहले 100 अक्षरों (साथ т£) को रखें।

अब, हमारा बिखरा हुआ पाठ इस तरह दिखता है:

>
        139,883 <span class="label-uppercase">reputation</span>
   </div>

<div class="ba

यह हिस्सा आसान है, हम प्रतिष्ठा संख्या को बनाए रखने के लिए कुछ भी लेकिन अंकों को हटा देते हैं, जिसके लिए हमारे पास एक बिल्डिन ( þ) है। हम लूप को समाप्त करते हैं और एक सरणी में सब कुछ लपेटते हैं }})

अंत में, हम प्रतिष्ठा संख्या को संसाधित करने के लिए आगे बढ़ सकते हैं:

ZQā*O<“D M·‡“#è   -   On stack: an array in the format [Dennis rep, Martin rep]

Z                 # Get the maximum of the array
 Q                # Check for equality with the array
  ā*              # Multiply by it's index (1-indexed)
    O<            # Sum and decrement by 1
      “D M·‡“#    # Push the array ['D', 'M', 'tie']
              è   # Get the element on the index of the sum

या तो में कौन सा परिणाम D, Mया tie


2
मुझे नहीं पता था कि 05AB1E इंटरनेट एपीआई तक पहुंच सकता है, यह उत्तर मुझे आश्चर्यचकित करता है => +1
श्री एक्सकोडर

मुझे हमेशा पसंद है कि आप और अन्य कैसे निश्चित संख्या प्राप्त करने के तरीकों के साथ आते हैं। :) +1 Btw, भाग " दूसरा तत्व (के साथ 1è) and keep the first **100 characters** (with т£।) पूरी तरह से कोड-ब्लॉक में माना जाता है, या यह" दूसरा तत्व (т£ होना चाहिए) होना चाहिए और पहले 100 वर्ण (साथ ) रखें। "इसके बजाय? मुझे लगता है। एक टाइपो, लेकिन अगर ऐसा होना चाहिए, तो मैं उलझन में हूँ ..
केविन क्रूज़सेन

@ केविनक्रूजसेन हुआ, मुझे नहीं पता कि यह कैसे हुआ, लेकिन अब यह तय हो गया है। सर उठाने के लिए धन्यवाद! :)
अदनान

यह गलत लगता है (मुझे नहीं पता कि इस तरह के कोड को कैसे ठीक किया जाए, क्षमा करें) Dennis: 140,033; Martin: 140,003, लेकिन मैंने यहाँ आपका कोड tio.run/nexus/05ab1e#@// आज़माया , यह उपज है tieDइसके बजाय यह नहीं होना चाहिए ?
एडी

@Eddie .wको वेब एक्सेस की आवश्यकता होती है, जो TIO पर प्रतिबंधित है (यह सुरक्षित मोड में 05AB1E चलाता है)। ऑफ़लाइन दुभाषिया में, यह काम करना चाहिए।
अदनान

19

PowerShell v3 +, 147 123 119 103 101 96 बाइट्स

$a,$b=irm api.stackexchange.com/users/12012`;8478?site=codegolf|% I*|% r*n;$a-$b|% T*g "D;M;Tie"

नाम के बजाय सच्चे / गलत आउटपुट का उपयोग करके 24 बाइट्स सहेजे गए।

अंतिम चेक का पुनर्गठन करके एक और 4 को बचाया।

16 उपयोगकर्ताओं को केवल अनुरोध से दो उपयोगकर्ताओं की प्रतिष्ठा प्राप्त करने से बचाया |% r*n, एक से अधिक बार उपयोग करने से बचाता है , इसका मतलब यह भी है कि हम एक लाख कोष्ठक, और दो बेकार चर से छुटकारा पा सकते हैं।

-2 TessellatingHeckler के लिए धन्यवाद - url के लिए दो डबलक्वाट्स के बजाय एक एस्केप चार का उपयोग करते हुए, @उस सरणी से भी हटा दिया गया, जो गैर-आवश्यक था (oopsie)

एक अजीब .ToStringचाल का उपयोग किया, जिसे मैं कभी नहीं जानता था कि अब तक TessellatingHeckler -5 द्वारा फिर से प्रस्तुत किया गया था , और अंत में 100 से नीचे।


संस्करण जो नाम लौटाता है:

$a,$b=irm "api.stackexchange.com/users/12012;8478?site=codegolf"|% I*
if(($c=$a|% r*n)-eq($d=$b|% r*n)){"tie"}else{@(($a|% d*),($b|% d*))[$c-lt$d]}

पैरामीटर नामों की कमी के कारण यह बहुत गन्दा लग रहा है।

कहीं भी |% r*nप्रतीत होता है कि हम मिल रहे हैं ReputatioN, और |% d*हैDisplay_name

का उपयोग करता है Invoke-RestMethod(उर्फ irm) एपीआई नामित परिणाम क्वेरी करने के लिए, दुकानों Items(मिल का उपयोग करते हुए |% I*दो चर में), $aऔर $b, प्रत्येक समर्थक गोल्फर के लिए एक, ToString( |% T*g) में से एक मान में चाल परिणाम D, Mया Tieविषम संख्या है अगर / भी / शून्य।


मुझे उम्मीद नहीं थी कि शक्तियां सबसे कम होंगी। +1
Rɪᴋᴇʀ

@ रिकर पाइथ संभवतः होता, लेकिन इसमें एक भयानक बग होता है।
एरिक आउटोलॉफ़र

1
ठीक है, आप जीतते हैं; कोई रास्ता नहीं मैं अब इसे हरा करने जा रहा हूँ!
झबरा

9
तो आपका कोड 103! = 9.902900716486180407546715254581773349090165822114492483005280554699... × 10^163बाइट्स लंबा है ..? : पी
बिलकुल अमानवीय

1
@TessellatingHeckler अंतिम बिट के लिए उत्तर की जांच करें, आपको यह 100 से नीचे मिला है! - कभी नहीं पता था कि ToStringइस तरह से +/- नंबरों के साथ, भविष्य के लिए याद करेंगे।
colsw

16

पायथन 2 , 160 बाइट्स

from requests import*
print cmp(*[get('http://api.stackexchange.com/users/12012;8478?%ssite=codegolf&filter=!9aK21rboZ'%s).text for s in'order=asc&',''])or'tie'

सबसे छोटा पायथन जवाब नहीं है, लेकिन अब तक का सबसे छोटा है जो कोई धारणा नहीं बनाता है।

1अगर मार्टिन अधिक प्रतिनिधि है, -1तो प्रिंट ।


14

जावास्क्रिप्ट (ईएस 6), 167 156 146 144 141 132 103 बाइट्स

बेवकूफ fetchऔर उसके बेवकूफ, महंगी Promiseजंजीर!

जैसा कि वर्तमान में अनुमति है, कि डेनिस और मार्टिन हमेशा 2 शीर्ष रैंक वाले उपयोगकर्ता होंगे। के मूल स्तर से चलाने की आवश्यकता है api.stackexchange.com। एक Promiseवस्तु (जैसा कि अब सर्वसम्मति से अनुमत है ) युक्त है tieया उस समय के लिए JSON ऑब्जेक्ट है जिसमें सबसे अधिक प्रतिनिधि है। यदि JSON ऑब्जेक्ट को वैध आउटपुट नहीं माना जाता है, तो इसके लिए 5 बाइट्स जोड़ें .link

_=>fetch`users/?site=codegolf`.then(r=>r.json()).then(({items:[j,i]})=>j[r="reputation"]==i[r]?"tie":j)
  • 11 बाइट्स केविन के लिए धन्यवाद का सुझाव देते हुए मैंने linkपहले अक्षर के बजाय प्रोफाइल वापस करने का सुझाव दिया display_name, जो एक ही पत्र के साथ शुरू करने के लिए उनके उपयोगकर्ता नाम बदलने के खिलाफ बेहतर भविष्य-प्रूफिंग प्रदान करता है!
  • 5 बाइट्स ने खान के एक अन्य समाधान पर kamoroso94 से एक टिप को अपनाने से बचाया ।

कोशिश करो

f=
_=>fetch`//api.stackexchange.com/users/?site=codegolf`.then(r=>r.json()).then(({items:[j,i]})=>j[r="reputation"]==i[r]?"tie":j)
f().then(console.log)


विकल्प

यदि एक समय आता है कि डेनिस और मार्टिन शीर्ष पर नहीं हैं और हम अभी भी जानना चाहते हैं कि उनके बीच सबसे अधिक प्रतिनिधि कौन है तो हमें अतिरिक्त 10 बाइट्स की कीमत पर निम्नलिखित की आवश्यकता होगी।

_=>fetch`users/12012;8478?site=codegolf`.then(r=>r.json()).then(({items:[j,i]})=>j[r="reputation"]==i[r]?"tie":j)

2
आप बदल सकते हैं .display_name[0]करने के लिए .display_name, या एक भी कम विकल्प अभी भी उन दोनों के लिए अद्वितीय है कि: .link। ;) या सिर्फ पूरे JSON, लेकिन मुझे यकीन नहीं है कि यह अलर्ट-पॉपअप में फिट बैठता है।
केविन क्रूज़सेन

धन्यवाद, @ केविनक्रूजसेन; मुझे उपयोगकर्ता नाम के एक उद्धरण का उपयोग करना पड़ा क्योंकि मार्टिन के पास एक स्थान है, जिसकी अनुमति नहीं है। उपयोग करने पर अच्छा चिल्लाना link, हालांकि, मैं फ़िल्टर की गई API क्वेरी का उपयोग केवल उस जानकारी को वापस करने के लिए कर रहा था जिसकी मुझे आवश्यकता थी।
झबरा

AJAX रिटर्न के साथ काम करते समय @KevinCruijssen मैंने पूरे HTML पृष्ठों को अलर्ट पॉपअप में डंप कर दिया है। इसे संभाल सकते हैं।
ड्रेको 18

@ Draco18s, alertएक JSON ऑब्जेक्ट आईएनजी, हालांकि, बस प्रदर्शित करेगा [object Object]
झबरा

@ झूठा सच, सच, यह होगा।
ड्रेको 18

9

पायथन 3, 160 157 151 बाइट्स

from requests import*
a,b,*c=get('http://api.stackexchange.com/users?site=codegolf').json()['items']
r='reputation'
print(['tie',a['link']][a[r]>b[r]])

-3 बाइट्स @KevinCruijssen को धन्यवाद

अधिक प्रतिष्ठा वाले उपयोगकर्ता के लिए एक लिंक प्रिंट करता है

मान लेते हैं कि वे # 1 और # 2 पर हैं


बिना किसी धारणा के, पायथन 2, 157 बाइट्स :

from requests import*
a,b=get('http://api.stackexchange.com/users/8478;12012?site=codegolf').json()['items']
r='reputation'
print['tie',a['link']][a[r]>b[r]]

6

पायथन, 226 225 221 बाइट्स

मुझे ऐसा लगता है कि यह बहुत लंबा है।

import requests as r,re
def f(i):d=re.sub('[, ]','',r.get('http://codegolf.stackexchange.com/users/'+i).text);D=d.index('"reputation">')+14;return int(d[D:d.index('<',D)])
a=f('8478')
b=f('12012')
print([a>b,'tie'][a==b])

प्रिंट "True"यदि मार्टिन डेनिस से अधिक प्रतिनिधि है, "False"अगर डेनिस मार्टिन की तुलना में अधिक प्रतिनिधि है, और "tie"यदि उनके पास एक ही है (सैद्धांतिक रूप से। मैं यह परीक्षण नहीं कर सकता: पी)।

https-> http1 बाइट के लिए @KevinCruijssen को धन्यवाद! re as r, r.sub-> re, re.sub4 बाइट्स के लिए @ovs धन्यवाद!


मुझे पूरा यकीन नहीं है, लेकिन क्या इसे बदलना संभव httpsहै http? मुझे पता है कि PPCG अब पूरी तरह से https है, लेकिन संभवत: जब आप किसी ब्राउज़र में HTTP पर जाते हैं, तो यह HTTPS में ऑटो-डायरेक्ट हो जाता है, जैसे कि आप HTTP में नेविगेट करते हैं?
केविन क्रूज़सेन

@ केविनक्रूजसेन आह हां, मुझे नहीं पता कि मैं वहां क्या सोच रहा था। धन्यवाद!
हाइपरएन्यूट्रीनो

1
आप की जरूरत नहीं है re as R। बस का उपयोग करें import requests as r,reऔरre.sub
13

@ ओव्स हे, मेरा मूल दृष्टिकोण अलग था धन्यवाद!
हाइपरएन्यूट्रीनो

मुझे लगता है कि आप cmpकुछ तीन के साथ अंतिम बाइट्स को बदलकर कुछ बाइट्स को बचाने के लिए फंक्शन का उपयोग कर सकते हैंprint['tie',0,1][cmp(f('8478'),f('12012'))]
Loovjo

6

PHP, 167 बाइट्स

डेनिस के लिए प्रिंट -1, मार्टिन एंडर के लिए 1। एक टाई के मामले में टाई

<?=($b=($t=json_decode(gzdecode(join(file('http://api.stackexchange.com/users/12012;8478?site=codegolf&order=asc'))))->items)[0]->reputation<=>$t[1]->reputation)?:tie;

4

पायथन 2 , 228 223 204 199 बाइट्स

मैंने एक मोबाइल हॉटस्पॉट पर ऐसा किया है ... यह बहुत अच्छा नहीं है ... मान लें कि दोनों हमेशा एक ही हजार में रहेंगे। अब कुछ भी नहीं मानती। : डी

import urllib as l,re
f=lambda i:int(re.search('n">\s*([\d,]+)',l.urlopen('http://codegolf.stackexchange.com/users/%d'%i).read()).group(1).replace(',',''))
d,m=f(12012),f(8478)
print[d>m,'Tie'][d==m]

प्रिंट Trueयदि डेनिस मार्टिन की तुलना में अधिक प्रतिष्ठा है, Falseअन्यथा और Tieयदि वे ... बंधे हुए हैं।


4

बैश + jq , 140 133 बाइट्स

w3m 'api.stackexchange.com/users/12012;8478?site=codegolf&sort=name'|jq '.items|map(.reputation)|1/(index(min)-index(max))'||echo tie

प्रारूपित और समझाया गया

सबसे पहले, हम w3m API को कर्ल करते हैं (और अन---compressed--com गज़िप के लिए छोटा या उपयोग करते हैं ) :

w3m 'api.stackexchange.com/users/12012;8478?site=codegolf&sort=name'

वह कुछ JSON है। सूचना को स्थिर नहीं, आदेश को प्रतिष्ठा के आधार पर देखें। JQ तब JSON को प्रोसेस करता है, जो कि इसके लिए बनाया गया है।

.items                          # take the items array
| map(.reputation)              # extract only the reputations
| 1 / 
  (index(min)-index(max))       # This checks if the bigger value is first (1) or last (-1) in array

1/xजब हम न्यूनतम == अधिकतम होते हैं, तो एक टाई-अप स्थिति में एक डिवीजन-बाय-ज़ीर त्रुटि उत्पन्न करने के लिए ऊपर का उपयोग करते हैं । ||echo tieबैश कैच में कि।

ध्यान दें कि उस स्थिति में JQ द्वारा stderr पर एक चेतावनी मुद्रित की जाती है, लेकिन हम कार्यक्रम के वास्तविक परिणाम को केवल stdout मानते हैं;)


1
आप कुछ बाइट्स को बचाने के w3mबजाय उपयोग कर सकते हैं curl --com। इसके अलावा, मुझे लगता है कि यह ध्यान देने योग्य है कि इसके लिए jq 1.5 की आवश्यकता है, क्योंकि jq 1.4 ने विभाजन द्वारा शून्य के लिए कोई त्रुटि नहीं उठाई।
डेनिस

सच है, संकेत के लिए धन्यवाद। W3m वास्तव में वही है जिसकी मुझे तलाश थी।
opatut

1

स्टैकएक्सचेंज एपीआई डेटा एक्सप्लोरर , 184 180 बाइट्स

-4 बाइट्स के लिए @ केविन क्रूज़सेन को धन्यवाद

DECLARE @M int,@D int;SELECT @M=reputation from users where id=8478;SELECT @D=reputation from users where id=12012;IF @D=@M PRINT('tie')ELSE BEGIN;IF @D>@M PRINT(1)ELSE PRINT(2)END

डेनिस के लिए प्रिंट 1 और मार्टिन के लिए 2

चूंकि मैंने कल ही SEADE के बारे में जाना, यह बहुत ही उचित होना चाहिए।

इसे यहाँ आज़माएँ


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