39 lines
873 B
Python
39 lines
873 B
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
from collections import defaultdict
|
||
|
from typing import Dict, Optional, Iterable
|
||
|
from . import parse_numberdealers
|
||
|
|
||
|
|
||
|
def analyze_users(numbers: Iterable[parse_numberdealers.Message]) -> Dict[Optional[str], int]:
|
||
|
stats = defaultdict(lambda: 0)
|
||
|
|
||
|
for msg in numbers:
|
||
|
stats[msg.username] += 1
|
||
|
|
||
|
return dict(stats)
|
||
|
|
||
|
|
||
|
def report_users(numbers):
|
||
|
stats = analyze_users(numbers)
|
||
|
|
||
|
for username, count in sorted(stats.items(), key=lambda x: x[1]):
|
||
|
print(f"{count:5d} {username}")
|
||
|
|
||
|
|
||
|
def main():
|
||
|
import sys
|
||
|
numbers, errors = parse_numberdealers.parse(sys.stdin)
|
||
|
|
||
|
if numbers == [] and errors == []:
|
||
|
print("No input data")
|
||
|
else:
|
||
|
if numbers == []:
|
||
|
print("No valid number messages!")
|
||
|
else:
|
||
|
print(f"Checked from {numbers[0].recognized_number} up to {numbers[-1].recognized_number}")
|
||
|
report_users(numbers)
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
main()
|