Su tarea es escribir un programa que, dado una lista de mensajes de chat, cuente cuántas veces se pincha a cada persona, para que pueda saber cuán populares son todos. Pero, dado que tengo que hacerlo subrepticiamente, necesito que sea lo más pequeño posible para poder ocultar el código.
Especificaciones
- La entrada viene en una lista de 2 tuplas, con cada elemento de la forma
("username", "message")
. - Un ping a otro usuario se define como
@
seguido de 3 o más letras que se refieren inequívocamente a ese usuario. - Sin embargo, también debe considerar las respuestas, que deben comenzar con
:messageid
un espacio seguido. - Suponga que el primer mensaje tiene identificación
0
y proceda secuencialmente. - Envíe a cada usuario y diga cuántas veces se pinchó a cada uno.
- La salida puede estar en cualquier orden / formato razonable.
- Este es el código de golf , por lo que gana el código más corto en bytes
Casos de prueba
[["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
funciona como un emoticón sorprendido.:3
) o un ping que no satisface a ningún usuario en la sala (por ejemplo@zzz
)?[["Doorknob","@Alex is wrong"],["Alex","I am only slightly wrong"]]
una entrada válida?Respuestas:
JavaScript (ES6),
245210 bytesUtiliza un objeto para crear una lista única de nombres junto a pings. Luego, busca en los mensajes las coincidencias con cualquiera de las condiciones de ping. Si es un nombre, mira a través de la lista de nombres para encontrar si solo hay una coincidencia, y luego aumenta. Si es una respuesta, simplemente hace referencia a ese índice en la matriz de mensajes y extrae el nombre que se incrementará. Finalmente, devuelve el objeto.
fuente
Map
es más divertido ¿verdad? Na, originalmente sobreestimé la cantidad adicional que se necesitaría para hacer referencia a un objeto, pensando que tendría una matriz separada para los nombres, pero tienes razón en que es mucho más corto de esta manera.PHP, 227 bytes
fuente