Quick Golf: The Gold Leader


18

Sfida

Utilizzando i dati del API qui , in uscita i nomi dei tre paesi con il maggior numero di medaglie d'oro olimpiche ai Giochi Olimpici del 2016 a Rio (cioè il primo elemento della lista restituita).

Ad esempio, al momento della pubblicazione (18:23 UTC + 1, lunedì 15 agosto), gli Stati Uniti, il Regno Unito e la Cina hanno il maggior numero di medaglie d'oro, quindi il risultato sarebbe:

United States
Great Britain
China

I nomi dei paesi devono essere separati da una nuova riga e potresti avere una nuova riga iniziale o finale.

Una volta terminate le Olimpiadi, il programma non deve funzionare come previsto.

Gli accorciatori di URL non sono consentiti ma sono consentite le librerie di analisi JSON.

Questo è il codice golf, quindi vince il codice più breve in byte.

Continuerò a cercare di ottenere una sfida a tema Olimpiadi qui

Classifica


6
Diresti che questo è un ... mini-golf ?
Deusovi,

1
@Deusovi Ba-dum crash
Beta Decay

2
Voglio davvero che qualcuno pubblichi una soluzione Java in modo da poter vedere se la mia soluzione C la batte ...
Dave,

3
"Il Regno Unito ... quindi uscita ... Gran Bretagna"
trichoplax,

1
@Dave NI Gli atleti possono scegliere di rappresentare il Team GB o il Team Ireland. Se gli Atleti NI dovessero unirsi al Team GB, allora sarebbe il Team UK.
SGR,

Risposte:


12

bash + w3m + grep + cut, 65 59 58 54 byte

w3m medalbot.com/api/v1/medals|grep -m3 m|cut -d\" -f4
  • 6 byte in meno grazie ai suggerimenti di @ Joe.
  • 1 byte in meno grazie a @YOU.
  • 4 byte meno grazie alla @manatwork suggerimento s' che l'API medalbot sembra lavoro senza www. anche sottodominio .

2
Passare cut -d '"'a cut -d\"per salvare due byte. Se lo usi w3minvece di curl -ste puoi salvarne altri 4.
Joe,

puoi cambiare _n in m
TU

@YOU: Non proprio perché in questo modo restituirà più righe del previsto, ad esempio "id": "germany", id ":" colombia "ecc.
Master_ex

se non possono essere da 1 a 3 andrà bene, hai -m3 guard.
VOI

1
@YOU: Immagino che questo sia vero per il punteggio attuale e sembra che andrà bene per le Olimpiadi del 2016 (tranne se cambiano gli Stati Uniti in Stati Uniti d'America: P). Lo cambierò.
Master_ex

13

C (+ socket), 433 429 280 276 270 259 byte

#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;}

Quindi si scopre che C non è eccezionale nel scaricare risorse da Internet e analizzarle come JSON. Chi lo sapeva?

Questo codice è (naturalmente) super lassista con il controllo degli errori, quindi immagino che se medalbot.com volesse inviare dati dannosi sarebbero in grado di innescare overflow del buffer, ecc. Anche l'ultimo codice prevede determinati valori per le costanti (ad es. AF_INET = 2) Che sarà probabilmente il caso ovunque, ma non è garantito.

Ecco il codice originale che non è così fragile (ma non è ancora molto robusto o sicuro):

#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);}

Abbattersi:

                            // 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
}

Questo non è molto utile per il server poiché non inviamo Connection: close\r\ncome parte della richiesta HTTP. AcceptOmette anche l' intestazione poiché medalbot.com non sembra utilizzare la compressione in ogni caso e perde lo spazio dopo Host:(di nuovo, il server sembra essere OK con questo). Non sembra che sia possibile rimuovere qualsiasi altra cosa.


Una volta terminate le olimpiadi, il comportamento più probabile per questo programma è quello di segfault nel tentativo di leggere la posizione di memoria 9. A meno che un hacker malvagio prenda il dominio, nel qual caso il comportamento più probabile è quello di impostare un byte su 0 nell'indirizzo strutture informative, che probabilmente non sono troppo pericolose in realtà. Ma chi può dirlo con questi hacker malvagi?


1
Sì, è un parassita con quegli hacker. Buona cosa siamo su un sito web sul quale è improbabile che girare mai fino hacker di ogni tipo ...
cessato di girare counterclockwis

1
È stato un bel salto!
NonlinearFruit

2
@NonlinearFruit sì, è incredibile quanti personaggi possono essere salvati quando fai attenzione al vento e usi i numeri definiti dall'implementazione direttamente nel codice! Questo è diventato un esercizio di "qual è il modo più folle, più pericoloso, più probabile di violare - ma attualmente funzionale - per scaricare il testo in C?"
Dave,

Speriamo solo che i piccoli tavoli Bobby non abbiano parenti in competizione quest'anno.
GuitarPicker,

La leggibilità è anche una delle prime vittime del golf del merluzzo. . .
NonlinearFruit

12

PowerShell v4 +, 88 69 byte

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

Utilizza iwr(l'alias per Invoke-WebRequest) per afferrare l'API. Lo inseriamo come parametro di input ConvertFrom-Jsonnell'integrato che tira il testo JSON in un array di oggetti personalizzato. Incapsuliamo quell'array di oggetti in parentesi, prendiamo i primi tre elementi [0..2]e prendiamo .country_nameciascuno di essi.

Richiede almeno v4 + per le proprietà multi-oggetto, altrimenti dovremmo usare qualcosa di simile |Select "country_name". Richiede almeno v3 + per il ConvertFrom-Jsonbuilt-in.

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

Puoi rilasciarlo http://www.e a PS non importa http://o al sito www.. Anche il mio PS (5.1.14393) sembra non preoccuparsene .content.
Nick T

@NickT Grazie per il golf. Non mi rendevo conto che ConvertFrom-Jsonnon era esplicitamente necessario solo la .contentparte della richiesta Web, ma funziona anche sulla mia configurazione.
AdmBorkBork,

6

R, 98, 112 , 108 byte

golfed 4 grazie a @miff

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

La prima riga importa i dati utilizzando una libreria JSON. La seconda riga prende i nomi dei paesi rilevanti. Ordina i paesi per medaglie d'oro in ordine crescente, inverte gli indici e prende i primi 3, stampandoli.


1
Penso che è possibile sostituire rev(order(a$g))con order(-a$g)per salvare 4 byte
Miff

5

JavaScript (ES6), 122 byte

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

A causa di un problema di sicurezza del browser , questo codice deve essere eseguito medalbot.com. Tuttavia non ne approfitta e potrebbe essere eseguito altrove. Nota anche che ho inserito il \npersonaggio, ma sto contando solo come uno, perché potrei sostituirlo con uno

Node.js (ES6), 173 byte

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

Questo sarebbe stato molto più breve se l'API avesse restituito i dati tutti in un tratto, ma poiché ritorna in due sezioni, devo concatenare le parti e combinarle, quindi analizzarle.

Node.js (ES6) + Richiesta, 138 byte

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

Meglio, ma non ancora buono come la versione del browser. Grazie recuperare l'API! Request è una popolare libreria client HTTP utilizzata per semplificare le richieste e puoi vedere che ha effetto qui.


Quale di questi funziona in qualsiasi browser? Puoi mettere il più corto di quelli in cima alla tua risposta (per la classifica)
Decadimento beta

Il primo di questi funziona nella maggior parte dei browser moderni ed è anche il più breve. Gli altri due sono in Node.js un modo per scrivere JavaScript sul server (oltre ad altre cose).
MayorMonty,

@ βετѧΛєҫαγ Prendi nota che non funziona in nessuna versione di IE o Safari
MayorMonty

Vedo, mi stavo bloccando il problema CORS
Decadimento beta

4

bash + w3m + jq ,83 59 byte

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

Grazie alla Giordania per tre byte.

Grazie a TE per altri 24 byte! Si scopre che i dati sono ordinati. Wow. : D


1
Puoi omettere .|e indicizzare il risultato sort_bydirettamente e puoi salvare un altro byte usando [:3][]invece di [0,1,2]. Tutti insieme: sort_by(-.gold_count)[:3][].country_name.
Giordania,

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

4

Java 8, 261 258 byte

Questo utilizza un lambda per salvare un paio di byte e la libreria di rete per ottenere la pagina web. Oltre a questo è solo Java.

()->{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){}}

Ecco il mio (vecchio) POJO per i test (e il golf):

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){}}
    );
  }
}

Aggiornare

  • -3 [16-08-17] Sposta l'istruzione di stampa in for loop
  • -5 [16-08-16] Sostituzione regex migliorata
  • -9 [16-08-16] java.netImportazione rimossa

Eep. Devo salvare alcuni byte ...
Dave,

Sto recuperando! Ora solo 15 byte dietro!
Dave,

Beh, sono stato avanti per alcune ore almeno. Funziona contro di me, ma probabilmente puoi salvare qualche altro byte avendo il conto alla rovescia da 3 invece che su.
Dave,

@Dave Ho provato ad avere la condizione di pausa booleana ima Java non converte il booleano in int o viceversa, se era quello che stavi pensando. Inoltre mi hai reso piuttosto nervoso con l'ultima modifica.
NonlinearFruit

3

MATL , 67 byte

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

Questo non funziona online perché function Xi( urlread) non è consentito.

Esempio di esecuzione:

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

Spiegazione

Questo legge il contenuto come una stringa e quindi applica la regex '(?<="c.+e": ")[^"]+'per estrarre i nomi dei paesi. Regex usa look-behind con "c.+e"invece di "country_name"ridurre la lunghezza del codice.

'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

Python 3, 202 , 164 byte.

Python 3 non gestisce brevemente url / json. : /
Non ho realizzato che l'API ordina già in base al conteggio dell'oro

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

Python 2, 120 113 byte

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

Grazie @Nick T e @Value Ink


1
from urllib import*e usando subito urlopendopo salva 1 byte. Inoltre, dovresti essere in grado di prendere l'istruzione print e inserirla subito dopo i due punti, salvandoti dal rientro.
Valore inchiostro

1
Se si alimenta l' urlopenoggetto list(), fa la stessa cosa di .readlines()?
Nick T

3

JavaScript + jQuery, 114 100 byte

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

Per il motivo delle richieste di origine incrociata, questo deve essere eseguito dal medalbot.comdominio (con jQuery).

Storia

  • -14 byte grazie a @YetiCGN
  • -2 byte grazie a Yay295

O esegui chrome senza sicurezza web {chrome.exe --disable-web-security}
2b77bee6-5445-4c77-b1eb-4df3e5

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

2

Rubino, 97 79 + -rnet/http(11) = 90 byte

Utilizza una modifica del modello regex dalla risposta MATL di Luis Mendo , ulteriormente ottimizzata da @Jordan, poiché Ruby non supporta quantificatori nei lookbehinds.

-18 byte da @Jordan.

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

È possibile omettere .map(&:last)interamente per 12 byte, e omettere il leader /in /apiper un altro.
Giordania,

Inoltre, una regex più corta che sembra funzionare bene:/"cou.+"(.+)"/
Giordania,

Oppure: /y_.+"(.+)"/.
Giordania,

@Jordan omettendo il principale /causa errori nella mia versione di Ruby. O potrebbe essere la rete in cui mi trovo? Qualunque cosa. Sono andato con una regex leggermente diversa da quella che hai suggerito ma della stessa lunghezza.
Valore inchiostro

Interessante. FWIW sto usando 2.3.1.
Giordania,

2

PowerShell, 60

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

Stessa idea di base di TimmyD (non ho visto la loro risposta prima che io inserissi), ma un po 'più breve :-)


1
Come funziona il diavolo quel |% c*parsing? Voglio dire, sì, l'ho appena provato, ma questa è una strana sintassi (evidenzia anche un errore nel mio ISE).
AdmBorkBork,

1
@TimmyD: ForEach-Object ha un insieme di parametri che si espande una singola proprietà o chiama un metodo con argomenti ForEach-Object [-MemberName] <String>. I -MemberNamesupporti dei parametri wildcards, quindi in questo caso si espande l'unico corrispondente elemento che jolly: country_name. Salva anche parecchi personaggi ;-)
Joey

2

Mathematica 96 66 byte

@alephalpha ha trovato il modo di lavorare direttamente dal file (senza salvarlo), risparmiando così 30 byte!

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

Importimporta il file come file JSON non elaborato. [[;;3,2]]accetta le righe 1-3, seconda voce (nome del paese).


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

2

PHP, 205 139 124 116 111 109 byte

Volevo solo usare il nuovo operatore di astronave per PHP 7 una volta ( EDIT : è superfluo, poiché non è necessario l'ordinamento):

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

Se omettiamo il passaggio di ordinamento non necessario e ipotizziamo che l'API fornisca i dati già ordinati in ordine decrescente di gold_count (come sembrerebbe), possiamo accorciare ulteriormente questo:

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

Nota: l'interruzione di riga all'interno della stringa è intenzionale per salvare un byte da \ n

Storia

  • Eliminate alcune virgolette e parentesi graffe che genereranno avvisi, rimossa la variabile $ c per l'indice country_name. Grazie a @manatwork per questi suggerimenti per salvare ancora più personaggi.
  • Grazie a @jeroen per aver sottolineato il ciclo while più breve, è anche passato all'accesso agli oggetti per passare da 124 a 116
  • Hai salvato altri 5 byte chiamando l'API all'interno del ciclo. Certo, ci vuole più tempo e blocca l'API, ma è Code Golf. Richiede PHP 5.5 per funzionare a causa della dereferenziazione dell'array.
  • Hai salvato altri 2 byte rimuovendo il tag aperto breve, come da questa meta risposta

Grazie! Ho appena visto tutte le altre voci in ordine e ho pensato che mi mancava qualcosa.
YetiCGN,

1
Perché stai inserendo "country_name" in una variabile? E comunque, poiché error_reportingil valore predefinito non visualizza le notifiche, puoi omettere le doppie virgolette. E l'API medalbot sembra funzionare senza www. anche sottodominio. Quindi non hai bisogno delle parentesi graffe in giro echo.
arte

Grazie mille! Bene, era tardi ... La variabile $ c è un residuo di una precedente ottimizzazione che ho buttato via quando sono passato al ciclo for. Immagino che la codifica pulita (senza preavviso) sia ancora troppo radicata, quindi non considero nemmeno queste ottimizzazioni che hai sottolineato. Grazie ancora!
YetiCGN,

sostituendo il foreach con il seguente forloop: lo for(;$i<3;)echo$d[+$i++][country_name]." "riduce con 5 byte. L'ultimo spazio è un entercourse. O semplicemente come un ciclowhile($i<3)
Jeroen

1

BASH + w3m + programmi di utilità principali, 70 byte

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

Sembra che l'output sia già ordinato. Devo solo buttare via tutto il testo extra.


1

CJam (57 byte)

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

Demo online non disponibile perché recupera contenuti dal Web. Questo inganna non analizzando JSON, ma presupponendo che la struttura non cambierà. (Ma allora anche la maggior parte delle risposte esistenti, in diversi modi).


1

Python 2, 117 byte

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

Benvenuti in PPCG! È possibile salvare alcuni byte rimuovendo lo spazio tra importe *e spostando il simbolo printdirettamente dopo i due punti in linea 2. Generalmente usiamo #s anziché **prima e dopo per le nostre intestazioni.
NoOneIsHere

1
In genere richiediamo ai mittenti di includere le librerie di terze parti richieste nell'intestazione della risposta. Poiché le richieste non sono un modulo di libreria standard, il linguaggio di questa risposta dovrebbe essere "Richieste Python 2 +".
Mego

1

Clojure, 122 byte

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

Nessuna libreria JSON utilizzata :). Legge la stringa dall'URL, sostituisce i due punti con una stringa vuota ed elimina la stringa risultante nella mappa Clojure. Prende i primi 3 elementi e le mappe fervono funzione che stampa la country_nameproprietà di ogni elemento.


1

Java 8 386 384 459 byte

2 byte salvati da @Easterly Irk

Il mio primo invio di golf in codice quindi sono sicuro che c'è un modo per salvare un sacco di byte, ma vabbè :)

Usa Gson per leggere il JSON

Richiede:

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

Codice golfizzato:

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;}

Codice Ungolfed:

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;
}

Puoi rimuovere lo spazio in "g = new Gson ()"?
Rɪᴋᴇʀ

2
Aspetta, non è necessario importcompilare qualche s?
Dave,

le dichiarazioni di importazione devono essere aggiunte al conteggio dei byte?
yitzih,

come si calcolano le importazioni?
yitzih,

Non so quali siano le regole esatte per Java, dal momento che non ne ho mai pubblicato uno qui prima, ma la regola abituale è che devi contare tutto ciò che è necessario per rendere valido il codice (e dal cercare rapidamente i suggerimenti Java pagina Vedo vari suggerimenti su come ridurre al minimo il codice di importazione, quindi immagino che debba essere contato). Ma ancora una volta, sto anche cercando di ottenere la mia risposta C per vincere contro Java in questa domanda, quindi sono piuttosto parziale: D
Dave

1

R, 97 95 byte

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

Poco miglioramento rispetto alla risposta dell'utente 5957401, nessun ordinamento richiesto e nome della biblioteca più breve. Anche il mio primo tentativo di giocare a golf;)


Puoi, come in ogni lingua, omettere il "www". parte del dominio e salva altri 4 byte se la tua libreria segue il reindirizzamento successivo.
YetiCGN,

1

Kotlin (Script) , 125 121 119 byte

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

Eseguibile con kotlinc -script <filename>o tramite IDEA come file * .kts.

ora, se facciamo un presupposto MOLTO grande sul formato, compresi i numeri di linee, possiamo tagliarlo a:

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

o anche

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

Grazie alla gente del team di Kotlin per avermi aiutato a tagliare un paio di dozzine di byte!


3 simboli più brevi di Clojure e JS? Lo prenderò.
CypherAJ,

0

Javascript 167 byte

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"])
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.