채팅 핑 카운터 작성


19

당신의 임무는 채팅 메시지 목록을 제공하는 프로그램을 작성하는 것입니다. 각 사람이 얼마나 많은 시간을 핑을했는지 계산하여 모든 사람의 인기를 알 수 있습니다. 그러나 비밀리에해야하므로 코드를 숨길 수 있도록 가능한 한 작아야합니다.

명세서

  • 입력은 2 개의 튜플 목록으로 제공되며 각 항목은 형식 ("username", "message")입니다.
  • 다른 사용자에 대한 핑은 그 사용자 @를 명확하게 참조하는 3 자 이상의 문자 로 정의됩니다 .
  • 그러나 :messageid공백 으로 시작해야하는 답장도 고려해야합니다 .
  • 첫 번째 메시지에 ID가 있다고 가정하고 0순차적으로 진행하십시오.
  • 각 사용자를 출력하고 각 사용자가 핑한 횟수를 말합니다.
  • 출력은 임의의 순서 / 합리적인 형식이 될 수 있습니다.
  • 이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다!

테스트 사례

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

9
우리는 어느 시점에서 "Alex is wrong"농담으로 멈추고 있습니까?
Martin Ender

1
답장이 범위를 벗어날 수 있습니까 (예 :으로 시작하는 첫 번째 메시지 :3) 또는 회의실의 사용자를 만족시키지 않는 핑 (예 :) @zzz입니까?
Sp3000

2
핑된 사용자가 핑할 때 아직 메시지를 게시 할 수 없습니까? 예를 들어 [["Doorknob","@Alex is wrong"],["Alex","I am only slightly wrong"]]유효한 입력입니까?
ETHproductions

답변:


2

자바 스크립트 (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 조건과 일치하는지 확인합니다. 이름 인 경우 이름 목록을 살펴보고 일치하는 항목이 하나만 있는지 확인한 다음 증가시킵니다. 응답 인 경우 단순히 메시지 배열에서 해당 인덱스를 참조하고 증가시킬 이름을 가져옵니다. 마지막으로 객체를 반환합니다.


확실히 객체를 사용하는 것이 더 짧습니다. 그렇지 않으면 당신이 배열로지도를 반환 할 필요가 있다고 생각하지 않습니다
Downgoat

@ Downgoat 그러나 Map더 재미 있습니까? Na, 나는 원래 이름에 대해 별도의 배열을 사용해야한다고 생각하면서 객체를 참조하는 데 필요한 여분의 양을 과대 평가했지만이 방법으로는 훨씬 짧습니다.
Mwr247

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";
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.