Come tutti sappiamo, il meta è pieno di lamentele sul punteggio del code-golf tra le lingue (sì, ogni parola è un collegamento separato, e questi possono essere solo la punta dell'iceberg).
Con così tanta gelosia nei confronti di coloro che si sono davvero preoccupati di consultare la documentazione di Pyth, ho pensato che sarebbe stato bello avere un po 'più di una sfida costruttiva, che si addicesse a un sito web specializzato in sfide del codice.
La sfida è piuttosto semplice. Come input , abbiamo il nome della lingua e il conteggio dei byte . Puoi prenderli come input di funzioni stdin
o come metodo di input predefinito per le tue lingue.
Come output , abbiamo un conteggio di byte corretto , ovvero il tuo punteggio con l'handicap applicato. Rispettivamente, l'output dovrebbe essere l'output della funzione stdout
o il metodo di output predefinito della tua lingua. L'output verrà arrotondato a numeri interi, perché amiamo i tiebreaker.
Utilizzando la query più brutta e compromessa ( link - sentiti libero di ripulirlo), sono riuscito a creare un set di dati (zip con .xslx, .ods e .csv) che contiene un'istantanea di tutte le risposte alle domande del code-golf . È possibile utilizzare questo file (e assumere che sia disponibile al vostro programma, ad esempio, è nella stessa cartella) o convertire il file in un altro formato convenzionale ( .xls
, .mat
, .sav
ecc - ma può contenere solo i dati originali!). Il nome dovrebbe rimanere QueryResults.ext
con ext
l'estensione scelta.
Ora per i dettagli. Per ogni lingua, esiste un parametro Boilerplate B
e Verbosity V
. Insieme, possono essere utilizzati per creare un modello lineare della lingua. Sia n
il numero effettivo di byte e c
sia il punteggio corretto. Usando un modello semplice n=Vc+B
, otteniamo il punteggio corretto:
n-B
c = ---
V
Abbastanza semplice, vero? Ora, per determinare V
e B
. Come prevedibile, faremo una regressione lineare, o più precisa, una regressione lineare ponderata perlomeno dei quadrati. Non spiegherò i dettagli al riguardo: se non sei sicuro di come farlo, Wikipedia è tua amica o, se sei fortunato, la documentazione della tua lingua.
I dati saranno i seguenti. Ogni punto dati sarà il conteggio dei byte n
e il conteggio medio della domanda c
. Per tenere conto dei voti, i punti saranno ponderati, in base al loro numero di voti più uno (per tenere conto di 0 voti), chiamiamolo così v
. Le risposte con voti negativi devono essere scartate. In termini semplici, una risposta con 1 voto dovrebbe essere uguale a due risposte con 0 voti.
Questi dati vengono quindi inseriti nel modello sopra menzionato n=Vc+B
usando la regressione lineare ponderata.
Ad esempio , dati i dati per una determinata lingua
n1=20, c1=8.2, v1=1
n2=25, c2=10.3, v2=2
n3=15, c3=5.7, v3=5
Ora, componiamo le matrici e vettori interessati A
, y
e W
, con i nostri parametri nel vettore
[1 c1] [n1] [1 0 0] x=[B]
A=[1 c2] y=[n2] W=[0 2 0], [V]
[1 c3] [n3] [0 0 5]
risolviamo l'equazione della matrice ( '
indicando la trasposizione)
A'WAx=A'Wy
per x
(e di conseguenza, otteniamo il nostro B
e V
parametro).
Il tuo punteggio sarà l'output del tuo programma, quando ti verrà dato il tuo nome e bytunt personale. Quindi sì, questa volta anche gli utenti Java e C ++ possono vincere!
Attenzione: La query genera un set di dati con un sacco di righe non valide a causa di persone che utilizzano 'cool' intestazione formattazione e persone di tagging loro codice sfida domande come codice-golf . Il download che ho fornito ha rimosso la maggior parte degli outlier. NON utilizzare il CSV fornito con la query.
Buona programmazione!
C++ <s>6 bytes</s>
. Inoltre, non ho mai usato T-SQL prima d'ora e sono già impressionato da me stesso che sono riuscito a estrarre il byte.