In questa sfida, il tuo compito è quello di far scrivere un programma con meno di 300 caratteri che richiede un breve paragrafo o alcune frasi che un candidato ha detto e genera chi lo ha detto.
Input : può essere preso come parametro per una funzione, input per un programma ecc. Sarà un breve paragrafo, opportunamente punteggiato.
Risultato : il candidato che ritieni sia. Questo potrebbe essere uno dei
Ben Carson (1)
Ted Cruz (2)
John Kasich (3)
Marco Rubio (4)
Donald Trump (5)
Hillary Clinton (6)
Bernie Sanders (7)
Ho lasciato fuori i nomi delle persone che hanno abbandonato il 1 ° marzo. È possibile generare il nome stesso o, più convenientemente, il numero corrispondente al nome.
Punteggio: il tuo punteggio è la percentuale di casi di test che ottieni correttamente. Il punteggio più alto vince. I pareggi (o i punteggi perfetti) sono interrotti dalla lunghezza del codice come in un codice golf.
I casi di test possono essere estratti da:
http://www.presidency.ucsb.edu/debates.php
Fai clic su ogni dibattito, sia democratico che repubblicano, che si è svolto finora (prima del 1 ° marzo). Ogni paragrafo è un caso di prova, a meno che il "paragrafo" non contenga più di 20 caratteri.
Ecco il codice che estrae i casi di test da una determinata pagina:
var t = $(".tools").parentNode.querySelectorAll("p");
var categ = {}, cur = 0;
for (var i = 0; i < t.length; ++i) {
var p = t[i], str = p.innerText;
if (p.querySelector("b")) {
cur = p.querySelector("b").innerText.replace(':', '');
str = str.replace(/^.*?:\s/, '');
}
str = str.replace(/\[applause\]/g, '')
if (str.length < 20) continue;
if (categ[cur] == null) categ[cur] = [];
categ[cur].push(str);
}
È quindi possibile fare categ.SANDERS
per ottenere un elenco di tutti i paragrafi che il senatore Sanders ha detto.
Puoi scartare tutto ciò che non è stato detto dai candidati sopra elencati (es. categ.BUSH
O categ.CHRISTIE
).
Ecco il file con tutti i casi di test: https://drive.google.com/file/d/0BxMn8--P71I-bDZBS2VZMDdmQ28/view?usp=sharing
Il file è organizzato per candidato
CANDIDATE CANDIDATE_LAST_NAME
(empty line)
Series of statements. Each paragraph is separated by (NEW PARAGRAPH)-
(empty line)
CANDIDATE NEXT_CANDIDATE_LAST_NAME
(empty line)
etc.
Un esempio di presentazione parziale sarebbe:
if (/ win | wall | great | beautiful/.test(p)) return 5;
if (/ percent | top one | rigged /.test(p)) return 7;
// etc. for all candidates
o
var words = p.split(' ');
// majority of words have less than 5 characters
if (words.length - words.filter(a => a.length < 5).length < 4) evidence[5]++;
// at the end
return /* index with the most evidence */
Ecco un luogo dove è possibile testare soluzioni javascript: https://jsfiddle.net/prankol57/abfuhxrh/
Il codice utilizza il parametro p
per rappresentare la frase da classificare. Codice di esempio che segna circa il 20% (supponendo che si ottenga intorno all'11%):
if (/ rigged | top | percent | Wall Street /.test(p)) return 'Sanders';
return 'Trump';
Esattamente quello che sto chiedendo: scrivi un programma / funzione con meno di 300 caratteri che prende come input una frase che un candidato ha detto e restituisce come output il candidato che l'ha detto. Il tuo punteggio è la percentuale di casi di test che ottieni correttamente. Il punteggio più alto vince.
Sì, so che molte linee hanno [laughter]
o [cheering]
in esse. Questi non verranno rimossi. Nel peggiore dei casi, sono informazioni extra che puoi ignorare; nella migliore delle ipotesi, sono informazioni aggiuntive che è possibile utilizzare (ad esempio, l'ho inventato, ma forse le risate delle persone sono la prova che Marco Rubio sta parlando). I casi di test sono come appaiono nel file di testo.