एक चैट पिंग काउंटर लिखें


19

आपका कार्य एक प्रोग्राम लिखना है, जिसने चैट संदेशों की एक सूची दी है, यह गिनें कि प्रत्येक व्यक्ति कितनी बार पिंग करता है, इसलिए मुझे पता चल सकता है कि हर कोई कितना लोकप्रिय है। लेकिन, चूंकि मुझे इसे सरसरी तौर पर करना है, मुझे इसे जितना संभव हो उतना छोटा करने की आवश्यकता है ताकि मैं कोड छिपा सकूं।

ऐनक

  • इनपुट 2-ट्यूपल्स की सूची में आता है, जिसमें प्रत्येक आइटम फॉर्म का होता है ("username", "message")
  • किसी अन्य उपयोगकर्ता के लिए एक पिंग को @3 या उससे अधिक अक्षरों के बाद परिभाषित किया जाता है जो स्पष्ट रूप से उस उपयोगकर्ता को संदर्भित करता है।
  • हालाँकि, आपको उन उत्तरों पर भी विचार करना होगा, जिन्हें किसी स्थान से शुरू करना :messageidहै।
  • मान लें कि पहले संदेश में आईडी है 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आश्चर्य है कि एक हैरान करने वाले इमोटिकॉन के रूप में डबल्स कैसे होते हैं ।
दरवाज़े

4
"मुझे चढ़ाव के माध्यम से उदासी पैदा करना पसंद है।" आप जानते हैं कि केवल एक उचित तरीका है जिससे मैं उस पर प्रतिक्रिया कर सकता हूं, है ना? ;)
ज्योबिट्स

9
किस बिंदु पर हम "एलेक्स गलत है" चुटकुलों के साथ रोक रहे हैं?
मार्टिन एंडर

1
क्या कोई उत्तर सीमा से बाहर हो सकता है (उदाहरण के साथ शुरू होने वाला पहला संदेश :3) या कमरे में किसी भी उपयोगकर्ता को संतुष्ट न करने वाला पिंग (जैसे @zzz)?
Sp3000

2
क्या एक पिंग किए गए उपयोगकर्ता ने अभी तक एक संदेश पोस्ट नहीं किया है जब वह पिंग कर रहा होगा? जैसे है [["Doorknob","@Alex is wrong"],["Alex","I am only slightly wrong"]]मान्य इनपुट?
ETHproductions

जवाबों:


2

जावास्क्रिप्ट (ईएस 6), 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)

पिंग्स के साथ नामों की एक अनूठी सूची बनाने के लिए किसी ऑब्जेक्ट का उपयोग करता है। फिर यह मैचों के लिए संदेशों के माध्यम से या तो पिंग स्थिति को देखता है। यदि कोई नाम है, तो यह पता लगाने के लिए नामों की सूची के माध्यम से दिखता है कि क्या केवल एक मैच है, और फिर वेतन वृद्धि। यदि कोई उत्तर देता है, तो यह संदेश सरणी में केवल उस इंडेक्स को संदर्भित करता है और नाम को बढ़ा हुआ होने के लिए खींचता है। अंत में, यह ऑब्जेक्ट लौटाता है।


निश्चित रूप से किसी वस्तु का उपयोग कम है। यदि ऐसा नहीं है, तो मुझे नहीं लगता कि आपको मानचित्र को एक सरणी के रूप में वापस करने की आवश्यकता है
डाउनग्रेड 22

@Downgoat लेकिन Mapक्या अधिक मज़ा सही है? ना, मैंने मूल रूप से एक वस्तु को संदर्भित करने में कितना अतिरिक्त लगेगा, यह सोचकर कि मुझे नामों के लिए एक अलग सरणी में होना होगा, लेकिन आप सही हैं कि यह इस तरह से बहुत कम है।
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";
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.