写一个聊天坪柜台


19

您的任务是编写一个程序,给该程序一个聊天消息列表,计算每个人被ping通的次数,这样我就可以知道每个人的受欢迎程度。但是,由于必须秘密执行此操作,因此我需要使其尽可能小以隐藏代码。

眼镜

  • 输入包含2个元组的列表,每个项目的形式为("username", "message")
  • 对另一个用户的ping定义为@后跟3个或更多明确表示该用户的字母。
  • 但是,您还必须考虑答复,必须以:messageid空格开头。
  • 假定第一条消息具有ID,0然后按顺序进行。
  • 输出每个用户并说出每个用户ping多少次。
  • 输出可以是任何顺序/合理的格式。
  • 这是,因此以字节为单位的最短代码胜出!

测试用例

[["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

2
我喜欢:0加倍的表情符号。
Doorknob

4
“我喜欢通过投票减少悲伤。” 您知道我只有一种正确的方法可以回应吗?;)
Geobits,2016年

9
我们在什么时候停止“亚历克斯错了”的笑话?
Martin Ender

1
回复可能超出范围(例如,以开头的第一条消息:3)还是无法满足会议室中任何用户的ping 请求(例如@zzz)?
Sp3000 '16

2
能够被ping通的用户在ping通时尚未发布消息吗?例如[["Doorknob","@Alex is wrong"],["Alex","I am only slightly wrong"]]有效的输入?
ETHproductions

Answers:


2

的JavaScript(ES6),245个 210字节

a=>(p={},a.map(b=>p[b[0]]=0),(a.map(b=>b[1].match(/@[a-z]{3,}|^:\d+/gi)||[]).map(c=>c.map(d=>(z=(d[0]=='@'?(y=Object.keys(p).filter(e=>e.startsWith(d.slice(1)))).length<2?y:0:a[d.slice(1)[0]]))&&p[z[0]]++))),p)

使用对象在ping旁边创建唯一的名称列表。然后,它会通过消息查找与ping条件是否匹配。如果是名称,它将遍历名称列表以查找是否只有一个匹配项,然后递增。如果是答复,它仅引用消息数组中的该索引并拉出要递增的名称。最后,它返回对象。


当然使用对象更短。如果不是,我认为您不需要将地图作为数组返回
Downgoat

@Downgoat但是Map有趣吗?不,我最初高估了引用一个对象要花多少钱,以为我必须为一个单独的名称数组,但是您说对了,这种方法要短得多。
Mwr247 '16

0

PHP,227字节

foreach($_GET[a]as $c){$r[]=&$n[$c[0]]??$n[$c[0]]=0;preg_match("#^(:(\d+)|@(\w+))#",$c[1],$m);$m[2]==""?!$m[3]?:count($a=preg_grep("#^{$m[3]}#",array_keys($n)))>1?:$n[end($a)]++:$r[$m[2]]++;}foreach(($n)as$k=>$v)echo"$k: $v\n";
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.