Votre tâche consiste à écrire un programme qui, compte tenu d'une liste de messages de discussion, compte le nombre de fois où chaque personne reçoit un ping, afin que je sache à quel point tout le monde est populaire. Mais, comme je dois le faire subrepticement, j'ai besoin qu'il soit aussi petit que possible pour pouvoir cacher le code.
Spécifications
- L'entrée est fournie dans une liste de 2 tuples, chaque élément étant du formulaire
("username", "message")
. - Un ping vers un autre utilisateur est défini comme un
@
suivi de 3 lettres ou plus qui se réfère sans ambiguïté à cet utilisateur. - Cependant, vous devez également considérer les réponses, qui doivent commencer par
:messageid
suivi d'un espace. - Supposons que le premier message ait un identifiant
0
et continuez séquentiellement. - Sortez chaque utilisateur et dites combien de fois chacun a reçu un ping.
- La sortie peut être dans n'importe quel ordre / format raisonnable.
- C'est le code-golf , donc le code le plus court en octets gagne!
Cas de test
[["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
double émoticône surprise.:3
) ou un ping ne satisfaisant aucun utilisateur dans la salle (par exemple@zzz
)?[["Doorknob","@Alex is wrong"],["Alex","I am only slightly wrong"]]
une entrée valide?Réponses:
JavaScript (ES6),
245210 octetsUtilise un objet pour créer une liste unique de noms aux côtés des pings. Ensuite, il recherche dans les messages les correspondances à l'une ou l'autre des conditions de ping. S'il s'agit d'un nom, il parcourt la liste des noms pour trouver s'il n'y a qu'une seule correspondance, puis s'incrémente. S'il s'agit d'une réponse, il fait simplement référence à cet index dans le tableau de messages et extrait le nom à incrémenter. Enfin, il renvoie l'objet.
la source
Map
est-ce plus amusant, non? Na, j'ai à l'origine surestimé combien il faudrait pour référencer un objet, pensant que je devrais avoir un tableau séparé pour les noms, mais vous avez raison, il est beaucoup plus court de cette façon.PHP, 227 octets
la source