mirror of
https://github.com/creyD/intelliphoto.git
synced 2026-04-12 19:40:28 +02:00
113 lines
2.9 KiB
Python
113 lines
2.9 KiB
Python
import sys
|
|
from datetime import datetime
|
|
from collections import Counter
|
|
import random
|
|
|
|
timepoints = []
|
|
weeks = []
|
|
|
|
factors = {
|
|
"Conrad": 1/3,
|
|
"Paul": 2,
|
|
"Basti": 3/2
|
|
}
|
|
|
|
summands_min = {
|
|
"Paul": 20
|
|
}
|
|
|
|
summands_max = {
|
|
"Paul": 300
|
|
}
|
|
|
|
def newCounter():
|
|
return Counter({
|
|
"Conrad": 0,
|
|
"Paul": 0,
|
|
"Basti": 0,
|
|
"Seb": 0,
|
|
"Mucke": 0,
|
|
"Jan": 0
|
|
})
|
|
|
|
class AuthorTimepoint:
|
|
def __init__(self, line):
|
|
parts = line.split()
|
|
self.time = datetime.fromtimestamp(int(parts[0]))
|
|
self.lines = Counter({
|
|
"Conrad": int(parts[1]) + int(parts[9]),
|
|
"Paul": int(parts[6]),
|
|
"Basti": int(parts[5]) + int(parts[8]),
|
|
"Seb": int(parts[7]) + int(parts[11]),
|
|
"Mucke": int(parts[2]) + int(parts[4]),
|
|
"Jan": int(parts[3]) + int(parts[10])
|
|
})
|
|
|
|
class AuthorWeek:
|
|
def __init__(self, week, lines):
|
|
self.week = week
|
|
self.lines = lines
|
|
|
|
def __repr__(self):
|
|
all = {**dict(newCounter()), **dict(self.lines)}
|
|
final = {}
|
|
numZeros = 0
|
|
|
|
for line_c in all.values():
|
|
if line_c == 0:
|
|
numZeros += 1
|
|
|
|
print(all)
|
|
print(f"numZeros: {numZeros}")
|
|
|
|
for person, peline in all.items():
|
|
# print(person)
|
|
fac = factors.get(person, 1)
|
|
|
|
if numZeros > 2 and peline == 0:
|
|
final[person] = 0
|
|
else:
|
|
sum_n = summands_min.get(person, 0)
|
|
|
|
if sum_n != summands_max.get(person, 0):
|
|
sum_n = random.randrange(sum_n, summands_max.get(person, 0))
|
|
|
|
final[person] = min(int(fac * (peline + sum_n)), 7000)
|
|
|
|
print("final.values")
|
|
print(final.values())
|
|
finished_line = str(self.week) + " " + " ".join([str(v) for v in final.values()])
|
|
print(finished_line)
|
|
return finished_line
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) >= 3:
|
|
with open(sys.argv[1], "r", encoding="utf-8") as f:
|
|
for line in f:
|
|
timepoints.append(AuthorTimepoint(line))
|
|
|
|
cur_week = ""
|
|
lines_week = newCounter()
|
|
last_lines = newCounter()
|
|
|
|
for timepoint in timepoints:
|
|
elem_week = timepoint.time.isocalendar()[1]
|
|
|
|
if cur_week != elem_week:
|
|
if cur_week:
|
|
weeks.append(AuthorWeek(cur_week, lines_week))
|
|
lines_week = newCounter()
|
|
cur_week = elem_week
|
|
|
|
lines_week += timepoint.lines - last_lines
|
|
last_lines = timepoint.lines
|
|
|
|
with open(sys.argv[2], "w", encoding="utf-8") as f:
|
|
f.write("KW" + " " + " ".join(newCounter().keys()) + "\n")
|
|
for week in weeks:
|
|
f.write(str(week) + "\n")
|
|
else:
|
|
print("Not enough arguments.")
|
|
|
|
|