Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import re
- def parse_ball(str):
- _, pl, team, _ = re.split('BALL ([a-zA-Z]*)\((\d)\)', str)
- return "BALL", pl, int(team)
- def parse_foul(str):
- _, pl, team, n, _ = re.split('FOUL ON ([a-zA-Z]*)\((\d)\) ([0-9]*)', str)
- return "FOUL ON", pl, int(team), int(n)
- def parse_ring(str):
- _, L, res, _ = re.split('RING ([0-9]*) ([0-9]*)', str)
- return "RING", int(L), int(res)
- def parse_free(str):
- _, res, _ = re.split('FREE ([0-9]*)', str)
- return "FREE", int(res)
- def parse_input(str):
- if 'BALL' in str:
- return parse_ball(str)
- elif 'FOUL' in str:
- return parse_foul(str)
- elif 'RING' in str:
- return parse_ring(str)
- elif 'FREE' in str:
- return parse_free(str)
- class Data:
- def __init__(self):
- self.score = 0
- self.transfer = 0
- self.block = 0
- self.get = 0
- def __str__(self):
- return "{} {} {} {}".format(self.score, self.transfer, self.block, self.get)
- N0 = int(input())
- names_0 = []
- for i in range(N0):
- names_0.append(input())
- N1 = int(input())
- names_1 = []
- for i in range(N1):
- names_1.append(input())
- Q = int(input())
- teams = {}
- teams[0] = {name: Data() for name in sorted(names_0)}
- teams[1] = {name: Data() for name in sorted(names_1)}
- prev_team = -1
- prev_player = None
- cur_team = -1
- cur_player = None
- prev_line = None
- foul_n = 0
- for i in range(Q):
- line = input()
- parsed = parse_input(line)
- op = parsed[0]
- if op == 'BALL':
- prev_team = cur_team
- prev_player = cur_player
- cur_team = parsed[2]
- cur_player = parsed[1]
- if prev_line != None:
- # block
- parsed_prev = parse_input(prev_line)
- if parsed_prev[0] == 'BALL':
- if parsed_prev[2] != cur_team:
- teams[cur_team][cur_player].block += 1
- # gets
- if parsed_prev[0] == 'FREE':# and cur_team != prev_team:
- if parsed_prev[1] == 0 and foul_n == 0:
- teams[cur_team][cur_player].get += 1
- if parsed_prev[0] == 'RING':# and cur_team != prev_team:
- if parsed_prev[2] == 0:
- teams[cur_team][cur_player].get += 1
- if op == 'FOUL ON':
- prev_team = cur_team
- prev_player = cur_player
- cur_team = parsed[2]
- cur_player = parsed[1]
- foul_n = parsed[3]
- if op == 'RING':
- L = parsed[1]
- res = parsed[2]
- # ring
- if res == 1 and L <= 675:
- teams[cur_team][cur_player].score += 2
- elif res == 1 and L > 675:
- teams[cur_team][cur_player].score += 3
- # transfer
- if res == 1 and prev_team == cur_team and prev_player != cur_player:
- teams[prev_team][prev_player].transfer += 1
- if op == 'FREE':
- foul_n -= 1
- res = parsed[1]
- if res == 1:
- #free
- teams[cur_team][cur_player].score += 1
- prev_line = line
- for tid, t in enumerate(teams):
- keys = sorted(teams[tid].keys())
- for k in keys:
- data = teams[tid][k]
- print(tid, k, data)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement