チャットPingカウンターを書く


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驚きの絵文字としての機能が気に入っています。
ドアノブ

4
「私は、投票を通して悲しみを引き起こすのが好きです。」あなたが私がそれに答えることができる唯一の適切な方法があることを知っていますよね?;)
ジオビット

9
どの時点で「アレックスは間違っています」ジョークで停止しますか?
マーティンエンダー

1
返信が範囲外である場合(例:で始まる最初のメッセージ:3)、または部屋のユーザーを満足させないpingである場合(例@zzz:)
Sp3000

2
pingを実行したユーザーは、pingを実行してもまだメッセージを投稿できませんか?たとえば、[["Doorknob","@Alex is wrong"],["Alex","I am only slightly wrong"]]有効な入力はありますか?
-ETHproductions

回答:


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条件に一致するものを探します。名前の場合、名前のリストを調べて、一致するものが1つだけあるかどうかを確認し、増分します。返信の場合、メッセージ配列内のそのインデックスを参照し、インクリメントする名前を取得します。最後に、オブジェクトを返します。


確かにオブジェクトの使用は短くなります。そうでない場合、マップを配列として返す必要はないと思います
-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.