क्विक गोल्फ: द गोल्ड लीडर


18

चुनौती

यहां एपीआई से डेटा का उपयोग करते हुए 2016 के रियो ओलंपिक खेलों (यानी लौटी सूची का पहला तत्व) में सबसे अधिक ओलंपिक स्वर्ण पदक के साथ तीन देशों के नाम का उत्पादन किया।

उदाहरण के लिए, पोस्टिंग के समय (18:23 UTC + 1, सोमवार, 15 अगस्त), संयुक्त राज्य अमेरिका, यूके और चीन के पास सबसे अधिक स्वर्ण पदक हैं, इसलिए आउटपुट होगा:

United States
Great Britain
China

देश के नामों को नई सूचियों से अलग किया जाना चाहिए और आपके पास एक प्रमुख या नई रूपरेखा हो सकती है।

एक बार ओलंपिक समाप्त हो जाने के बाद, कार्यक्रम को अपेक्षित रूप से काम नहीं करना है।

URL शॉर्टर्स को बंद कर दिया गया है, लेकिन JSON पार्सिंग लाइब्रेरी की अनुमति है।

यह कोड गोल्फ है, इसलिए बाइट्स में सबसे छोटा कोड जीत जाता है।

मैं यहां ओलंपिक थीम्ड चुनौती प्राप्त करने की कोशिश करता रहूंगा

लीडरबोर्ड


6
क्या आप कहेंगे कि यह एक ... मिनी-गोल्फ है ?
देउसोविए

1
@Deusovi बा-डम दुर्घटना
बीटा

2
मैं वास्तव में किसी को जावा समाधान पोस्ट करना चाहता हूं ताकि मैं देख
डेव

3
"द यूके ... सो आउटपुट ... ग्रेट ब्रिटेन"
ट्राइकोप्लाक्स

1
@ एनआई एथलीट टीम जीबी या टीम आयरलैंड का प्रतिनिधित्व करने के लिए चुन सकते हैं। यदि NI एथलीट को टीम जीबी में शामिल होने की आवश्यकता होती है, तो यह टीम यूके होगी।
एसजीआर

जवाबों:


12

bash + w3m + grep + कट, 65 59 58 54 बाइट्स

w3m medalbot.com/api/v1/medals|grep -m3 m|cut -d\" -f4
  • @ बाइट के सुझावों के लिए 6 बाइट्स कम धन्यवाद।
  • 1 बाइट कम @ धन्यवाद के लिए धन्यवाद।
  • 4 बाइट्स के लिए धन्यवाद @manatwork का सुझाव है कि पदक एपीआई बिना www के काम करता है। उपडोमेन भी

2
दो बाइट बचाने के cut -d '"'लिए बदलें cut -d\"। यदि आप w3mइसके बजाय उपयोग करते हैं curl -sतो आप 4 और बचा सकते हैं।
जो

आप मीटर _n बदल सकते हैं
आप

@ यूओयू: वास्तव में नहीं है क्योंकि इस तरह यह उम्मीद से अधिक लाइनें लौटाएगा, अर्थात "आईडी": "जर्मनी", आईडी ":" कोलम्बिया "आदि
मास्टर_एक्स

अगर वे 1 से 3 नहीं हो सकते तो यह ठीक होगा, आपके पास -m3 गार्ड है।
आप

1
@ यूओयू: मुझे लगता है कि यह वर्तमान स्कोर के लिए सही है और ऐसा लगता है कि यह 2016 के ओलंपिक के लिए ठीक होगा (सिवाय इसके कि वे संयुक्त राज्य अमेरिका को संयुक्त राज्य अमेरिका में बदलते हैं: पी)। मैं इसे बदल दूंगा।
मास्टर_एक्स

13

सी (+ सॉकेट), 433 429 280 276 270 259 बाइट्स

#define H"medalbot.com"
char**p,B[999],*b=B;main(f){connect(f=socket(2,1,getaddrinfo("www."H,"80",0,&p)),p[4],16);send(f,"GET http://"H"/api/v1/medals HTTP/1.1\r\nHost:"H"\r\n\r\n",69);read(f,b,998);for(f=3;f--;puts(p))b=strchr(p=strstr(++b,"_n")+9,34),*b=0;}

तो यह पता चला है कि सी इंटरनेट से संसाधनों को डाउनलोड करने और उन्हें JSON के रूप में पार्स करने में महान नहीं है। किसे पता था?

यह कोड (स्वाभाविक रूप से) त्रुटि जांच के साथ सुपर लक्स है, इसलिए मुझे लगता है कि अगर medalbot.com दुर्भावनापूर्ण डेटा भेजना चाहता था, तो वे बफर ओवरफ्लो को ट्रिगर करने में सक्षम होंगे, आदि। नवीनतम कोड कॉन्स्टेंट के लिए कुछ मूल्यों की अपेक्षा करता है (जैसे AF_INET = 2) जो शायद हर जगह मामला होगा , लेकिन इसकी गारंटी नहीं है।

यहां मूल कोड है जो इतना नाजुक नहीं है (लेकिन अभी भी बहुत मजबूत या सुरक्षित नहीं है):

#include<netdb.h>
#define H"medalbot.com"
char*b,*B,d[999];struct addrinfo*p,h;main(f){h.ai_socktype=SOCK_STREAM;getaddrinfo("www."H,"80",&h,&p);f=socket(p->ai_family,p->ai_socktype,p->ai_protocol);connect(f,p->ai_addr,p->ai_addrlen);send(f,"GET http://"H"/api/v1/medals HTTP/1.1\r\nHost: "H":80\r\nConnection: close\r\n\r\n",92,0);recv(f,d,998,0);for(f=0,b=d;f<3;++f)B=strstr(b,"_n")+9,b=strchr(B,'}'),*strchr(B,'"')=0,puts(B);}

टूट - फूट:

                            // No imports needed whatsoever!
#define H"medalbot.com"     // Re-use the host in multiple places
char**p,                    // This is actually a "struct addrinfo*"
    B[999],                 // The download buffer (global to init with 0)
    *b=B;                   // A mutable pointer to the buffer

main(f){
    // Hope for the best: try the first suggested address with no fallback:
    // (medalbot.com runs on Heroku which has dynamic IPs, so we must look up the
    // IP each time using getaddrinfo)
    f=socket(2,1,getaddrinfo("www."H,"80",0,&p));
                            // 2 = AF_INET
                            // 1 = SOCK_STREAM
                            //     (may not match getaddrinfo, but works anyway)
                            // 0 = IP protocol (getaddrinfo returns 0 on success)
    connect(f,p[4],16);     // struct addrinfo contains a "struct sockaddr" pointer
                            // which is aligned at 32 bytes (4*8)

    // Send the HTTP request (not quite standard, but works. 69 bytes long)
    send(f,"GET http://"H"/api/v1/medals HTTP/1.1\r\nHost:"H"\r\n\r\n",69);
    // (omit flags arg in send and hope 0 will be assumed)

    read(f,b,998);          // Get first 998 bytes of response; same as recv(...,0)

    // Loop through the top 3 & print country names:
    // (p is re-used as a char* now)
    for(f=3;f--;puts(p))        // Loop and print:
        p=strstr(++b,"_n")+9,   //  Find "country_name": "
        b=strchr(p,34),         //  Jump to closing "
        *b=0;                   //  Set the closing " to \0
}

यह सर्वर के लिए बहुत अच्छा नहीं है क्योंकि हम Connection: close\r\nHTTP अनुरोध के हिस्से के रूप में नहीं भेजते हैं। यह Acceptशीर्षलेख को भी छोड़ देता है क्योंकि medalbot.com किसी भी मामले में कम्प्रेशन का उपयोग नहीं करता है, और इसके बाद स्पेस को याद करता है Host:(फिर से, सर्वर को यह ठीक लगता है)। ऐसा नहीं लगता कि हालांकि कुछ और हटाया जा सकता है।


एक बार ओलंपिक समाप्त होने के बाद, इस कार्यक्रम के लिए सबसे अधिक संभावना व्यवहार मेमोरी स्थान को पढ़ने की कोशिश करना है। जब तक कि एक दुष्ट हैकर डोमेन पर कब्जा न कर ले, उस स्थिति में सबसे संभावित व्यवहार यह है कि पते में कुछ बाइट को 0 पर सेट करना है। जानकारी संरचना, जो वास्तव में बहुत खतरनाक नहीं है। लेकिन इन दुष्ट हैकर्स के साथ कौन बता सकता है?


1
हाँ, यह उन हैकर्स के साथ एक कीट है। अच्छी बात है कि हम एक ऐसी वेबसाइट पर हैं, जिस पर किसी भी तरह के हैकरों को कभी भी पलटने की संभावना नहीं है ...
बंद हो गया

1
वह काफी छलांग थी!
नॉनलाइनयरफ्रूट

2
जब आप पवन को सावधानी से फेंकते हैं और कोड में सीधे कार्यान्वयन-परिभाषित संख्याओं का उपयोग करते हैं तो @NonlinearFruit हाँ यह आश्चर्यजनक है कि कितने वर्णों को बचाया जा सकता है! यह एक अभ्यास बन गया है "क्या सबसे खतरनाक है, सबसे खतरनाक है, सबसे अधिक टूटने की संभावना है - लेकिन वर्तमान में कार्यात्मक - सी में पाठ डाउनलोड करने का तरीका?"
डेव

चलो बस उम्मीद करते हैं कि छोटे बॉबी टेबल्स का कोई रिश्तेदार इस साल प्रतिस्पर्धा न करे।
गिटारपरिस्क

पठनीयता भी कॉड गोल्फ के पहले हताहतों में से एक है। । ।
नॉनलाइनयरफ्रूट

12

PowerShell v4 +, 88 69 बाइट्स

(ConvertFrom-Json(iwr medalbot.com/api/v1/medals))[0..2].country_name

का उपयोग करता है iwr(उर्फ के लिएInvoke-WebRequestएपीआई को हथियाने के )। हम इसे इनपुट पैरामीटर के रूप में ConvertFrom-Jsonअंतर्निहित JSON पाठ को कस्टम ऑब्जेक्ट सरणी में खींचते हैं। हम उस ऑब्जेक्ट सरणी को parens में इनकैप्सुलेट करते हैं, पहले तीन तत्वों [0..2]को लेते हैं , और .country_nameप्रत्येक को लेते हैं।

कई-वस्तु-गुणों के लिए कम से कम v4 + की आवश्यकता होती है, अन्यथा हमें |Select "country_name"इसके बजाय कुछ का उपयोग करने की आवश्यकता होगी । ConvertFrom-Jsonबिल्ट-इन के लिए कम से कम v3 + की आवश्यकता होती है।

PS C:\Tools\Scripts\golfing> .\olympics-gold-leader.ps1
United States
Great Britain
China

आप ड्रॉप कर सकते हैं http://www.और PS के बारे में http://या साइट के बारे में बुरा नहीं मानते www.। मेरी PS (5.1.14393) को भी परवाह नहीं है .content
निक टी

@NickT गोल्फ के लिए धन्यवाद। मुझे महसूस नहीं हुआ कि ConvertFrom-Jsonस्पष्ट रूप .contentसे वेब अनुरोध के केवल हिस्से की आवश्यकता नहीं थी , लेकिन यह मेरे सेटअप पर भी काम करता है।
AdmBorkBork

6

आर, 98, 112 , 108 बाइट्स

गोल्फ 4 @miff के लिए धन्यवाद

a=jsonlite::fromJSON(readLines("http://www.medalbot.com/api/v1/medals"))
cat(a$c[order(-a$g)[1:3]],sep="\n")

पहली पंक्ति एक JSON लाइब्रेरी का उपयोग करके डेटा आयात करती है। दूसरी पंक्ति प्रासंगिक देश के नामों को पकड़ती है। यह बढ़ते हुए क्रम में स्वर्ण पदकों से देशों को छाँटता है, सूचकांकों को उलट देता है, और पहले 3 लेता है, उन्हें मुद्रित करता है।


1
मुझे लगता है कि आप की जगह ले सकता rev(order(a$g))के साथ order(-a$g)करने के लिए सेव 4 बाइट
मनमुटाव

5

जावास्क्रिप्ट (ईएस 6), 122 बाइट्स

fetch`http://www.medalbot.com/api/v1/medals`.then(a=>a.json()).then(b=>alert(b.slice(0,3).map(c=>c.country_name).join`\n`))

ब्राउज़र सुरक्षा समस्या के कारण , यह कोड चालू होना चाहिए medalbot.com। हालांकि यह इसका फायदा नहीं उठाता है और संभवतः कहीं और चलाया जा सकता है। यह भी ध्यान दें कि मैंने डाला\n चरित्र , लेकिन केवल एक के रूप में गिन रहा हूं, क्योंकि मैं इसे एक के साथ बदल सकता हूं

नोड.जेएस (ईएस 6), 173 बाइट्स

require("http").get("http://www.medalbot.com/api/v1/medals",s=>s.on("data",d=>t+=d,t="").on("end",q=>console.log(JSON.parse(t).slice(0,3).map(a=>a.country_name).join`\n`)))

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

Node.js (ES6) + अनुरोध, 138 बाइट्स

require("request")("http://www.medalbot.com/api/v1/medals",(e,r,b)=>console.log(JSON.parse(b).slice(0,3).map(a=>a.country_name).join`\n`))

बेहतर है, लेकिन फिर भी ब्राउज़र संस्करण जितना अच्छा नहीं है। धन्यवाद लाने के लिए एपीआई! अनुरोध एक लोकप्रिय HTTP क्लाइंट लाइब्रेरी है, जिसका उपयोग अनुरोधों को सरल बनाने के लिए किया जाता है, और आप देख सकते हैं कि यहाँ प्रभावी हैं।


इनमें से कौन सा किसी भी ब्राउज़र में काम करता है? क्या आप अपने उत्तर के शीर्ष पर (लीडरबोर्ड के लिए) सबसे छोटा डाल सकते हैं
बीटा डिके

इनमें से शीर्ष एक सबसे आधुनिक ब्राउज़रों में काम करता है, और सबसे छोटा भी है। अन्य दो Node.js सर्वर पर जावास्क्रिप्ट लिखने का एक तरीका है (प्लस अन्य चीजें)।
मेयरमोनी

@ anyα version ध्यान दें कि यह IE या सफारी के किसी भी संस्करण में काम नहीं करता है
मेयोरमोनी

मैं देख रहा हूं, मैं कोरस समस्या
बीटा डेके

4

बैश + w3m + JQ ,83 59 बाइट्स

w3m medalbot.com/api/v1/medals|jq -r '.[:3][].country_name'

तीन बाइट्स के लिए जॉर्डन का धन्यवाद।

24 और बाइट्स के लिए धन्यवाद! डेटा को हल किया जाता है। वाह। : डी


1
आप सीधे .|परिणाम को छोड़ और अनुक्रमित कर सकते हैं sort_by, और आप [:3][]इसके बजाय का उपयोग करके किसी अन्य बाइट को बचा सकते हैं [0,1,2]। सभी एक साथ sort_by(-.gold_count)[:3][].country_name:।
जॉर्डन

w3m medalbot.com/api/v1/medals|jq -r '.[:3][].country_name'
आप

4

जावा 8, 261 258 बाइट्स

यह वेब पेज प्राप्त करने के लिए एक युगल बाइट और नेट लाइब्रेरी को बचाने के लिए एक लैम्ब्डा का उपयोग करता है। इसके अलावा सिर्फ जावा है।

()->{try{for(int i=0;i<3;System.out.println(new java.util.Scanner(new java.net.URL("http://www.medalbot.com/api/v1/medals").openConnection().getInputStream()).useDelimiter("\\A").next().split("\n")[i++*9+3].replaceAll(".* \"|\",","")));}catch(Exception e){}}

यहाँ परीक्षण (और गोल्फिंग) के लिए मेरा (पुराना) POJO है:

class QuickGolf {
  static void f(h x){x.g();}
  static interface h{ void g(); }
  static void main(String[] args){
    f(
      ()->{try{for(int i=0;i<3;i++){System.out.println(new java.util.Scanner(new java.net.URL("http://www.medalbot.com/api/v1/medals").openConnection().getInputStream()).useDelimiter("\\A").next().split("\n")[i*9+3].substring(21).replace("\",",""));}}catch(Exception e){}}
    );
  }
}

अपडेट करें

  • -3 [16-08-17] लूप के लिए प्रिंट स्टेटमेंट को स्थानांतरित करें
  • -5 [16-08-16] बेहतर रेगेक्स की जगह
  • -9 [16-08-16] java.netआयात हटा दिया गया

खें। मुझे कुछ बाइट्स बचाने की जरूरत है ...
डेव

मैं पकड़ रहा हूँ! अब सिर्फ 15 बाइट्स के पीछे!
डेव

खैर, मैं कम से कम कुछ घंटों के लिए आगे था। यह मेरे खिलाफ काम करता है, लेकिन आप शायद लूप काउंट को 3 के बजाय नीचे से गिनकर कुछ और बाइट्स बचा सकते हैं ।
डेव

@ क्या मैंने बूलियन ब्रेक की स्थिति होने की कोशिश की है, iलेकिन जावा बूलियन को इंट या वीज़ा वर्सा में परिवर्तित नहीं करता है, यदि आप यही सोच रहे थे। इसके अलावा, आपने मुझे उस अंतिम संपादन से बहुत परेशान किया था।
नॉनलाइनयरफ्रूट

3

MATL , 67 बाइट्स

'http://www.medalbot.com/api/v1/medals'Xi'(?<="c.+e": ")[^"]+'XX3:)

यह ऑनलाइन काम नहीं करता है क्योंकि फ़ंक्शन Xi(urlread ) अस्वीकृत है।

उदाहरण रन:

>> matl
 > 'http://www.medalbot.com/api/v1/medals'Xi'(?<="c.+e": ")[^"]+'XX3:)
 > 
United States
Great Britain
China

व्याख्या

यह सामग्री को एक स्ट्रिंग के रूप में पढ़ता है और फिर '(?<="c.+e": ")[^"]+'देश के नाम निकालने के लिए रेगेक्स लागू करता है । कोड लंबाई को कम करने के "c.+e"बजाय रेगेक्स लुक-बैक का उपयोग करता है "country_name"

'http://www.medalbot.com/api/v1/medals'   % Push string representing the URL
Xi                                        % Read URL contents as a string
'(?<="c.+e": ")[^"]+'                     % String for regex matching
XX                                        % Apply regex
3:)                                       % Get first 3 results

3

पायथन 3, 202 , 164 बाइट्स।

पायथन 3 शॉर्ट यूआरएल / जसन हैंडलिंग नहीं करता है। : /
एपीआई सोने की गिनती से पहले से ही तरह महसूस नहीं किया था

from urllib.request import*
import json
print('\n'.join(x['country_name']for x in json.loads(urlopen('http://www.medalbot.com/api/v1/medals').read().decode())[:3]))

3

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

from urllib import*
for x in list(urlopen("http://www.medalbot.com/api/v1/medals"))[3:26:9]:
    print x[21:-4]

धन्यवाद @ नाइक टी और @ वाल्यू इंक


1
from urllib import*और urlopenबाद में 1 बाइट बचाकर उपयोग करता है। इसके अलावा, आपको प्रिंट स्टेटमेंट लेने में सक्षम होना चाहिए और इसे बृहदान्त्र के ठीक बाद रखना चाहिए, जिससे आपको इंडेंटेशन से बचाया जा सके।
वैल्यू इंक

1
यदि आप urlopenवस्तु को खिलाते हैं list(), तो क्या यह वही काम करता है .readlines()?
निक टी

3

जावास्क्रिप्ट + jQuery, 114 100 बाइट्स

$.get("www.medalbot.com/api/v1/medals",a=>alert(a[0][c='country_name']+'\n'+a[1][c]+'\n'+a[2][c]))

क्रॉस ओरिजिनल रिक्वेस्ट के कारण से, इसे से चलाया जाना चाहिए medalbot.com डोमेन से (jQuery के साथ) ।

इतिहास

  • -14 बाइट्स @YetiCGN को धन्यवाद
  • -2 बाइट्स Yay295 के लिए धन्यवाद

या {chrome.exe --disable-वेब-सुरक्षा} वेब सुरक्षा के बिना क्रोम चलाने
2b77bee6-5445-4c77-b1eb-4df3e5

1
2 बाइट्स $.get("www.medalbot.com/api/v1/medals",a=>alert(a[0][c='country_name']+'\n'+a[1][c]+'\n'+a[2][c]))
बचाएं

2

रूबी, 97 79 + -rnet/http(11) = 90 बाइट्स

लुइस मेंडो के MATL उत्तर से रेगेक्स पैटर्न के संशोधन का उपयोग करता है , @ जोर्डन द्वारा अनुकूलित, क्योंकि रूबी लुकबाइंड में क्वांटिफायर का समर्थन नहीं करता है।

-18 बाइट @ जोर्डन से।

puts Net::HTTP.get("www.medalbot.com","/api/v1/medals").scan(/"c.+"(.+)"/)[0,3]

आप छोड़ सकते हैं .map(&:last)12 बाइट्स के लिए पूरी तरह से है, और अग्रणी छोड़ /में /apiएक और के लिए।
जॉर्डन

इसके अलावा, एक छोटा रेगेक्स जो ठीक काम करता है:/"cou.+"(.+)"/
जॉर्डन

या: /y_.+"(.+)"/
जॉर्डन

@ जोर्डन /ने मेरे रूबी संस्करण में त्रुटियों का कारण बना। या यह नेटवर्क मैं हो सकता है? जो कुछ। मैं आपके द्वारा सुझाए गए लेकिन उसी लंबाई की तुलना में थोड़ा अलग रेगेक्स के साथ गया था।
स्याही में मूल्य इंक

दिलचस्प। FWIW मैं 2.3.1 का उपयोग कर रहा हूं।
जॉर्डन

2

पॉवरशेल, 60

(iwr medalbot.com/api/v1/medals|convertfrom-json)[0..2]|% c*

टिम्मीड के रूप में एक ही मूल विचार (मेरे पोस्ट करने से पहले उनका उत्तर नहीं देखा), लेकिन काफी छोटा :-)


1
शैतान किस तरह |% c*काम करता है ? मेरा मतलब है, यह करता है, मैंने अभी इसकी कोशिश की, लेकिन यह कुछ अजीब सिंटैक्स है (यह एक त्रुटि के रूप में मेरे आईएसई में भी हाइलाइट करता है)।
AdmBorkBork

1
@TimmyD: foreach-वस्तु एक पैरामीटर सेट है कि एक ही संपत्ति का विस्तार है, या तर्क के साथ एक प्रणाली को बुलाती है: ForEach-Object [-MemberName] <String>-MemberNameपैरामीटर का समर्थन करता है वाइल्डकार्ड, इसलिए इस मामले में वह फैलता केवल सदस्य मिलान कि वाइल्डकार्ड: country_name। काफी कुछ पात्रों को भी बचाता है ;-)
जॉय

2

मैथेमेटिका 96 66 बाइट्स

@alephalpha ने फ़ाइल से सीधे काम करने (इसे सहेजे बिना) करने का एक तरीका ढूंढ लिया, जिससे 30 बाइट्स बच गए!

Import["http://www.medalbot.com/api/v1/medals","RawJSON"][[;;3,2]]

Importकच्चे JSON फ़ाइल के रूप में फ़ाइल आयात करता है। [[;;3,2]]1-3 पंक्तियों को लेता है, दूसरा प्रवेश (देश का नाम)।


Import["http://www.medalbot.com/api/v1/medals","RawJSON"][[;;3,2]]
alephalpha

2

PHP, 205 139 124 116 111 109 बाइट्स

मैं सिर्फ एक बार PHP 7 के लिए नए स्पेसशिप ऑपरेटर का उपयोग करना चाहता था ( EDIT : यह बहुत ही अच्छा है, क्योंकि छंटाई की आवश्यकता नहीं है):

<?$d=json_decode(file_get_contents('http://www.medalbot.com/api/v1/medals'),1);usort($d,function($a,$b){$g='gold_count';return$b[$g]<=>$a[$g];});$c='country_name';foreach([0,1,2]as$i){echo$d[$i][$c]."\n";}

यदि हम अस्वाभाविक छँटाई के चरण को छोड़ देते हैं और मान लेते हैं कि API पहले से ही सॉर्ट किए गए डेटा को Gold_count से उतारा करता है (जैसा कि यह प्रतीत होगा), हम इसे और छोटा कर सकते हैं:

while($i<3)echo json_decode(file_get_contents('http://medalbot.com/api/v1/medals'))[+$i++]->country_name."
";

नोट: स्ट्रिंग के भीतर लाइन ब्रेक \ n से एक बाइट को बचाने के लिए जानबूझकर है

इतिहास

  • Ommitted कुछ उद्धरण और ब्रेसिज़ जो नोटिस फेंक देंगे, ने देश_नाम इंडेक्स के लिए $ c चर को हटा दिया। इन टिप्स के लिए @manatwork को धन्यवाद और भी अधिक पात्रों को बचाने के लिए।
  • लूप करते समय छोटे को इंगित करने के लिए @ जेरोइन के लिए धन्यवाद, 124 से 116 तक जाने के लिए ऑब्जेक्ट एक्सेस पर भी स्विच किया गया
  • पाश के भीतर एपीआई को कॉल करके 5 और बाइट्स को बचाया। दी गई, इसमें लंबा समय लगता है और एपीआई को क्लोब करता है, लेकिन यह कोड गोल्फ है। सरणी dereferencing के कारण काम करने के लिए PHP 5.5 की आवश्यकता है।
  • इस मेटा उत्तर के अनुसार , छोटे खुले टैग को हटाकर 2 और बाइट्स सहेजे गए

धन्यवाद! मैंने बस अन्य सभी प्रविष्टियों को छँटते हुए देखा और सोचा कि मुझे कुछ याद है।
यतिसीजीएन

1
आप एक चर में "देश_नाम" क्यों डाल रहे हैं? और वैसे भी, जैसा कि error_reportingडिफ़ॉल्ट मान नोटिस नहीं दिखाता है, आप दोहरे उद्धरण चिह्नों को छोड़ सकते हैं। और medalbot API www के बिना काम करने लगता है। उपडोमेन भी। फिर आपको आसपास ब्रेस की आवश्यकता नहीं है echo
मैनटवर्क

बहुत बहुत धन्यवाद! खैर, यह देर हो चुकी थी ... $ सी चर पिछले अनुकूलन से एक बचा हुआ है जिसे मैंने लूप के लिए स्विच करने पर फेंक दिया था। मुझे लगता है कि स्वच्छ कोडिंग (नोटिस-फ्री) अभी भी बहुत गहरा है, इसलिए मैं आपके द्वारा बताए गए इन अनुकूलन पर भी विचार नहीं करता हूं। तो, फिर से धन्यवाद!
यतिसीजीएन १६'१६ को N:३N

निम्नलिखित forloop के साथ foreach की जगह: for(;$i<3;)echo$d[+$i++][country_name]." "5 बाइट्स के साथ इसे कम करता है। अंतिम स्थान एक प्रवेश द्वार है। या बस थोड़ी देर के पाश के रूप मेंwhile($i<3)
Jeroen

1

BASH + w3m + कोर बर्तन, 70 बाइट्स

w3m www.medalbot.com/api/v1/medals|grep -m3 tr|cut -f6- -d\ |tr -d \",

ऐसा लगता है कि आउटपुट पहले से ही क्रमबद्ध है। बस सभी अतिरिक्त पाठ को बाहर फेंकने की आवश्यकता है।


1

CJam (57 बाइट्स)

"http://www.medalbot.com/api/v1/medals"gN/3>9%3<{'"/3=N}%

ऑनलाइन डेमो उपलब्ध नहीं है क्योंकि यह वेब से सामग्री प्राप्त करता है। यह वास्तव में JSON को पार्स नहीं करके धोखा देता है, लेकिन यह मानते हुए कि संरचना नहीं बदलेगी। (लेकिन फिर मौजूदा जवाबों के अधिकांश, अलग-अलग तरीकों से करते हैं)।


1

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

from requests import *
for x in get('http://www.medalbot.com/api/v1/medals').json()[:3]:
    print(x['country_name'])

PPCG में आपका स्वागत है! आप लाइन पर औपनिवेशिक के बाद सीधे स्थान को हटाकर importऔर बीच *में स्थानांतरित करके कुछ बाइट्स बचा सकते हैं । हम आम तौर पर अपने हेडर के लिए पहले और बाद की बजाय एस का उपयोग करते हैं। print2#**
NoOneIsHere 22

1
हमें आम तौर पर उत्तर शीर्षक में आवश्यक किसी भी तृतीय-पक्ष लाइब्रेरी को शामिल करने के लिए सबमिटर की आवश्यकता होती है। चूंकि अनुरोध मानक पुस्तकालय मॉड्यूल नहीं है, इसलिए इस उत्तर की भाषा "पायथन 2 + अनुरोध" होनी चाहिए।
मेगो

1

क्लोजर, 122 बाइट्स

(fn[](mapv #(println(%"country_name"))(take 3(read-string(.replace(slurp"http://www.medalbot.com/api/v1/medals")":""")))))

कोई JSON लाइब्रेरी का उपयोग नहीं किया गया :)। URL से स्ट्रिंग पढ़ता है, खाली स्ट्रिंग के साथ कॉलोनों की जगह लेता है और स्ट्रिंग को खाली करता है जिसके परिणामस्वरूप क्लॉज्योर मैप होता है। पहले 3 तत्वों को लेता है और नक्शे को उत्सुकता से कार्य करता है जो country_nameप्रत्येक तत्वों की संपत्ति को प्रिंट करता है।


1

जावा 8 386 384 459 बाइट्स

@Easterly Irk से 2 बाइट बचीं

मेरा पहला कोड गोल्फ सबमिशन तो मुझे यकीन है कि बहुत सारे बाइट्स बचाने का एक तरीका है, लेकिन ओह अच्छा :)

यह JSON पढ़ने के लिए Gson का उपयोग करता है

आवश्यक है:

import java.util.*;
import java.io.*;

गोल्फ कोड:

void p()throws Exception{List<A> a=new com.google.gson.Gson().fromJson(new InputStreamReader((InputStream)((new java.net.URL("http://www.medalbot.com/api/v1/medals").openConnection())).getContent()),new com.google.gson.reflect.TypeToken<List<A>>(){}.getType());a.sort((b,c)->c.gold_count.compareTo(b.gold_count));for(int i=0;i<3;)System.out.println(a.get(i++).country_name);}class A{String country_name;Integer gold_count;}

असिंचित कोड:

void p() throws Exception {
    List<A> a = new com.google.gson.Gson().fromJson(new InputStreamReader((InputStream)((new java.net.URL("http://www.medalbot.com/api/v1/medals").openConnection())).getContent()),new com.google.gson.reflect.TypeToken<List<A>>(){}.getType());
    a.sort((b, c) -> c.gold_count.compareTo(b.gold_count));
    for(int i=0; i<3;)
        System.out.println(a.get(i++).country_name);
}

class A {
    String country_name;
    Integer gold_count;
}

क्या आप "g = new Gson ()" में जगह निकाल सकते हैं?
R

2
रुको, यह importसंकलन करने के लिए कुछ की जरूरत नहीं है ?
डेव

आयात बयानों को बाइट काउंट में जोड़ा जाना चाहिए?
यित्ज़िह

आप आयातों की गणना कैसे करते हैं?
22

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

1

आर, 97 95 बाइट्स

t=rjson::fromJSON(f="http://www.medalbot.com/api/v1/medals")
for(i in 1:3)cat(t[[c(i,2)]],"\n")

उपयोगकर्ता 5957401 के उत्तर पर थोड़ा सुधार, कोई छंटाई की आवश्यकता नहीं है, और छोटे पुस्तकालय का नाम। इसके अलावा गोल्फ में मेरा पहला प्रयास;)


आप कर सकते हैं, हर भाषा में, "www।" यदि आपका पुस्तकालय आगामी रीडायरेक्ट का अनुसरण करता है, तो डोमेन का हिस्सा और 4 और बाइट्स बचाएं।
यतिसीजीएन

1

कोटलिन (स्क्रिप्ट) , 125 121 119 बाइट्स

java.net.URL("http://medalbot.com/api/v1/medals").readText().lines().filter{'m' in it}.take(3).map{println(it.split('"')[3])}

kotlinc -script <filename>* .Kts फ़ाइल के रूप में IDEA के साथ या उसके माध्यम से चलने योग्य।

अब, यदि हम लाइनों की संख्या सहित प्रारूप के बारे में बहुत बड़ी धारणा बनाते हैं, तो हम इसे ट्रिम कर सकते हैं:

java.net.URL("http://medalbot.com/api/v1/medals").readText().lines().slice(setOf(3,12,21)).map{println(it.split('"')[3])}

या और भी

java.net.URL("http://medalbot.com/api/v1/medals").readText().lines().slice(3..21 step 9).map{println(it.split('"')[3])}

कोटलिन सुस्त टीम के लोगों के लिए धन्यवाद, मुझे एक युगल दर्जनों बाइट्स ट्रिम करने में मदद करने के लिए!


क्लोजर और जेएस से कम 3 प्रतीक? मैं वह लूँगा।
साइपरेज़ जे

0

जावास्क्रिप्ट 167 बाइट्स

x=new XMLHttpRequest();x.open("GET","http://www.medalbot.com/api/v1/medals",false);x.send()
i=-3;while(i++)console.log(JSON.parse(x.responseText)[i+2]["country_name"])
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.