Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Creative category for Web Log Sessions by _Chico_
import datetime
import re
class log(object):
def __init__(self, log_text):
temp = log_text.split(';;')
time = [int(i) for i in temp[0].split('-')]
self.time = datetime.datetime(*time)
self.name = temp[1].lower()
self.address = temp[2]
return
class session(object):
def __init__(self,log):
self.logs = []
self.add(log)
self.name = log.name
p1 = r'//.*?/'
p2 = r'//.*'
url = re.search(p1, log.address)
if url:
url = url.group(0)[2:-1]
else:
url = re.search(p2, log.address)
url = url.group(0)[2:]
self.address = url.split('.')[-2] + '.' + url.split('.')[-1]
self.duration = 1
self.quantity = 1
self.MIN = self.logs[-1].time
self.MAX = self.logs[-1].time
def add(self,log):
self.logs.append(log)
self.update()
def update(self):
self.quantity = len(self.logs)
self.MIN = min(self.logs, key=lambda x: x.time).time
self.MAX = max(self.logs, key=lambda x: x.time).time
self.duration = (self.MAX-self.MIN).total_seconds()+1
self.logs.sort(key=lambda x: x.time)
def judge(self,log):
if log.name != self.name or self.address not in log.address:
return False
# elif self.address not in log.address:
# return False
elif any(abs((log.time-i.time).total_seconds()) <= 1800 for i in self.logs):
return True
return False
def output(self):
return '{};;{};;{:.0f};;{}'.format(self.name, self.address, self.duration, self.quantity)
def checkio(log_text):
log_list = []
session_list = []
result = []
for i in log_text.split('\n'):
log_list.append(log(i))
for i in log_list:
for j in session_list:
if j.judge(i):
j.add(i)
break
else:
session_list.append(session(i))
session_list.sort(key=lambda x: [x.name, x.address, x.duration, x.quantity])
for i in session_list:
result.append(i.output())
return '\n'.join(result)
May 18, 2021