Посчитать время событий в списке
Есть список кортежей, первый элемент которых - время гола, а второй - обозначение команды. Время матча ограничим 94 минутами.
Как получить 6 значений:
- Команда H вела в счёте * минут;
- Команда H и А играли с одинаковым счётом * минут;
- Команда H проигрывала в счёте * минут;
- Команда A вела в счёте * минут;
- Команда H и А играли с одинаковым счётом * минут;
- Команда A проигрывала в счёте * минут?
goaltimer([(40, H), (51, H), (59, A), (71, A),(85, H), (88, A),(93, H)])
[35,59,0,0,59,35]
Ответы (2 шт):
Автор решения: MBo
→ Ссылка
Сделайте относительный счёт - разность голов. Пройдите по списку, добавляя +1, если первая команда, или -1, если вторая, и запоминая последнее время.
Если счёт становится из нулевого положительным - начался интервал первого типа. По его окончании добавьте длину интервала к соответствующему значению.
if count == 0 and goaltimer[1] == H:
times[currenttype] += goaltimer[0] - starttime
starttime = goaltimer[0]
currenttype = 1
count +=1
elif count == 1 and goaltimer[1] == A:
times[currenttype] += goaltimer[0] - starttime
starttime = goaltimer[0]
currenttype = 0
count -=1
...
Так же рассмотрите остальные переходы - в 0, в минус.
Автор решения: Alexandr Kosolapov
→ Ссылка
ff = [(40, 'H'), (51, 'H'), (59, 'A'), (71, 'A'),(85, 'H'), (88, 'A'),(93, 'H')]
def forces(ff):
ff = ff + [(94,'F')]
t1 = t2 = t3 = h = a = c = 0
for f in ff:
if c == 0:
start = f[0]
if f[1] == 'H': h += 1
if f[1] == 'A': a += 1
t2 += f[0]
else:
temp = f[0] - start
past = h-a
if f[1] == 'H': h += 1
if f[1] == 'A': a += 1
if f[1] != 'F':
if past == 0: t2 += temp
if (past > 0) and (h>=a): t1 += temp
if (past < 0) and (h<=a): t3 += temp
if f[1] == 'F':
if past == 0: t2 += temp
if (past > 0) and (h>=a): t1 += temp
if (past < 0) and (h<=a): t3 += temp
print(f,h,a,temp,t1,t2,t3)
start = f[0]
c+=1
return [t1,t2,t3]
forces(ff)