Dans ce défi, votre tâche est de faire écrire un programme de moins de 300 caractères qui prend un court paragraphe ou quelques phrases qu'un candidat a dit et qui l'a sorti.
Entrée : Peut être prise comme paramètre d'une fonction, entrée dans un programme, etc. Ce sera un court paragraphe, correctement ponctué.
Résultat : le candidat que vous pensez être. Cela pourrait être l'un des
Ben Carson (1)
Ted Cruz (2)
John Kasich (3)
Marco Rubio (4)
Donald Trump (5)
Hillary Clinton (6)
Bernie Sanders (7)
J'ai omis les noms des personnes qui ont abandonné le 1er mars. Vous pouvez sortir le nom lui-même, ou, plus commodément, le numéro qui correspond au nom.
Notation: votre score est le pourcentage de cas de test que vous obtenez correctement. Le score le plus élevé l'emporte. Les égalités (ou les scores parfaits) sont brisées par la longueur du code comme dans un golf de code.
Les cas de test peuvent être extraits de:
http://www.presidency.ucsb.edu/debates.php
Cliquez sur chaque débat, à la fois démocrate et républicain qui a eu lieu jusqu'à présent (avant le 1er mars). Chaque paragraphe est un cas de test, à moins que le «paragraphe» comporte moins de 20 caractères.
Voici le code qui extrait les cas de test d'une page particulière:
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);
}
Vous pouvez ensuite faire categ.SANDERS
pour obtenir une liste de tous les paragraphes que le sénateur Sanders a dit.
Vous pouvez rejeter tout ce qui n'est pas dit par les candidats énumérés ci-dessus (par exemple categ.BUSH
ou categ.CHRISTIE
).
Voici le fichier avec tous les cas de test: https://drive.google.com/file/d/0BxMn8--P71I-bDZBS2VZMDdmQ28/view?usp=sharing
Le dossier est organisé par candidat
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 exemple de soumission partielle serait:
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 */
Voici un endroit où vous pouvez tester des solutions javascript: https://jsfiddle.net/prankol57/abfuhxrh/
Le code utilise le paramètre p
pour représenter la phrase à classer. Exemple de code qui marque environ 20% (deviner obtiendrait environ 11%):
if (/ rigged | top | percent | Wall Street /.test(p)) return 'Sanders';
return 'Trump';
Exactement ce que je demande: Écrivez un programme / fonction en moins de 300 caractères qui prend en entrée une phrase qu'un candidat a dite et retourne en sortie quel candidat l'a dit. Votre score est le pourcentage de cas de test que vous obtenez correctement. Le score le plus élevé l'emporte.
Oui, je sais que beaucoup de lignes ont [laughter]
ou [cheering]
en elles. Ceux-ci ne seront pas supprimés. Au pire, ce sont des informations supplémentaires que vous pouvez ignorer; au mieux, ce sont des informations supplémentaires que vous pouvez utiliser (par exemple, j'ai inventé cela, mais peut-être que les gens rient sont la preuve que Marco Rubio parle). Les cas de test sont tels qu'ils apparaissent dans le fichier texte.