|
| 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