Ihre Aufgabe ist es, ein Programm zu schreiben, das anhand einer Liste von Chat-Nachrichten zählt, wie oft jede Person einen Ping erhält, damit ich weiß, wie beliebt jeder ist. Aber da ich es heimlich tun muss, muss es so klein wie möglich sein, damit ich den Code verstecken kann.
Technische Daten
- Die Eingabe erfolgt in einer Liste mit 2 Tupeln, wobei jedes Element der Form entspricht
("username", "message")
. - Ein Ping an einen anderen Benutzer wird als
@
gefolgt von 3 oder mehr Buchstaben definiert, die eindeutig auf diesen Benutzer verweisen. - Sie müssen jedoch auch Antworten berücksichtigen, die mit
:messageid
einem Leerzeichen beginnen müssen. - Angenommen, die erste Nachricht hat die ID
0
und gehe nacheinander vor. - Geben Sie jeden Benutzer aus und sagen Sie, wie oft jeder Ping erhalten hat.
- Die Ausgabe kann in beliebiger Reihenfolge und in einem angemessenen Format erfolgen.
- Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes !
Testfälle
[["AlexA.", "I am wrong"], ["Quartatoes", "@Alex you are very wrong"], ["AlexA.", ":1 I am only slightly wrong"]]
AlexA.: 1
Quartatoes: 1
[["Doorknob", "I have never eaten an avocad."], ["AquaTart", ":0 I will ship you an avocad"], ["AlexA.", ":0 this is shocking"]]
Doorknob: 2
AquaTart: 0
AlexA.: 0
[["Geobits", "I like causing sadness through downvotes."], ["Flawr", "I want to put random message ids in my chat messages :0 askjdaskdj"]]
Geobits: 0
Flawr: 0
[["Downgoat", "goatigfs.com/goatgif"], ["Downotherthing", "@Downgoat cool gifs"], ["Dennis", "@Down cool gifs this is an ambiguous ping"]]
Downgoat: 1
Downotherthing: 0
Dennis: 0
:0
sich das als überraschtes Emoticon verdoppelt.:3
) oder ein Ping, der keinen Benutzer im Raum zufriedenstellt (z. B.@zzz
)?[["Doorknob","@Alex is wrong"],["Alex","I am only slightly wrong"]]
gültige Eingabe?Antworten:
JavaScript (ES6),
245 -210 ByteVerwendet ein Objekt, um eine eindeutige Liste von Namen neben Pings zu erstellen. Anschließend werden die Nachrichten nach Übereinstimmungen mit einer der beiden Ping-Bedingungen durchsucht. Wenn es sich um einen Namen handelt, durchsucht es die Liste der Namen, um festzustellen, ob es nur eine Übereinstimmung gibt, und erhöht sie dann. Bei einer Antwort wird lediglich auf diesen Index im Nachrichtenarray verwiesen und der zu inkrementierende Name abgerufen. Schließlich wird das Objekt zurückgegeben.
quelle
Map
macht mehr Spaß, oder? Na, ich habe ursprünglich überschätzt, wie viel zusätzlicher Aufwand erforderlich ist, um auf ein Objekt zu verweisen. Ich dachte, ich müsste ein separates Array für Namen erstellen, aber Sie haben Recht, dass es auf diese Weise viel kürzer ist.PHP, 227 Bytes
quelle