rishiilluri

Untitled

Aug 20th, 2024
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.48 KB | None | 0 0
  1. def solution(members, events):
  2.     # Initialize a dictionary to keep track of mentions count for each member
  3.     mention_count = {member: 0 for member in members}
  4.    
  5.     # Initialize a dictionary to keep track of active status and offline expiry times
  6.     active_status = {member: True for member in members}
  7.     offline_expiry = {member: 0 for member in members}
  8.  
  9.     for event in events:
  10.         event_type = event[0]
  11.         timestamp = int(event[1])
  12.        
  13.         # Update the active status of users based on the current timestamp
  14.         for member in members:
  15.             if offline_expiry[member] <= timestamp:
  16.                 active_status[member] = True
  17.  
  18.         if event_type == "MESSAGE":
  19.             mentions = set(event[2].split())
  20.             all_mentioned = set()
  21.            
  22.             # Process "ALL" mention
  23.             if "ALL" in mentions:
  24.                 all_mentioned.update(members)
  25.                 mentions.remove("ALL")
  26.            
  27.             # Process "HERE" mention
  28.             if "HERE" in mentions:
  29.                 for member in members:
  30.                     if active_status[member]:
  31.                         all_mentioned.add(member)
  32.                 mentions.remove("HERE")
  33.            
  34.             # Add specific mentions
  35.             for mention in mentions:
  36.                 if mention in members:
  37.                     all_mentioned.add(mention)
  38.            
  39.             # Count mentions for valid members (ignore duplicate mentions in a single event)
  40.             valid_mentions = set()
  41.             for member in all_mentioned:
  42.                 valid_mentions.add(member)
  43.            
  44.             # Update the mention counts
  45.             for member in valid_mentions:
  46.                 mention_count[member] += 1
  47.        
  48.         elif event_type == "OFFLINE":
  49.             user_id = event[2]
  50.             if user_id in members:
  51.                 active_status[user_id] = False
  52.                 offline_expiry[user_id] = timestamp + 60
  53.    
  54.     # Generate the result list
  55.     result = [f"{member}={mention_count[member]}" for member in sorted(members)]
  56.    
  57.     return result
  58.  
  59. # Test the function
  60. members = ["id42", "id158", "id23"]
  61. events = [
  62.     ["MESSAGE", "0", "ALL id158 id42"],
  63.     ["OFFLINE", "1", "id158"],
  64.     ["MESSAGE", "2", "id158 id158"],
  65.     ["OFFLINE", "3", "id23"],
  66.     ["MESSAGE", "60", "HERE id158 id42 id23"],
  67.     ["MESSAGE", "61", "HERE"]
  68. ]
  69. print(solution(members, events))  # Output should be ["id158=4", "id23=2", "id42=3"]
  70.  
Advertisement
Add Comment
Please, Sign In to add comment