Skip to content

Commit 99ac5fa

Browse files
committed
add extra challenge
1 parent ade9095 commit 99ac5fa

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

for_dict_challenges_bonus.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
"""
2+
Пожалуйста, приступайте к этой задаче после того, как вы сделали и получили ревью ко всем остальным задачам
3+
в этом репозитории. Она значительно сложнее.
4+
5+
6+
Есть набор сообщений из чата в следующем формате:
7+
8+
```
9+
messages = [
10+
{
11+
"id": "efadb781-9b04-4aad-9afe-e79faef8cffb",
12+
"sent_at": datetime.datetime(2022, 10, 11, 23, 11, 11, 721),
13+
"sent_by": 46, # id пользователя-отправителя
14+
"reply_for": "7b22ae19-6c58-443e-b138-e22784878581", # id сообщение, на которое это сообщение является ответом (может быть None)
15+
"seen_by": [26, 91, 71], # идентификаторы пользователей, которые видели это сообщение
16+
"text": "А когда ревью будет?",
17+
}
18+
]
19+
```
20+
21+
Так же есть функция `generate_chat_history`, которая вернёт список из большого количества таких сообщений.
22+
Установите библиотеку lorem, чтобы она работала.
23+
24+
Нужно:
25+
1. Вывести айди пользователя, который написал больше всех сообщений.
26+
2. Вывести айди пользователя, на сообщения которого больше всего отвечали.
27+
3. Вывести айди пользователей, сообщения которых видело больше всего уникальных пользователей.
28+
4. Определить, когда в чате больше всего сообщений: утром (до 12 часов), днём (12-18 часов) или вечером (после 18 часов).
29+
5. Вывести идентификаторы сообщений, который стали началом для самых длинных тредов (цепочек ответов).
30+
31+
Весь код стоит разбить на логические части с помощью функций.
32+
"""
33+
import random
34+
import uuid
35+
import datetime
36+
37+
import lorem
38+
39+
40+
def generate_chat_history():
41+
messages_amount = random.randint(200, 1000)
42+
users_ids = list({random.randint(1, 10000) for _ in range(random.randint(5, 20))})
43+
sent_at = datetime.datetime.now() - datetime.timedelta(days=100)
44+
messages = []
45+
for _ in range(messages_amount):
46+
sent_at += datetime.timedelta(minutes=random.randint(0, 240))
47+
messages.append({
48+
"id": uuid.uuid4(),
49+
"sent_at": sent_at,
50+
"sent_by": random.choice(users_ids),
51+
"reply_for": random.choice([None, random.choice([m["id"] for m in messages]) if messages else []]),
52+
"seen_by": random.sample(users_ids, random.randint(1, len(users_ids))),
53+
"text": lorem.sentence(),
54+
})
55+
return messages
56+
57+
58+
if __name__ == "__main__":
59+
print(generate_chat_history())

0 commit comments

Comments
 (0)