Nesse desafio, sua tarefa é fazer escrever um programa com menos de 300 caracteres, com um parágrafo curto ou algumas frases que um candidato tenha dito e emitido quem o disse.
Entrada : pode ser tomada como parâmetro para uma função, entrada para um programa etc. Será um parágrafo curto, corretamente pontuado.
Saída : o candidato que você pensa que é. Este poderia ser um dos
Ben Carson (1)
Ted Cruz (2)
John Kasich (3)
Marco Rubio (4)
Donald Trump (5)
Hillary Clinton (6)
Bernie Sanders (7)
Eu deixei de fora os nomes das pessoas que desistiram desde 1º de março. Você pode imprimir o próprio nome ou, mais convenientemente, o número que corresponde ao nome.
Pontuação: sua pontuação é a porcentagem de casos de teste que você acertou. Maior pontuação ganha. Os laços (ou pontuações perfeitas) são quebrados pelo comprimento do código, como em um código de golfe.
Os casos de teste podem ser obtidos de:
http://www.presidency.ucsb.edu/debates.php
Clique em cada debate, democrata e republicano que aconteceu até agora (antes de 1º de março). Todo parágrafo é um caso de teste, a menos que o "parágrafo" tenha menos de 20 caracteres.
Aqui está o código que extrai os casos de teste de uma página específica:
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);
}
Você pode fazer isso categ.SANDERS
para obter uma lista de todos os parágrafos que o senador Sanders disse.
Você pode descartar qualquer coisa que não seja dita pelos candidatos listados acima (por exemplo, categ.BUSH
ou categ.CHRISTIE
).
Aqui está o arquivo com todos os casos de teste: https://drive.google.com/file/d/0BxMn8--P71I-bDZBS2VZMDdmQ28/view?usp=sharing
O arquivo é organizado pelo 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.
Um exemplo de envio parcial seria:
if (/ win | wall | great | beautiful/.test(p)) return 5;
if (/ percent | top one | rigged /.test(p)) return 7;
// etc. for all candidates
ou
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 */
Aqui é um lugar onde você pode testar soluções javascript: https://jsfiddle.net/prankol57/abfuhxrh/
O código usa o parâmetro p
para representar a frase a ser classificada. Exemplo de código com pontuação em torno de 20% (a estimativa seria de 11%):
if (/ rigged | top | percent | Wall Street /.test(p)) return 'Sanders';
return 'Trump';
Exatamente o que estou perguntando: escreva um programa / função com menos de 300 caracteres que tome como entrada uma frase que um candidato tenha dito e retorne como saída que o candidato disse. Sua pontuação é a porcentagem de casos de teste que você acertou. Maior pontuação ganha.
Sim, eu sei que muitas linhas têm [laughter]
ou estão [cheering]
nelas. Estes não serão removidos. Na pior das hipóteses, são informações extras que você pode ignorar; na melhor das hipóteses, são informações extras que você pode usar (por exemplo, eu inventei isso, mas talvez o riso das pessoas seja uma evidência de que Marco Rubio está falando). Os casos de teste são como eles aparecem no arquivo de texto.