Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def solution(members, events):
- # Initialize a dictionary to keep track of mentions count for each member
- mention_count = {member: 0 for member in members}
- # Initialize a dictionary to keep track of active status and offline expiry times
- active_status = {member: True for member in members}
- offline_expiry = {member: 0 for member in members}
- for event in events:
- event_type = event[0]
- timestamp = int(event[1])
- # Update the active status of users based on the current timestamp
- for member in members:
- if offline_expiry[member] <= timestamp:
- active_status[member] = True
- if event_type == "MESSAGE":
- mentions = set(event[2].split())
- all_mentioned = set()
- # Process "ALL" mention
- if "ALL" in mentions:
- all_mentioned.update(members)
- mentions.remove("ALL")
- # Process "HERE" mention
- if "HERE" in mentions:
- for member in members:
- if active_status[member]:
- all_mentioned.add(member)
- mentions.remove("HERE")
- # Add specific mentions
- for mention in mentions:
- if mention in members:
- all_mentioned.add(mention)
- # Count mentions for valid members (ignore duplicate mentions in a single event)
- valid_mentions = set()
- for member in all_mentioned:
- valid_mentions.add(member)
- # Update the mention counts
- for member in valid_mentions:
- mention_count[member] += 1
- elif event_type == "OFFLINE":
- user_id = event[2]
- if user_id in members:
- active_status[user_id] = False
- offline_expiry[user_id] = timestamp + 60
- # Generate the result list
- result = [f"{member}={mention_count[member]}" for member in sorted(members)]
- return result
- # Test the function
- members = ["id42", "id158", "id23"]
- events = [
- ["MESSAGE", "0", "ALL id158 id42"],
- ["OFFLINE", "1", "id158"],
- ["MESSAGE", "2", "id158 id158"],
- ["OFFLINE", "3", "id23"],
- ["MESSAGE", "60", "HERE id158 id42 id23"],
- ["MESSAGE", "61", "HERE"]
- ]
- print(solution(members, events)) # Output should be ["id158=4", "id23=2", "id42=3"]
Advertisement
Add Comment
Please, Sign In to add comment