Sohbet Ping Sayacı Yaz


19

Göreviniz, sohbet mesajlarının bir listesini veren bir program yazmak, her bir kişinin kaç kez pinglendiğini saymaktır, böylece herkesin ne kadar popüler olduğunu öğrenebilirim. Ancak, bunu gizli bir şekilde yapmak zorunda olduğum için, kodu gizleyebilmem için mümkün olduğunca küçük olmam gerekiyor.

gözlük

  • Giriş, 2 öğeden oluşan bir listede gelir ve her öğe formdadır ("username", "message").
  • Başka bir kullanıcıya ping, @ardından açıkça o kullanıcıya atıfta bulunan 3 veya daha fazla harf olarak tanımlanır .
  • Bununla birlikte, :messageidbir boşlukla başlayan yanıtları da dikkate almanız gerekir .
  • İlk iletinin kimliğine sahip olduğunu varsayın 0ve sırayla ilerleyin.
  • Her bir kullanıcının çıktısını alın ve her birinin kaç kez pinglendiğini söyleyin.
  • Çıktı herhangi bir sırada / makul biçimde olabilir.
  • Bu , bayt en kısa kod kazanır!

Test Durumları

[["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
:0Sürpriz bir ifade olarak iki katına çıkmayı seviyorum .
Kapı tokmağı

4
"Downvotes aracılığıyla üzüntü yaratmayı seviyorum." Buna cevap verebileceğim tek bir yol var, değil mi? ;)
Geobits

9
"Alex yanlış" şakalarıyla hangi noktada duruyoruz?
Martin Ender

1
Yanıt aralık dışında (örn. İle başlayan ilk mesaj :3) veya odadaki herhangi bir kullanıcıyı tatmin etmeyen bir ping (ör. @zzz) Olabilir mi?
Sp3000

2
Ping yapan bir kullanıcı, ping yaparken henüz bir mesaj göndermemiş olabilir mi? örn. [["Doorknob","@Alex is wrong"],["Alex","I am only slightly wrong"]]geçerli girdi mi?
ETHproductions

Yanıtlar:


2

JavaScript (ES6), 245 210 bayt

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)

Pinglerin yanında benzersiz bir ad listesi oluşturmak için bir nesne kullanır. Daha sonra her iki ping koşulu ile eşleşme mesajlarını arar. Bir ad varsa, yalnızca bir eşleşme olup olmadığını bulmak için adlar listesine bakar ve sonra artar. Bir yanıt varsa, ileti dizisindeki bu dizine başvurur ve artırılacak adı çeker. Son olarak, nesneyi döndürür.


Elbette bir nesne kullanmak daha kısadır. Değilse,
haritayı

@Downgoat Ama Mapdaha eğlenceli değil mi? Na, başlangıçta bir nesneye başvurmak için ne kadar fazladan fazla alacağını tahmin ettim, isimler için ayrı bir diziye ihtiyacım olacağını düşündüm, ama bu şekilde çok daha kısa olduğu konusunda haklısın.
Mwr247

0

PHP, 227 Bayt

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";
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.