কুইক গল্ফ: দ্য সোনার লিডার


18

চ্যালেঞ্জ

API থেকে তথ্য ব্যবহার করে এখানে , আউটপুট 2016 রিও অলিম্পিকে গেমসে সবচেয়ে অলিম্পিক স্বর্ণপদক সঙ্গে তিনটি দেশের নাম (যেমন ফিরে তালিকার প্রথম উপাদান)।

উদাহরণস্বরূপ, পোস্ট করার সময় (18:23 ইউটিসি + 1, সোমবার, 15 আগস্ট), মার্কিন যুক্তরাষ্ট্র, যুক্তরাজ্য এবং চীন সর্বাধিক স্বর্ণপদক রয়েছে, সুতরাং আউটপুটটি হবে:

United States
Great Britain
China

দেশের নামগুলি অবশ্যই নিউলাইন দ্বারা পৃথক করা উচিত এবং আপনার কাছে একটি শীর্ষস্থানীয় বা অনুবর্তনযোগ্য নিউলাইন থাকতে পারে।

অলিম্পিক শেষ হয়ে গেলে, প্রোগ্রামটি আশানুরূপ কাজ করতে হবে না।

ইউআরএল সংক্ষিপ্তকরণগুলি অনুমোদিত নয় তবে জেএসএন পার্সিং লাইব্রেরি অনুমোদিত allowed

এটি কোড গল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

আমি এখানে একটি অলিম্পিক থিমযুক্ত চ্যালেঞ্জ পাওয়ার চেষ্টা চালিয়ে যাচ্ছি

লিডারবোর্ড


6
আপনি কি বলবেন যে এটি ... মিনি-গল্ফ ?
দেউসোভি

1
@ দেউসোভি বা-ডাম ক্র্যাশ
বিটা

2
আমি সত্যিই চাই যে কেউ জাভা সমাধান পোস্ট করতে পারে যাতে আমি দেখতে পাই যে আমার সি সমাধানটি এটি মারছে কিনা…
ডেভ

3
"যুক্তরাজ্য ... তাই আউটপুট ... গ্রেট ব্রিটেন"
ট্রাইকোপলাক্স

1
@ ডেভ এনআই অ্যাথলেটরা টিম জিবি বা টিম আয়ারল্যান্ডের প্রতিনিধিত্ব করতে বেছে নিতে পারে। যদি এনআই অ্যাথলিটদের টিম জিবিতে যোগ দেওয়ার প্রয়োজন হয় তবে তা টিম ইউকে হবে।
এসজিআর

উত্তর:


12

বাশ + ডাব্লু 3 এম + গ্রেপ + কাট, 65 59 58 54 বাইট

w3m medalbot.com/api/v1/medals|grep -m3 m|cut -d\" -f4
  • @ জো এর পরামর্শের জন্য 6 বাইট কম ধন্যবাদ
  • 1 টি বাইট কম ধন্যবাদ আপনাকে
  • 4 বাইট কম মানিয়েছে @ ম্যানটওয়ার্কের পরামর্শের জন্য যে মেডেলবট এপিআই www ছাড়াই কাজ করে বলে মনে হচ্ছে। সাবডোমেনও

2
দুটি বাইট সংরক্ষণ cut -d '"'করতে পরিবর্তন করুন cut -d\"। আপনি যদি এর w3mপরিবর্তে ব্যবহার করেন তবে curl -sআরও 4 টি সঞ্চয় করতে পারবেন।
জো

আপনি _n কে এম তে পরিবর্তন করতে পারবেন
আপনি

@YOU: তা নয়, কারণ যে ভাবে এটি আরো লাইন ফিরে আসবেন প্রত্যাশিত সময়ের চেয়ে বেশি, মানে ওই "ID": "জার্মানি", ID ":" কলোমবিয়া "ইত্যাদি
Master_ex

যদি তারা 1 থেকে তৃতীয় হতে পারে না তবে এটি ঠিক থাকবে, আপনার কাছে -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 হিসাবে বিশ্লেষণে দুর্দান্ত নয়। কে জানত?

এই কোডটি ত্রুটিযুক্ত যাচাইয়ের সাথে (স্বাভাবিকভাবেই) সুপার ল্যাক্স, সুতরাং আমি অনুমান করি যে মেডেলবট ডট কম যদি দূষিত ডেটা প্রেরণ করতে চায় তবে তারা বাফার ওভারফ্লোগুলি ট্রিগার করতে সক্ষম হতে পারে ইত্যাদি। এছাড়াও সর্বশেষতম কোডটি ধ্রুবকগুলির জন্য নির্দিষ্ট মানগুলির প্রত্যাশা করে (উদাহরণস্বরূপ 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\nএইচটিটিপি অনুরোধের অংশ হিসাবে প্রেরণ করি না । এটি Acceptশিরোনামটিও বাদ দেয় যেহেতু মেডেলবট ডট কম কোনও ক্ষেত্রে সংকোচনের ব্যবহার করে না বলে মনে হয় এবং পরে স্থানটি মিস করে Host:(আবার, সার্ভারটি এটির সাথে ঠিক আছে বলে মনে হয়)। যদিও অন্য কিছু সরানো যেতে পারে বলে মনে হচ্ছে না।


অলিম্পিকস শেষ হয়ে গেলে, এই প্রোগ্রামটির সর্বাধিক সম্ভাবনাময় আচরণটি মেমরির অবস্থানটি পড়ার চেষ্টা করা সেগফোল্ট 9. তথ্য স্ট্রাক্ট যা সম্ভবত খুব বিপজ্জনক নয়। কিন্তু এই দুষ্ট হ্যাকারদের সাথে কে বলতে পারে?


1
হ্যাঁ, এটি হ্যাকারগুলির সাথে একটি কীটপতঙ্গ। ভাল কথা আমরা এমন একটি ওয়েবসাইটে রয়েছি যার উপর কোনও ধরণের হ্যাকাররা আর কখনও ঘুরে দাঁড়ানোর সম্ভাবনা নেই ...
কাউন্টারের

1
বেশ লিপ ছিল!
ননলাইনফর্ট

2
@ ননলাইনারফ্রুট হ্যাঁ আশ্চর্যজনক যে আপনি যখন বাতাসের দিকে সাবধানতা অবলম্বন করেন এবং সরাসরি কোডে প্রয়োগ-সংজ্ঞায়িত সংখ্যাগুলি ব্যবহার করেন তখন কতগুলি অক্ষর সংরক্ষণ করা যায়! এটি "ক্রেজিস্ট, সর্বাধিক বিপজ্জনক, সম্ভবত ভাঙ্গার সম্ভবত - তবে বর্তমানে কার্যকরী - সিটিতে পাঠ্য ডাউনলোড করার উপায়" এ অনুশীলনে পরিণত হয়েছে?
ডেভ

আসুন আমরা কেবল আশা করি যে ছোট ববি টেবিলের কোনও আত্মীয় এই বছর প্রতিযোগিতা করবে না।
গিটারপিকারটি

পঠনযোগ্যতা কড গল্ফের প্রথম হতাহতের মধ্যে একটি। । ।
ননলাইনফ্রুট 21

12

পাওয়ারশেল v4 +, 88 69 বাইট

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

এপিআই দখল করতে iwr(উপনামের জন্য Invoke-WebRequest) ব্যবহার করে। আমরা ConvertFrom-Jsonঅন্তর্নির্মিত ইনপুট প্যারামিটার হিসাবে এটি ফিড করি যা JSON পাঠ্যকে একটি কাস্টম অবজেক্ট অ্যারেতে টানছে। আমরা সেই অবজেক্ট অ্যারেটিকে প্যারেন্সে আবদ্ধ করি, প্রথম তিনটি উপাদান নিয়ে যাই [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.এবং পিএস সম্পর্কে http://বা সাইটের কোনও বিষয়ে আপত্তি নেই www.। আমার পিএস (5.1.14393) এমনকি এটিকেও যত্ন করে বলে মনে হচ্ছে না .content
নিক টি

@ নিকটি গল্ফদের জন্য ধন্যবাদ আমি বুঝতে পারিনি যে ConvertFrom-Jsonস্পষ্টভাবে কেবল .contentওয়েব অনুরোধের অংশের প্রয়োজন নেই , তবে এটি আমার সেটআপেও কাজ করে।
অ্যাডমবর্কবর্ক

6

আর, 98, 112 , 108 বাইট

গল্ফ করেছেন ৪ টি @ মিফকে ধন্যবাদ

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

প্রথম লাইন একটি JSON লাইব্রেরি ব্যবহার করে ডেটা আমদানি করে। দ্বিতীয় লাইনে প্রাসঙ্গিক দেশের নাম ধরে ফেলে। এটি ক্রমবর্ধমান ক্রমে স্বর্ণপদক দ্বারা দেশগুলিকে বাছাই করে, সূচকে উল্টো করে দেয় এবং প্রথমটি ছিনিয়ে নেয় printing


1
আমি মনে করি আপনি 4 টি বাইট সংরক্ষণের rev(order(a$g))সাথে প্রতিস্থাপন করতে পারবেনorder(-a$g)
মিফ

5

জাভাস্ক্রিপ্ট (ES6), 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চরিত্রটি serted োকিয়েছি, তবে আমি কেবল একটি হিসাবে গণনা করছি কারণ আমি এটির সাথে একটিটি প্রতিস্থাপন করতে পারি

নোড.জেএস (ইএস 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`)))

এটি এত সংক্ষিপ্ত হয়ে যেত যদি API সমস্ত তথ্য প্রসারিত করে সমস্ত প্রসারিত করে, তবে যেহেতু এটি দুটি বিভাগে ফিরে আসে, আমি অবশ্যই সেই অংশগুলি একত্রিত করে সেগুলি একত্রিত করে তারপরে পার্স করব।

নোড.জেএস (ইএস 6) + অনুরোধ, 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 সার্ভার (প্লাস অন্যান্য জিনিস) জাভাস্ক্রিপ্ট লেখার উপায়।
মেয়রমন্টি

@ note নোট করুন যে এটি 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){}}

পরীক্ষার (এবং গল্ফিং) জন্য এখানে আমার (পুরানো) পোজো রয়েছে:

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] উন্নত regex প্রতিস্থাপন
  • -9 [16-08-16] java.netআমদানি সরানো হয়েছে

EEP। আমাকে কিছু বাইট সংরক্ষণ করতে হবে ...
ডেভ

আমি ধরছি! এখন পিছনে মাত্র 15 বাইট!
ডেভ

ঠিক আছে, আমি কমপক্ষে কয়েক ঘন্টা এগিয়ে ছিলাম। এটি আমার বিরুদ্ধে কাজ করে তবে আপনি সম্ভবত আরও কিছু বাইট সংরক্ষণ করতে পারবেন লুপটি গণনা করে আপের পরিবর্তে 3 থেকে নামিয়ে আনতে
ডেভ

@ ডেভ আমি বুলিয়ান ব্রেকের অবস্থা ঠিক থাকার চেষ্টা করেছি iতবে জাভা বুলিয়ানকে ইনট বা ভিসার বিপরীতে রূপান্তরিত করে না, যদি আপনি যা ভেবেছিলেন এটিই ছিল। এছাড়াও আপনি শেষ সম্পাদনাটি সম্পর্কে আমাকে বেশ নার্ভাস করেছিলেন।
ননলাইনফর্ট

3

এমএটিএল , 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 সংক্ষিপ্ত url / json হ্যান্ডলিং করে না। : /
সোনার গণনা অনুসারে এপিআই ইতিমধ্যে সাজানো বুঝতে পারে নি

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 সহ)।

ইতিহাস

  • -১৪ বাইটস @ ইয়েটিসিজিএন-কে ধন্যবাদ
  • -2 বাইট Yay295 ধন্যবাদ

বা ওয়েব সুরক্ষা ছাড়াই ক্রোম চালান {chrome.exe
অক্ষম-

1
2 বাইট সংরক্ষণ করুন$.get("www.medalbot.com/api/v1/medals",a=>alert(a[0][c='country_name']+'\n'+a[1][c]+'\n'+a[2][c]))
Yay295

2

রুবি, 97 79 + -rnet/http(11) = 90 বাইট

লুই মেন্ডোর এমএটিএল উত্তর থেকে রেজেক্স প্যাটার্নের একটি পরিবর্তন ব্যবহার করে , @ জর্ডান আরও অনুকূলিত করেছেন, যেহেতু রুবি লুকবাইন্ডগুলিতে কোয়ান্টিফায়ার সমর্থন করে না।

@ জর্ডান থেকে -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 ব্যবহার করছি I'm
জর্দান

2

পাওয়ারশেল, 60

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

টিমমিড হিসাবে একই প্রাথমিক ধারণা (আমি পোস্ট করার আগে তাদের উত্তর দেখেনি), তবে কিছুটা খাটো :-)


1
শয়তান কীভাবে |% c*পার্সিংয়ের কাজ করে? আমার অর্থ, এটি রয়েছে, আমি এটি চেষ্টা করেছি, তবে এটি কিছু অদ্ভুত বাক্য গঠন (এটি আমার আইএসইতে ত্রুটি হিসাবেও হাইলাইট করে)।
অ্যাডমবর্কবার্ক

1
@TimmyD: foreach-বস্তুর একটি প্যারামিটার সেট একটি একক সম্পত্তি বিস্তৃতি আছে, অথবা আর্গুমেন্ট সহ একটি পদ্ধতি আহ্বান: ForEach-Object [-MemberName] <String>-MemberNameপ্যারামিটার সমর্থন ওয়াইল্ডকার্ড, তাই এই ক্ষেত্রে এটি বিস্তৃতি একমাত্র সদস্য মিলে যাওয়া যে ওয়াইল্ডকার্ড: country_name। বেশ কয়েকটি চরিত্রও সংরক্ষণ করে ;-)
জোয়

2

গণিত 96 বাইট

@ এলফাল্ফা ফাইল থেকে সরাসরি কাজ করার একটি উপায় খুঁজে পেয়েছে (এটি সংরক্ষণ না করে), যার ফলে 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]]
আলেফাল্ফ

2

পিএইচপি, 205 139 124 116 111 109 বাইট

আমি কেবল নতুন পিএইচপি 7 এর জন্য নতুন স্পেসশিপ অপারেটরটি একবার ব্যবহার করতে চেয়েছিলাম ( সম্পাদনা : এটি অতিমাত্রায়, কারণ বাছাইয়ের প্রয়োজন নেই):

<?$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";}

যদি আমরা অযৌক্তিক বাছাইকরণ পদক্ষেপটি বাদ দিই এবং ধরে নিই যে এপিআই ইতিমধ্যে সোনার_কাউন্টের উত্থানের মাধ্যমে সাজানো ডেটা সরবরাহ করে (এটি যেমন মনে হবে), আমরা এটি আরও ছোট করে তুলতে পারি:

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

দ্রষ্টব্য: স্ট্রিংয়ের মধ্যে লাইন বিরতি \ n থেকে বাইট সংরক্ষণ করতে ইচ্ছাকৃত

ইতিহাস

  • কিছু উদ্ধৃতি এবং ধনুর্বন্ধনী যা বিজ্ঞপ্তি নিক্ষেপ করবে, দেশ_দেশ সূচকের জন্য $ সি ভেরিয়েবল সরিয়ে দিয়েছে। এই টিপ্পস আরও আরও অক্ষর সংরক্ষণ করার জন্য @ মান্যাটওয়ার্ক ধন্যবাদ।
  • লুপের সময় সংক্ষিপ্ত চিত্রটি দেখানোর জন্য @ জিরোইনকে ধন্যবাদ, এছাড়াও 124 থেকে 116 এ যাওয়ার জন্য অবজেক্ট অ্যাক্সেসে স্যুইচ করা হয়েছে
  • লুপের মধ্যে এপিআই কল করে আরও 5 টি বাইট সংরক্ষণ করা হয়েছে। মঞ্জুর, এটি বেশি সময় নেয় এবং এপিআইকে ক্লোবার দেয় তবে এটি কোড গল্ফ। অ্যারে ডেরেফারেন্সের কারণে পিএইচপি 5.5 এর কাজ করতে হবে।
  • এই মেটা উত্তর অনুসারে সংক্ষিপ্ত ওপেন ট্যাগটি সরিয়ে আরও 2 বাইট সংরক্ষণ করা হয়েছে

ধন্যবাদ! আমি কেবলমাত্র অন্যান্য সমস্ত এন্ট্রি বাছাই করতে দেখেছি এবং ভেবেছিলাম যে আমি কিছু মিস করেছি।
ইয়েটিজিএনএন

1
আপনি কেন একটি ভেরিয়েবলের মধ্যে "দেশ_নাম" রাখছেন? এবং যাইহোক, error_reportingডিফল্ট মান হিসাবে বিজ্ঞপ্তি প্রদর্শন করে না, আপনি ডাবল উদ্ধৃতি বাদ দিতে পারেন। এবং মেডেলবট এপিআই মনে হয় www ছাড়াই কাজ করে। সাবডোমেনও। তাহলে আপনার চারদিকে ধনুর্বন্ধনী প্রয়োজন হবে না echo
manatwork

একটি গুচ্ছ ধন্যবাদ! ঠিক আছে, দেরি হয়ে গেছে ... $ সি ভেরিয়েবলটি পূর্বের অপ্টিমাইজেশনের একটি বাকী অংশ যা আমি ফেলেছিলাম যখন আমি লুপের জন্য স্যুইচ করেছিলাম। আমার ধারণা, ক্লিন কোডিং (নোটিশ-মুক্ত) এখনও খুব গভীরভাবে অন্তর্নিবিষ্ট রয়েছে সুতরাং আমি আপনার এই অপটিমাইজেশনের বিষয়টি বিবেচনা করি না। সুতরাং, আবার ধন্যবাদ!
ইয়েটিসিজিএন

ফোরচকে নিম্নলিখিত ফোরলুপের সাথে প্রতিস্থাপন: for(;$i<3;)echo$d[+$i++][country_name]." "এটি 5 বাইটের সাহায্যে হ্রাস করে। শেষ স্থানটি enterোকা অফকোর্স। বা ঠিক কিছুক্ষণের মতো লুপwhile($i<3)
জেরোইন

1

BASH + w3m + কোর ইউটিস, 70 বাইট

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

দেখে মনে হচ্ছে আউটপুটটি ইতিমধ্যে সাজানো হয়েছে। কেবল অতিরিক্ত সমস্ত পাঠ্য ফেলে দেওয়া দরকার।


1

সিজেএম (57 বাইট)

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

অনলাইন ডেমো উপলভ্য নয় কারণ এটি ওয়েব থেকে সামগ্রী নিয়ে আসে। এই জেএসএনকে প্রকৃতপক্ষে পার্স না করে এই চিট করে, তবে ধরে নিই যে কাঠামোটি পরিবর্তন হবে না। (তবে তবে বিদ্যমান উত্তরগুলির বেশিরভাগটি বিভিন্ন উপায়ে করুন)।


1

পাইথন 2, 117 বাইট

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

পিপিসিজিতে আপনাকে স্বাগতম! আপনি importএবং এর মধ্যবর্তী স্থানটি সরিয়ে *এবং printলাইনে সরাসরি কোলনের পরে সরাসরি স্থানান্তরিত করে কয়েকটি বাইট সংরক্ষণ করতে পারেন 2। আমরা সাধারণত আমাদের শিরোনামগুলির আগে এবং পরে #এর পরিবর্তে গুলি ব্যবহার করি **
NoOneIsHere

1
আমাদের সাধারণত উত্তর শিরোনামে প্রয়োজনীয় কোনও তৃতীয় পক্ষের লাইব্রেরি অন্তর্ভুক্ত করার জন্য সাবমিটারদের প্রয়োজন। যেহেতু অনুরোধগুলি কোনও মানক গ্রন্থাগার মডিউল নয়, তাই এই উত্তরের ভাষাটি "পাইথন 2 + অনুরোধগুলি" হওয়া উচিত।
মেগো

1

ক্লোজার, 122 বাইট

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

কোনও জেএসএন লাইব্রেরি ব্যবহৃত হয়নি :) :) ইউআরএল থেকে স্ট্রিং পড়েন, খালি স্ট্রিংয়ের সাথে কলোনগুলি প্রতিস্থাপন করে এবং স্ট্রিংটি ক্লোজার ম্যাপে ফলাফল দেয়। প্রথম 3 টি উপাদান এবং মানচিত্র আগ্রহীভাবে কাজ করে যা country_nameপ্রতিটি উপাদানগুলির সম্পত্তি মুদ্রণ করে।


1

জাভা 8 386 384 459 বাইট

@ ইস্টারলি ইর্ক থেকে 2 বাইট সংরক্ষণ করা হয়েছে

আমার প্রথম কোড গল্ফ জমা দেওয়া যাতে আমি নিশ্চিত যে প্রচুর বাইট সংরক্ষণ করার উপায় আছে তবে ওহ ভাল :)

এটি জাসনটি পড়তে জিসন ব্যবহার করে

প্রয়োজন:

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 = নতুন জিসন ()" এর স্থানটি সরাতে পারবেন?

2
অপেক্ষা করুন, importসংকলন করার জন্য এটির কি কিছু দরকার নেই ?
ডেভ

আমদানির বিবৃতিগুলি বাইট কাউন্টে যুক্ত করা দরকার?
yitzih

আপনি কীভাবে আমদানি গণনা করবেন?
yitzih

জাভা সম্পর্কে সঠিক বিধিগুলি কী তা জানেন না, যেহেতু আমি এখানে আগে কোনও পোস্ট করি নি, তবে সাধারণ নিয়মটি হ'ল কোডটি বৈধ করার জন্য যা প্রয়োজন তা আপনাকে গণনা করতে হবে (এবং দ্রুত জাভা ইঙ্গিতগুলি সন্ধান করা থেকে) পৃষ্ঠাটি কীভাবে আমদানি কোডটি ন্যূনতম করা যায় সে সম্পর্কে আমি বিভিন্ন পরামর্শ দেখতে পাচ্ছি, সুতরাং আমার ধারণা এটি অবশ্যই গণনা করা উচিত)। তবে আবারও, আমি এই প্রশ্নে জাভার বিপক্ষে জিততে আমার সি উত্তর পাওয়ার চেষ্টা করছি, তাই আমি বেশ পক্ষপাতদুষ্ট: ডি
ডেভ

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")

ব্যবহারকারীর 9557401 এর উত্তরের চেয়ে সামান্য উন্নতি, কোনও বাছাইকরণের প্রয়োজন নেই এবং লাইব্রেরির সংক্ষিপ্ত নাম। গল্ফ করার আমার প্রথম প্রচেষ্টা;)


আপনি, প্রতিটি ভাষার মতো, "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 ফাইল হিসাবে আইডিইএর সাথে বা এর মাধ্যমে চলমান।

এখন, যদি আমরা সংখ্যার লাইনের সংখ্যাসহ বিন্যাস সম্পর্কে খুব বড় ধারণা তৈরি করি তবে আমরা এটিকে ছাঁটাই করতে পারি:

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"])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.