Einführung
Für diejenigen, die nicht mit Dampf vertraut sind - oder zumindest diesen besonderen Aspekt:
In den Profilen von Personen werden häufig Kommentare mit den Worten "+ rep _____" oder "-rep _____" hinterlassen. Dies ist aus mehreren Gründen ein inoffizielles Mittel, um zu zeigen, ob jemand in der Community einen guten oder einen schlechten Ruf hat. Solche Kommentare sehen so aus:
+ Repräsentant eines guten Spielers
+ rep hilfreich
-rep Hacker
-rep Betrüger
Aufgabe
Das Programm muss auf einvernehmliche Weise Eingaben vornehmen. Die Eingabe besteht aus einer Zeichenfolge mit optionalen Zeilenumbrüchen ( \n
). Ganz am Anfang jeder Zeile '+rep '
oder '-rep '
möglicherweise vorhanden. Der Rest der Zeile kann verworfen werden. Wenn die Zeile nicht mit '+rep '
oder beginnt '-rep '
(beachten Sie das nachstehende Leerzeichen), sollte die Zeile ignoriert werden.
Das Programm muss dann einen Gesamt-Reputations-Score haben. Ab 0
sollte diese Punktzahl in jeder Zeile, die mit beginnt, erhöht und in jeder Zeile, die mit beginnt, '+rep '
verringert werden '-rep '
.
Dieses Ergebnis sollte auf eine vereinbarte Weise ausgegeben werden.
Testfälle
Input:
+rep fast trade
+rep nice person
-rep too good
Output: 1
Input:
-rep hacker
-rep scammer
-rep was mean
Output: -3
Input:
first
i don't like him
+rep good at cs go
Output: 1
Input (note the lack of a trailing space on the third line):
+rep +rep
hi +rep
-rep
Output: 1
Input:
+ rep
Output: 0
Input:
+rep like
-thing
Output: 1
Bonus
Ich weiß nicht einmal, ob es möglich ist, aber Bonuspunkte, wenn Sie diese Kommentare irgendwie von Steam bekommen können.
0
, nicht1
.Antworten:
05AB1E ,
181617 Bytes2 Byte dank Okx
+ 1 Byte aufgrund von Änderungen in der Spezifikation eingespart, wobei auf rep jetzt ein Leerzeichen folgen muss.
Probieren Sie es online!
Erläuterung
quelle
ð¡0è
mit4£
. Ich habe zur gleichen Zeit an einer Lösung gearbeitet, als Sie es waren.|ðý#D'·Ý©.åÏ®1:O
kann 14 oder 15 sein, ich sehe es einfach nicht. Auch bei 16 stecken, vielleicht wird es Ihnen aber helfen. Ich lasse es hier. Ersetzen Sie im Grunde das Wort "rep" durch die Zahl "1", damit Sie die Summe bestimmen können.0|vy4£'·Ý1:R.V
funktioniert mein Weg nicht für Zeilen, die nicht mit +/- rep beginnen. Zurück zum Zeichenbrett :(Python 3, 73 Bytes
Ich bin sicher, dass diese Antwort Müll ist und bald geschlagen wird, aber es gibt noch keine anderen Python-Antworten
Verwenden Sie wie folgt:
Aus dem Dampf holen
Hier ist ein Beispielcode, der die ersten 100 Kommentare aus dem KennyS-Profil abruft und seinen Repräsentanten berechnet.
quelle
if"rep"==i[1:4]
für -1Perl 5 , 25 Bytes
24 Byte Code +
-p
Flag.Probieren Sie es online!
/^\+rep /
Gibt zurück,1
wenn die Zeile mit beginnt+rep
./^-rep /
Gibt zurück,1
wenn die Zeile mit beginnt-rep
(also höchstens eine). Wir verwenden$\
, um das Ergebnis zu speichern, da es implizit am Ende gedruckt wird (dank-p
Flag und denen, die nicht übereinstimmen}{
).quelle
Python 2 , 54 Bytes
Probieren Sie es online! Nimmt eine mehrzeilige Zeichenfolge als Eingabe.
Zählt das Auftreten von
'+rep '
und'-rep '
nur am Zeilenanfang, indem nach der Zeichenfolge gesucht wird, die auf ein Zeilenumbruchsymbol folgt. Um die erste Zeile abzufangen, wird der Eingabe eine neue Zeile vorangestellt.quelle
Retina ,
63515049 BytesEntsprach nicht ganz der Spezifikation, deshalb habe ich einige Probleme behoben, aber auch viel Golf gespielt (indem ich die erste Zeile aus Kritixi Lithos 'Lösung ausgeliehen habe).
Dank Kritixi Lithos wurde ein weiteres Byte gespeichert.
Probieren Sie es online!
Erläuterung
Zunächst wird alles aus der Eingabe gelöscht, mit Ausnahme des
+
und-
von einem+rep
oder-rep
am Anfang einer Zeile.Dann werden benachbarte Paare von
+
und-
entfernt, bis nicht mehr entfernt werden kann. Was danach übrig bleibt, ist entweder ein Lauf von+
s, ein Lauf von-
s oder nichts.Dann wird ein Lauf aus einem oder mehreren Zeichen (entweder
+
oder-
) durch das Zeichen ersetzt, aus dem der Lauf besteht, gefolgt von der Länge des Laufs. Auf diese Weise+
bleibt am Anfang für positive Ergebnisse und-
für negative Ergebnisse gesorgt.Dann werden alle
+
s entfernt, falls die Wiederholung positiv ist.Wenn der String zu diesem Zeitpunkt leer ist, ist die Wiederholung 0, also schreiben wir 0.
quelle
|¶
s
m
JavaScript, 55 Byte
Vielen Dank, @Neil, für das Golfen mit 12 Bytes. Vielen Dank, @Arnauld, für das Golfen mit 2 Bytes
Probieren Sie es online!
Code-Snippet anzeigen
quelle
split
anstelle von verwendenmatch
(es wird immer ein Array zurückgegeben, das 1 länger ist, als Sie normalerweise möchten, aber die beiden Einsen werden abgebrochen). Ich habe auch versucht, die Duplizierung zu beseitigen, aber es kam wieder mit 57 Bytes heraus.Mathematica, 47 Byte (ISO 8859-1-Codierung)
Reine Funktion, die eine durch Zeilenumbrüche getrennte Zeichenfolge als Eingabe verwendet und eine Ganzzahl zurückgibt. Beachten Sie, dass die drei Zeilenumbrüche im Code von Anführungszeichen flankiert werden und daher jeweils
"\n"
einer Zeichenfolge entsprechen (dies ist jedoch ein Byte kürzer als"\n"
).StringCount
macht das schwere Heben; Wir fügen manuell eine neue Zeile am Anfang der Zeichenfolge hinzu, damit die erste Zeile bei Bedarf übereinstimmt.±
ist eine unäre Hilfsfunktion, um Wiederholungen zu vermeidenStringCount
.Die alternative Lösung
ist 4 bytes länger, aber ich mag die folge
±"+"-±"-"
....quelle
Retina ,
59535250 BytesProbieren Sie es online!
Sehen Sie sich die kürzere Antwort von Basic Sunset in derselben Sprache an!
Erläuterung
Entfernt alles außer
[+-]rep
s.Entfernt wiederholt 1
-
für alle+
und umgekehrt.Stellen Sie a
-
(da die Zahl negativ ist) vor-
s und ersetzen Sie das-
s durch die Zahl von-
s.Machen Sie dasselbe für
+
s, aber stellen Sie a nicht voran-
.Schließlich, wenn es nichts gibt, ersetzen Sie es mit einem
0
.quelle
PHP, 118 Bytes
Probieren Sie es online!
So verwendet:
quelle
Röda , 53 Bytes
Probieren Sie es online!
quelle
Java, 109 Bytes
Versuchen, dies mit
Stream
's zu verkürzenquelle
Gestapelt , 45 Bytes
Probieren Sie es online!
Alternativ (49 Bytes):
Erläuterung
Dies extrahiert im Grunde alle
+
oder-
an den Anfang der Zeile angehängten undrep
. Dann stellt es jedem a voran#
. Dann0
wird dem Ganzen ein vorangestellt.#~
wertet den String aus, der jetzt ungefähr so aussieht:#+
ist Inkrement und#-
ist Dekrement. So erhalten wir unser gewünschtes Ergebnis.quelle
Retina , 38 Bytes
Probieren Sie es online!
Eine andere (und kürzere) Lösung als die bereits in Retina veröffentlichten.
Erläuterung
(Diese Zeile hat ein Leerzeichen am Ende). Behalten Sie nur die relevanten Teile der Eingabe bei, dh das
+rep
oder-rep
am Anfang einer Zeile.Sortieren Sie alle Zeichen (einschließlich Zeilenumbrüche). Dadurch werden + s und -s nebeneinander gesetzt.
Entfernen Sie wiederholt
+-
Paare, bis höchstens eines der beiden Zeichen übrig bleibt.Passen Sie die erste an
-
(falls vorhanden) und drucken Sie sie aus, ohne die Zeichenfolge zu ändern.Zählen Sie die Anzahl der verbleibenden Zeichen und drucken Sie sie aus, da dies die letzte Phase des Programms ist.
quelle
C # 87 Bytes
Anonyme Funktion, die die Eingabezeichenfolge mithilfe des Zeilenumbruchs aufteilt, nach der Zeichenfolge "rep" sucht, der ein Zeichen vorangestellt ist, und die Reputation erhöht, wenn sie gefunden wird (das
n
Variable) um 1 oder -1 .Volles Programm mit ungolfed Methode und Testfällen:
Beachten Sie, dass der ASCII-Code für
+
43 und für ist-
45 ist. Diese Methode übergibt alle Testfälle vom OP. Wenn das erste Zeichen jedoch etwas anderes ist, führt dies zu falschen Antworten!Dies kann auf Kosten von 17 Byte behoben werden:
C # fest, 104 Bytes
Die geänderte anonyme Funktion sucht in jeder Zeile nach einem
+
oder-
-Zeichen als erstem Zeichen.quelle
Japt , 14 Bytes
Probieren Sie es online!
+1 Byte für
-x
Flagquelle
C ++, 144 Bytes
Probieren Sie es online!
quelle
C # , 104 Bytes
Obwohl es bereits eine Lösung gibt - und meine länger ist - denke ich immer noch, dass ich sie posten sollte, da die hier bereits vorhandene möglicherweise fehlschlägt, wenn etwas
'=rep '
in die Quere kommt.Golf gespielt
Ungolfed
Ungolfed lesbar
Vollständiger Code
Releases
104 bytes
- Anfangslösung.Anmerkungen
Nichts hinzuzufügen
quelle
Ruby, 46 Bytes
Holen Sie sich alle +/- Wiederholungen von der Eingabe und fügen Sie sie in einer einzigen Zeichenfolge zusammen. Werten Sie das dann für rep = 1 aus.
quelle
JavaScript ES6,
8579 BytesVersuch es
Ungolfed
Geschichte
85 Bytes
quelle