En este desafío, su tarea es hacer escribir un programa con menos de 300 caracteres que tome un párrafo corto o unas pocas oraciones que haya dicho un candidato y genere quién lo dijo.
Entrada : puede tomarse como parámetro de una función, entrada a un programa, etc. Será un párrafo corto, puntuado correctamente.
Salida : El candidato que crees que es. Este podría ser uno de
Ben Carson (1)
Ted Cruz (2)
John Kasich (3)
Marco Rubio (4)
Donald Trump (5)
Hillary Clinton (6)
Bernie Sanders (7)
Dejé los nombres de las personas que abandonaron el 1 de marzo. Puede generar el nombre mismo o, más convenientemente, el número que corresponde al nombre.
Puntuación: su puntuación es el porcentaje de casos de prueba que obtiene correctamente. La puntuación más alta gana. Los empates (o puntajes perfectos) se dividen por la longitud del código como en un código de golf.
Los casos de prueba se pueden extraer de:
http://www.presidency.ucsb.edu/debates.php
Haga clic en cada debate, tanto demócrata como republicano que haya sucedido hasta ahora (antes del 1 de marzo). Cada párrafo es un caso de prueba, a menos que el "párrafo" tenga menos de 20 caracteres de longitud.
Aquí hay un código que extrae los casos de prueba de una página en particular:
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);
}
Entonces puedes hacer categ.SANDERS
para obtener una lista de todos los párrafos que ha dicho el senador Sanders.
Puede descartar cualquier cosa que no haya dicho los candidatos mencionados anteriormente (p. Ej. categ.BUSH
Ocateg.CHRISTIE
).
Aquí está el archivo con todos los casos de prueba: https://drive.google.com/file/d/0BxMn8--P71I-bDZBS2VZMDdmQ28/view?usp=sharing
El archivo está organizado por 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 ejemplo de envío parcial sería:
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 */
Aquí hay un lugar donde puede probar las soluciones de JavaScript: https://jsfiddle.net/prankol57/abfuhxrh/
El código usa el parámetro p
para representar la frase a clasificar. Código de ejemplo que obtiene un puntaje de alrededor del 20% (adivinar obtendría alrededor del 11%):
if (/ rigged | top | percent | Wall Street /.test(p)) return 'Sanders';
return 'Trump';
Exactamente lo que estoy preguntando: escriba un programa / función en menos de 300 caracteres que tome como entrada una frase que un candidato ha dicho y devuelva como salida qué candidato lo dijo. Su puntaje es el porcentaje de casos de prueba que obtiene correctamente. La puntuación más alta gana.
Sí, sé que muchas líneas tienen [laughter]
o [cheering]
en ellas. Estos no serán eliminados. En el peor de los casos, son información adicional que puede ignorar; en el mejor de los casos, son información adicional que puede usar (por ejemplo, inventé esto, pero tal vez la risa de la gente es evidencia de que Marco Rubio está hablando). Los casos de prueba son como aparecen en el archivo de texto.