In dieser Herausforderung besteht Ihre Aufgabe darin, ein Programm mit weniger als 300 Zeichen zu schreiben , das einen kurzen Absatz oder ein paar Sätze enthält, die ein Kandidat gesagt hat, und denjenigen auszugeben, der es gesagt hat.
Eingabe : Kann als Parameter für eine Funktion, als Eingabe für ein Programm usw. verwendet werden. Es handelt sich um einen kurzen Absatz mit korrekter Interpunktion.
Ausgabe : Der Kandidat, den Sie für richtig halten. Dies könnte einer von
Ben Carson (1)
Ted Cruz (2)
John Kasich (3)
Marco Rubio (4)
Donald Trump (5)
Hillary Clinton (6)
Bernie Sanders (7)
Ich habe die Namen der Personen gestrichen, die zum 1. März ausgestiegen sind. Sie können den Namen selbst oder bequemer die Nummer ausgeben, die dem Namen entspricht.
Bewertung: Ihre Bewertung ist der Prozentsatz der Testfälle, die Sie richtig erhalten. Höchste Punktzahl gewinnt. Gleichstände (oder perfekte Punkte) werden wie bei einem Codegolf nach Codelänge getrennt.
Die Testfälle können entnommen werden aus:
http://www.presidency.ucsb.edu/debates.php
Klicken Sie auf jede Debatte, sowohl demokratische als auch republikanische, die bisher (vor dem 1. März) stattgefunden hat. Jeder Absatz ist ein Testfall, es sei denn, der "Absatz" ist kürzer als 20 Zeichen.
Hier ist Code, der die Testfälle von einer bestimmten Seite abruft:
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);
}
Sie können dann tun categ.SANDERS
, um eine Liste aller Absätze zu erhalten, die Senator Sanders gesagt hat.
Sie können alles verwerfen, was von den oben aufgeführten Kandidaten (z . B. categ.BUSH
oder categ.CHRISTIE
) nicht gesagt wird .
Hier ist die Datei mit allen Testfällen: https://drive.google.com/file/d/0BxMn8--P71I-bDZBS2VZMDdmQ28/view?usp=sharing
Die Datei ist nach Kandidaten organisiert
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.
Ein Beispiel für eine teilweise Einreichung wäre:
if (/ win | wall | great | beautiful/.test(p)) return 5;
if (/ percent | top one | rigged /.test(p)) return 7;
// etc. for all candidates
oder
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 */
Hier können Sie Javascript-Lösungen testen: https://jsfiddle.net/prankol57/abfuhxrh/
Der Code verwendet den Parameter p
, um die zu klassifizierende Phrase darzustellen. Beispielcode, der ungefähr 20% ergibt (eine Schätzung würde ungefähr 11% ergeben):
if (/ rigged | top | percent | Wall Street /.test(p)) return 'Sanders';
return 'Trump';
Genau das, was ich frage: Schreiben Sie ein Programm / eine Funktion in weniger als 300 Zeichen, das / die eine Phrase, die ein Kandidat gesagt hat, als Eingabe verwendet und als Ausgabe zurückgibt, welche Kandidatin es gesagt hat. Ihre Punktzahl ist der Prozentsatz der Testfälle, die Sie richtig machen. Höchste Punktzahl gewinnt.
Ja, ich weiß, dass viele Zeilen [laughter]
oder [cheering]
in ihnen haben. Diese werden nicht entfernt. Im schlimmsten Fall handelt es sich um zusätzliche Informationen, die Sie ignorieren können. Im besten Fall handelt es sich um zusätzliche Informationen, die Sie verwenden können (z. B. habe ich mir das ausgedacht, aber vielleicht ist das Gelächter ein Beweis dafür, dass Marco Rubio spricht). Die Testfälle sind so, wie sie in der Textdatei angezeigt werden.