Ich nehme gerne an Mathe-Wettbewerben teil, die von Mu Alpha Theta, einer Mathematik-Ehrengesellschaft in den Vereinigten Staaten, veranstaltet werden. Bei Wettbewerben absolviere ich einen Multiple-Choice-Test mit 30 Fragen. Pro Frage stehen fünf Auswahlmöglichkeiten mit den Bezeichnungen A bis E zur Verfügung.
Meine Punktzahl bei einem Test beträgt vier Punkte für jede richtige Antwort, null Punkte für eine leere Frage und ein negativer Punkt für jede falsche Antwort.
Schreiben Sie ein Programm, das einen Test nach dem obigen Bewertungssystem bewertet. Die Eingabe sollte aus zwei Komponenten bestehen: einem Antwortschlüssel, gefolgt von Antworten. Fragen, die leer bleiben, müssen als Leerzeichen eingegeben werden. Die erste Eingabe darf nur die Buchstaben AE (oder ae, Ihre Wahl) enthalten, und es kann davon ausgegangen werden, dass die Eingabe kein Leerzeichen enthält. Die zweite Eingabe darf nur Leerzeichen und die Buchstaben AE (oder ae) enthalten. Eingaben, die keine 30-Fragen-Tests implementieren, müssen Invalid test
als Ausgabe gedruckt werden.
Die Ausgabe sollte die Note oder sein Invalid test
.
Bonus
Wenn Ihr Programm die Zahl rechts, die Zahl links und die Zahl falsch nach dem Endergebnis als druckt (aR bB cW)
, entfernen Sie 20 Bytes.
Probeneingabe
CABBDCABECDBACDBEAACADDBBBEDDA //answer key
CABEDDABDC BACDBBAADE CBBEDDA //responses
Beispielausgabe
Kein Bonus
73
Bonus
73 (20R 3B 7W)
Es gelten Standardregeln. Kürzester Code in Bytes gewinnt.
Invalid test
.Antworten:
Pyth,
5351Probieren Sie es online aus
Die Prüfungen werden durchgeführt, indem geprüft wird, ob die gesamte Eingabe Zeichen enthält, wenn alle Leerzeichen und
a-e
entfernt wurden, und indem geprüft wird, ob beide Zeichenfolgen eine Länge haben30
.Die Score - Berechnung wird durch die beiden Linien Zipping zusammen gemacht, dann durch Abbilden jedes Paares an:
(letters are equal) ? 4 : -1
. Summieren Sie dann einfach die Werte und addieren Sie die Anzahl der Leerzeichen in der zweiten Zeile zurück zur Punktzahl.quelle
Im Ernst , 86 Bytes
Nimmt Eingaben wie
"CABBDCABECDBACDBEAACADDBBBEDDA", "CABEDDABDC BACDBBAADE CBBEDDA"
Probieren Sie es online aus (Sie müssen die Eingabe manuell eingeben, da Permalinks keine Anführungszeichen mögen)
Arbeite jetzt am Bonus.Nein, das Hinzufügen des Bonus würde mehr als 20 Bytes kosten.Ich wusste, dass ich etwas vergessen hatte ...
Invalid Test
wurde im Fehlerfall nicht gedruckt. Ich hoffe, dass ich Dennis übertreffen kann.quelle
JavaScript (ES6), 134 Byte
Bearbeiten: Die Fragenanforderungen wurden geändert. Diese Antwort stammt von dem Zeitpunkt, zu dem das Programm sicherstellen muss, dass jedes Antwortzeichen AE ist, jedes Antwortzeichen AE oder ein Leerzeichen ist und beide Längen von 30 haben, andernfalls wird zurückgegeben
Invalid test
.Erläuterung
Prüfung
quelle
CJam, 60 Bytes
Probieren Sie es online im CJam-Interpreter aus .
quelle
JavaScript (Firefox 31+), 86 Byte
Verwendet das für ES7 vorgeschlagene Array-Verständnis. Daher ist die Unterstützung momentan auf Firefox beschränkt.
Mit Bonus 106 Bytes (126 - 20)
Bearbeiten: Früher hat meine Lösung nur die Antwort- oder Fragenlänge überprüft, jetzt überprüft sie beide.
Code-Snippet anzeigen
quelle
f=
am Anfang weglassen und sagen, dass dies eine Lambda-Funktion erzeugt.(x,y)=>(r=i=0,[for(l of y)x[i++]==l?r+=4:r-=l!=' '],i!=30|i-x.length?'Invalid test':r)
Japt , 71 Bytes
Japt ist eine verkürzte Version von Ja vaScri pt . Dolmetscher
Die beiden
.
Zeichen am Ende sollten die nicht druckbaren Unicode-Zeichen U + 0017 bzw. U + 0099 sein.Wie es funktioniert
Ich hoffe, es gibt einen kürzeren Weg, um sicherzustellen, dass beide Längen gleich 30 sind. Vorschläge sind willkommen!
quelle
Haskell,
144138 BytesWäre etwa 50 ohne die Validierung. schnüffeln .
Verwendung:
"ABCDEABCDEABCDEABCDEABCDEABCDE" % "AAAAABBBBBCCCCCDDDDDEEEEEAAAAA"
quelle
!
kann definiert werden alsall(`elem`l)s
, spart 6 Bytes.g=all.flip elem
.C #,
162154148134 BytesVerwendung
Prüfung
http://csharppad.com/gist/15f7c9c3c8cfce471ff2
quelle
int s=0,i=0;for(;...
, um 3 Bytes zu sparen.Ruby, 81 Zeichen
Probelauf:
quelle
Java,
183169 BytesDies war ein schönes Stück Java 8-Übung:
quelle
String.valueOf
indem Sie einfach das int zu einer leeren Zeichenfolge hinzufügen (""+IntStream....
). Ich glaube auch, dass Java das Nicht-Kurzschließen von und zulässt, sodass Sie eines der Zeichen entfernen&
und ein Byte speichern können .Brainfuck, 354 Bytes
Benötigt einen Interpreter, mit dem Sie von Zelle 0 nach links gehen können. Die Ausgabe ist ein Byte mit Vorzeichen. Beispielsweise wird das Byte
0x49
für die Beispieleingabe0xFF
gedruckt und für die Eingabe mit derselben ersten Zeile gedruckt, wobei jedoch die zweite Zeile durch "C" und 29 Leerzeichen ersetzt wird.Die Punktzahl beginnt bei 0, und wenn die zweite Eingabezeile gelesen wird, werden die folgenden Änderungen daran vorgenommen:
Schließlich wird 120 hinzugefügt. Dies ist funktional dasselbe wie die Annahme einer perfekten Punktzahl und das Anwenden von Strafen, anstatt bei 0 zu beginnen.
Mit Kommentaren:
quelle
Python 3,
187 179 175 165 155151quelle
JavaScript ES7, 102
Wie immer ist der Bonus die Mühe nicht wert.
Überprüfen auf ungültige Leerzeichen in der ersten Eingabe (da dies für mich sinnvoll ist) 112
quelle
(k,r,s=0)=>/^[A-E]{30}$/.test(k)&&/^[ A-E]{30}$/.test(r)?Object.keys(k).map(i=>k[i]==r[i]?s+=4:s-=r[i]!=' ').pop():'Invalid Test'
ist 129 Bytes.Python 2.7,
131, 116, 109, 139Ich habe versucht, eine "kurze" Python-Lösung zu erstellen ... Nun, hier sind Vorschläge mehr als willkommen
Das Hinzufügen einiger weiterer Zeichen macht es weitaus lesbarer ...
quelle
Prolog, 165 Bytes
Mehr als die Hälfte der Bytes ist für die Überprüfung ungültiger Tests bestimmt.
Code:
Erklärt:
Beispiel:
Probieren Sie es hier online aus
quelle
MATLAB,
9290 BytesVielen Dank an Tom Carpenter, der mir geholfen hat, meine Antwort um 2 Byte zu reduzieren!
Die Funktion kann durch Zuweisen des Antwortbogens zu q und der übermittelten Antworten zu a aufgerufen werden . z.B:
Die Antwort wird einfach auf den Bildschirm gedruckt. 8 Bytes könnten gespeichert werden, wenn es erlaubt ist, ans = 73 zu drucken
quelle
numel(q)
mitnnz(q)
.C # 6.0 ->
(270-20 = 250)246-20 = 226 BytesLesbare & ungolfed Version:
Wollte eigentlich den Bonus bekommen: D
quelle
i
zusammen mits
außerhalb der for-Schleife deklarieren . Sie könnenvar
deklarierena
und dabei 1 Byte sparen (Hurra!). Sie brauchen nicht viele geschweifte Klammern{}
in Ihrem Code, was immer ein guter Weg ist, um Bytes zu trimmen, und es lohnt sich immer, eine ASCII-Tabelle zu betrachten, wenn Sie Zeichen vergleichen (Sie können ein Bytec[i]==' '
durch Verwendung einer Ungleichung etwas abschneiden ). Sie sollten auch in Erwägung ziehen, die Zeichenfolgen rückwärts durchzuzählen. In diesem Fall können Sie mindestens 1 Byte einsparen, indem Sie die for-Schleife etwas neu ausrichten.Groovy 2.4.5, 107 Bytes
Nur eine einfache Übersetzung der früheren Java-Antwort .
quelle
C, 273-20 = 253 Bytes
Ich habe den Bonus genommen, obwohl es mich 23 Bytes gekostet hat, ihn nur auszudrucken. :-(
Erläuterung
Es gibt doppelt so viel Code, der auf ungültige Eingaben überprüft werden muss, wie zum Zählen der Antworten - das wahre Fleisch der Herausforderung befindet sich
for
kurz vor dem Ende in der Schleife. In der Tat ist hier eine Version, die annimmt, dass die Eingabe immer gültig ist, in 163-20 = 143 Bytes:Und eine, die die gleiche Annahme macht und nur die Punktzahl in 133 Bytes ausgibt:
quelle
SAS 9.4, 291-20 = 271 Bytes (mit Bonus) oder 231 Bytes (ohne Bonus)
Mit Bonus:
Ohne Bonus:
Sas hat nicht wirklich einen Ein- / Ausgang, daher müssten Sie k = '..' durch den Schlüssel und r = '..' durch die Antwort ersetzen. Die Ausgabe wird im Protokoll ausgedruckt.
quelle