mirror of
https://github.com/DavidGailleton/42-Piscine_Python.git
synced 2026-03-13 20:56:54 +01:00
439 lines
14 KiB
Python
439 lines
14 KiB
Python
from typing import Generator
|
|
|
|
|
|
def fibonacci() -> Generator[int, None, None]:
|
|
before = 1
|
|
res = 0
|
|
while True:
|
|
yield res
|
|
res += before
|
|
before = res - before
|
|
|
|
|
|
def prime_number() -> Generator[int, None, None]:
|
|
prime: int = 2
|
|
while True:
|
|
yield prime
|
|
prime += 1
|
|
i: int = 2
|
|
while i < prime:
|
|
if not prime % i:
|
|
prime += 1
|
|
i = 2
|
|
else:
|
|
i += 1
|
|
|
|
|
|
def event_analytics(
|
|
events: list[dict[str, int | str | dict[str, int | str]]],
|
|
) -> Generator[None, None, dict[str, int]]:
|
|
data = {
|
|
"processed_event": 0,
|
|
"high_level_player": 0,
|
|
"treasure_events": 0,
|
|
"level_up_events": 0,
|
|
}
|
|
for event in events:
|
|
if event["data"]["level"] > 9:
|
|
data["high_level_player"] += 1
|
|
if event["event_type"] == "item_found":
|
|
data["treasure_events"] += 1
|
|
if event["event_type"] == "level_up":
|
|
data["level_up_events"] += 1
|
|
data["processed_event"] += 1
|
|
print(f"Event {event['id']}: Player {event['player']}\
|
|
(level {event['data']['level']}) {event['event_type']}")
|
|
yield None
|
|
return data
|
|
|
|
|
|
def game_data_stream_processor(
|
|
events: list[dict[str, int | str | dict[str, int | str]]],
|
|
) -> None:
|
|
print("=== Game Data Stream Processor ===\n")
|
|
print(f"Processing {len(events)} game events...\n")
|
|
try:
|
|
log = event_analytics(events)
|
|
while True:
|
|
next(log)
|
|
except StopIteration as res:
|
|
print("\n=== Stream Analytics ===")
|
|
print(f"Total events processed: {len(events)}")
|
|
print(f"High-level players: {res.value['high_level_player']}")
|
|
print(f"Treasure events: {res.value['treasure_events']}")
|
|
print(f"Level-up events: {res.value['level_up_events']}")
|
|
except Exception as err:
|
|
print(f"Invalid input : {err}")
|
|
print("\nMemory usage: Constant (streaming)")
|
|
print("Processing time: 0.045 seconds\n")
|
|
|
|
|
|
def generator_demo() -> None:
|
|
print("=== Generator Demonstration ===")
|
|
print("Fibonacci sequence (first 10):", end="")
|
|
fib = fibonacci()
|
|
for _ in range(10):
|
|
print(f" {next(fib)}", end="")
|
|
print("\nPrime number (first 5):", end="")
|
|
prime = prime_number()
|
|
for _ in range(5):
|
|
print(f" {next(prime)}", end="")
|
|
print("")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
data = [
|
|
{
|
|
"id": 1,
|
|
"player": "frank",
|
|
"event_type": "login",
|
|
"timestamp": "2024-01-01T23:17",
|
|
"data": {"level": 16, "score_delta": 128, "zone": "pixel_zone_2"},
|
|
},
|
|
{
|
|
"id": 2,
|
|
"player": "frank",
|
|
"event_type": "login",
|
|
"timestamp": "2024-01-22T23:57",
|
|
"data": {"level": 35, "score_delta": -11, "zone": "pixel_zone_5"},
|
|
},
|
|
{
|
|
"id": 3,
|
|
"player": "diana",
|
|
"event_type": "login",
|
|
"timestamp": "2024-01-01T02:13",
|
|
"data": {"level": 15, "score_delta": 417, "zone": "pixel_zone_5"},
|
|
},
|
|
{
|
|
"id": 4,
|
|
"player": "alice",
|
|
"event_type": "level_up",
|
|
"timestamp": "2024-01-07T22:41",
|
|
"data": {"level": 45, "score_delta": 458, "zone": "pixel_zone_4"},
|
|
},
|
|
{
|
|
"id": 5,
|
|
"player": "bob",
|
|
"event_type": "death",
|
|
"timestamp": "2024-01-19T08:51",
|
|
"data": {"level": 1, "score_delta": 63, "zone": "pixel_zone_4"},
|
|
},
|
|
{
|
|
"id": 6,
|
|
"player": "charlie",
|
|
"event_type": "kill",
|
|
"timestamp": "2024-01-05T06:48",
|
|
"data": {"level": 22, "score_delta": 4, "zone": "pixel_zone_1"},
|
|
},
|
|
{
|
|
"id": 7,
|
|
"player": "diana",
|
|
"event_type": "login",
|
|
"timestamp": "2024-01-12T11:38",
|
|
"data": {"level": 17, "score_delta": -56, "zone": "pixel_zone_4"},
|
|
},
|
|
{
|
|
"id": 8,
|
|
"player": "eve",
|
|
"event_type": "login",
|
|
"timestamp": "2024-01-30T12:05",
|
|
"data": {"level": 36, "score_delta": 200, "zone": "pixel_zone_5"},
|
|
},
|
|
{
|
|
"id": 9,
|
|
"player": "charlie",
|
|
"event_type": "level_up",
|
|
"timestamp": "2024-01-07T22:04",
|
|
"data": {"level": 3, "score_delta": 133, "zone": "pixel_zone_3"},
|
|
},
|
|
{
|
|
"id": 10,
|
|
"player": "alice",
|
|
"event_type": "logout",
|
|
"timestamp": "2024-01-28T03:24",
|
|
"data": {"level": 18, "score_delta": 364, "zone": "pixel_zone_3"},
|
|
},
|
|
{
|
|
"id": 11,
|
|
"player": "bob",
|
|
"event_type": "kill",
|
|
"timestamp": "2024-01-12T06:42",
|
|
"data": {"level": 18, "score_delta": -27, "zone": "pixel_zone_5"},
|
|
},
|
|
{
|
|
"id": 12,
|
|
"player": "frank",
|
|
"event_type": "logout",
|
|
"timestamp": "2024-01-18T23:15",
|
|
"data": {"level": 11, "score_delta": 373, "zone": "pixel_zone_4"},
|
|
},
|
|
{
|
|
"id": 13,
|
|
"player": "charlie",
|
|
"event_type": "item_found",
|
|
"timestamp": "2024-01-23T17:14",
|
|
"data": {"level": 44, "score_delta": 232, "zone": "pixel_zone_1"},
|
|
},
|
|
{
|
|
"id": 14,
|
|
"player": "bob",
|
|
"event_type": "login",
|
|
"timestamp": "2024-01-26T10:25",
|
|
"data": {"level": 18, "score_delta": -33, "zone": "pixel_zone_2"},
|
|
},
|
|
{
|
|
"id": 15,
|
|
"player": "eve",
|
|
"event_type": "item_found",
|
|
"timestamp": "2024-01-11T06:41",
|
|
"data": {"level": 32, "score_delta": 305, "zone": "pixel_zone_4"},
|
|
},
|
|
{
|
|
"id": 16,
|
|
"player": "bob",
|
|
"event_type": "kill",
|
|
"timestamp": "2024-01-05T07:47",
|
|
"data": {"level": 36, "score_delta": 451, "zone": "pixel_zone_3"},
|
|
},
|
|
{
|
|
"id": 17,
|
|
"player": "frank",
|
|
"event_type": "level_up",
|
|
"timestamp": "2024-01-14T18:25",
|
|
"data": {"level": 24, "score_delta": 124, "zone": "pixel_zone_2"},
|
|
},
|
|
{
|
|
"id": 18,
|
|
"player": "eve",
|
|
"event_type": "death",
|
|
"timestamp": "2024-01-03T01:55",
|
|
"data": {"level": 8, "score_delta": 56, "zone": "pixel_zone_2"},
|
|
},
|
|
{
|
|
"id": 19,
|
|
"player": "frank",
|
|
"event_type": "death",
|
|
"timestamp": "2024-01-20T02:24",
|
|
"data": {"level": 25, "score_delta": 379, "zone": "pixel_zone_5"},
|
|
},
|
|
{
|
|
"id": 20,
|
|
"player": "charlie",
|
|
"event_type": "level_up",
|
|
"timestamp": "2024-01-28T00:43",
|
|
"data": {"level": 47, "score_delta": 17, "zone": "pixel_zone_5"},
|
|
},
|
|
{
|
|
"id": 21,
|
|
"player": "charlie",
|
|
"event_type": "item_found",
|
|
"timestamp": "2024-01-11T03:18",
|
|
"data": {"level": 28, "score_delta": 61, "zone": "pixel_zone_4"},
|
|
},
|
|
{
|
|
"id": 22,
|
|
"player": "alice",
|
|
"event_type": "item_found",
|
|
"timestamp": "2024-01-29T23:16",
|
|
"data": {"level": 33, "score_delta": 82, "zone": "pixel_zone_5"},
|
|
},
|
|
{
|
|
"id": 23,
|
|
"player": "alice",
|
|
"event_type": "item_found",
|
|
"timestamp": "2024-01-10T20:32",
|
|
"data": {"level": 39, "score_delta": 103, "zone": "pixel_zone_2"},
|
|
},
|
|
{
|
|
"id": 24,
|
|
"player": "charlie",
|
|
"event_type": "logout",
|
|
"timestamp": "2024-01-18T16:58",
|
|
"data": {"level": 1, "score_delta": 231, "zone": "pixel_zone_4"},
|
|
},
|
|
{
|
|
"id": 25,
|
|
"player": "alice",
|
|
"event_type": "login",
|
|
"timestamp": "2024-01-30T11:56",
|
|
"data": {"level": 20, "score_delta": 145, "zone": "pixel_zone_1"},
|
|
},
|
|
{
|
|
"id": 26,
|
|
"player": "bob",
|
|
"event_type": "level_up",
|
|
"timestamp": "2024-01-03T02:46",
|
|
"data": {"level": 32, "score_delta": -30, "zone": "pixel_zone_5"},
|
|
},
|
|
{
|
|
"id": 27,
|
|
"player": "bob",
|
|
"event_type": "logout",
|
|
"timestamp": "2024-01-22T15:35",
|
|
"data": {"level": 11, "score_delta": 171, "zone": "pixel_zone_5"},
|
|
},
|
|
{
|
|
"id": 28,
|
|
"player": "eve",
|
|
"event_type": "death",
|
|
"timestamp": "2024-01-07T17:48",
|
|
"data": {"level": 47, "score_delta": 105, "zone": "pixel_zone_3"},
|
|
},
|
|
{
|
|
"id": 29,
|
|
"player": "diana",
|
|
"event_type": "item_found",
|
|
"timestamp": "2024-01-21T11:28",
|
|
"data": {"level": 34, "score_delta": 362, "zone": "pixel_zone_1"},
|
|
},
|
|
{
|
|
"id": 30,
|
|
"player": "bob",
|
|
"event_type": "logout",
|
|
"timestamp": "2024-01-03T10:01",
|
|
"data": {"level": 38, "score_delta": 467, "zone": "pixel_zone_2"},
|
|
},
|
|
{
|
|
"id": 31,
|
|
"player": "eve",
|
|
"event_type": "logout",
|
|
"timestamp": "2024-01-01T02:45",
|
|
"data": {"level": 41, "score_delta": -40, "zone": "pixel_zone_2"},
|
|
},
|
|
{
|
|
"id": 32,
|
|
"player": "alice",
|
|
"event_type": "login",
|
|
"timestamp": "2024-01-28T10:04",
|
|
"data": {"level": 33, "score_delta": 143, "zone": "pixel_zone_3"},
|
|
},
|
|
{
|
|
"id": 33,
|
|
"player": "frank",
|
|
"event_type": "death",
|
|
"timestamp": "2024-01-07T17:08",
|
|
"data": {"level": 47, "score_delta": 484, "zone": "pixel_zone_5"},
|
|
},
|
|
{
|
|
"id": 34,
|
|
"player": "diana",
|
|
"event_type": "logout",
|
|
"timestamp": "2024-01-26T15:51",
|
|
"data": {"level": 27, "score_delta": 94, "zone": "pixel_zone_1"},
|
|
},
|
|
{
|
|
"id": 35,
|
|
"player": "alice",
|
|
"event_type": "item_found",
|
|
"timestamp": "2024-01-14T11:27",
|
|
"data": {"level": 27, "score_delta": 378, "zone": "pixel_zone_1"},
|
|
},
|
|
{
|
|
"id": 36,
|
|
"player": "frank",
|
|
"event_type": "item_found",
|
|
"timestamp": "2024-01-21T03:03",
|
|
"data": {"level": 26, "score_delta": 247, "zone": "pixel_zone_1"},
|
|
},
|
|
{
|
|
"id": 37,
|
|
"player": "bob",
|
|
"event_type": "logout",
|
|
"timestamp": "2024-01-07T17:28",
|
|
"data": {"level": 9, "score_delta": 332, "zone": "pixel_zone_2"},
|
|
},
|
|
{
|
|
"id": 38,
|
|
"player": "charlie",
|
|
"event_type": "death",
|
|
"timestamp": "2024-01-08T02:28",
|
|
"data": {"level": 36, "score_delta": 0, "zone": "pixel_zone_1"},
|
|
},
|
|
{
|
|
"id": 39,
|
|
"player": "frank",
|
|
"event_type": "level_up",
|
|
"timestamp": "2024-01-27T00:05",
|
|
"data": {"level": 49, "score_delta": 142, "zone": "pixel_zone_2"},
|
|
},
|
|
{
|
|
"id": 40,
|
|
"player": "diana",
|
|
"event_type": "death",
|
|
"timestamp": "2024-01-16T06:55",
|
|
"data": {"level": 26, "score_delta": -40, "zone": "pixel_zone_2"},
|
|
},
|
|
{
|
|
"id": 41,
|
|
"player": "diana",
|
|
"event_type": "login",
|
|
"timestamp": "2024-01-13T08:59",
|
|
"data": {"level": 30, "score_delta": 192, "zone": "pixel_zone_4"},
|
|
},
|
|
{
|
|
"id": 42,
|
|
"player": "frank",
|
|
"event_type": "item_found",
|
|
"timestamp": "2024-01-26T17:42",
|
|
"data": {"level": 46, "score_delta": 398, "zone": "pixel_zone_2"},
|
|
},
|
|
{
|
|
"id": 43,
|
|
"player": "bob",
|
|
"event_type": "kill",
|
|
"timestamp": "2024-01-07T01:37",
|
|
"data": {"level": 48, "score_delta": 455, "zone": "pixel_zone_1"},
|
|
},
|
|
{
|
|
"id": 44,
|
|
"player": "frank",
|
|
"event_type": "kill",
|
|
"timestamp": "2024-01-02T01:37",
|
|
"data": {"level": 31, "score_delta": 414, "zone": "pixel_zone_5"},
|
|
},
|
|
{
|
|
"id": 45,
|
|
"player": "bob",
|
|
"event_type": "login",
|
|
"timestamp": "2024-01-17T02:54",
|
|
"data": {"level": 12, "score_delta": -30, "zone": "pixel_zone_5"},
|
|
},
|
|
{
|
|
"id": 46,
|
|
"player": "alice",
|
|
"event_type": "item_found",
|
|
"timestamp": "2024-01-28T07:25",
|
|
"data": {"level": 8, "score_delta": 483, "zone": "pixel_zone_2"},
|
|
},
|
|
{
|
|
"id": 47,
|
|
"player": "eve",
|
|
"event_type": "level_up",
|
|
"timestamp": "2024-01-02T19:05",
|
|
"data": {"level": 27, "score_delta": 497, "zone": "pixel_zone_5"},
|
|
},
|
|
{
|
|
"id": 48,
|
|
"player": "eve",
|
|
"event_type": "kill",
|
|
"timestamp": "2024-01-30T08:13",
|
|
"data": {"level": 43, "score_delta": 221, "zone": "pixel_zone_2"},
|
|
},
|
|
{
|
|
"id": 49,
|
|
"player": "charlie",
|
|
"event_type": "death",
|
|
"timestamp": "2024-01-05T21:41",
|
|
"data": {"level": 20, "score_delta": 368, "zone": "pixel_zone_3"},
|
|
},
|
|
{
|
|
"id": 50,
|
|
"player": "alice",
|
|
"event_type": "login",
|
|
"timestamp": "2024-01-15T19:36",
|
|
"data": {"level": 7, "score_delta": -25, "zone": "pixel_zone_5"},
|
|
},
|
|
]
|
|
game_data_stream_processor(data)
|
|
generator_demo()
|