def _assignment_scoreboard(is_export, _, tdoc, ranked_tsdocs, udict, dudict, pdict): columns = [] columns.append({'type': 'rank', 'value': _('Rank')}) columns.append({'type': 'user', 'value': _('User')}) columns.append({'type': 'display_name', 'value': _('Display Name')}) columns.append({'type': 'total_score', 'value': _('Score')}) if is_export: columns.append({'type': 'total_original_score', 'value': _('Original Score')}) columns.append({'type': 'total_time', 'value': _('Total Time (Seconds)')}) columns.append({'type': 'total_time_str', 'value': _('Total Time')}) for index, pid in enumerate(tdoc['pids']): if is_export: columns.append({'type': 'problem_score', 'value': '#{0} {1}'.format(index + 1, pdict[pid]['title'])}) columns.append({'type': 'problem_original_score', 'value': '#{0} {1}'.format(index + 1, _('Original Score'))}) columns.append({'type': 'problem_time', 'value': '#{0} {1}'.format(index + 1, _('Time (Seconds)'))}) columns.append({'type': 'problem_time_str', 'value': '#{0} {1}'.format(index + 1, _('Time'))}) else: columns.append({'type': 'problem_detail', 'value': '#{0}'.format(index + 1), 'raw': pdict[pid]}) rows = [columns] for rank, tsdoc in ranked_tsdocs: if 'detail' in tsdoc: tsddict = {item['pid']: item for item in tsdoc['detail']} else: tsddict = {} row = [] row.append({'type': 'string', 'value': rank}) row.append({'type': 'user', 'value': udict[tsdoc['uid']]['uname'], 'raw': udict[tsdoc['uid']]}) row.append({'type': 'display_name', 'value': dudict.get(tsdoc['uid'], {}).get('display_name', '')}) row.append({'type': 'string', 'value': tsdoc.get('penalty_score', 0)}) if is_export: row.append({'type': 'string', 'value': tsdoc.get('score', 0)}) row.append({'type': 'string', 'value': tsdoc.get('time', 0.0)}) row.append({'type': 'string', 'value': misc.format_seconds(tsdoc.get('time', 0))}) for pid in tdoc['pids']: rdoc = tsddict.get(pid, {}).get('rid', None) col_score = tsddict.get(pid, {}).get('penalty_score', '-') col_original_score = tsddict.get(pid, {}).get('score', '-') col_time = tsddict.get(pid, {}).get('time', '-') col_time_str = misc.format_seconds(col_time) if col_time != '-' else '-' if is_export: row.append({'type': 'string', 'value': col_score}) row.append({'type': 'string', 'value': col_original_score}) row.append({'type': 'string', 'value': col_time}) row.append({'type': 'string', 'value': col_time_str}) else: row.append({'type': 'record', 'value': '{0} / {1}\n{2}'.format(col_score, col_original_score, col_time_str), 'raw': rdoc}) rows.append(row) return rows
def _acm_scoreboard(is_export, _, tdoc, ranked_tsdocs, udict, dudict, pdict): columns = [] columns.append({'type': 'rank', 'value': _('Rank')}) columns.append({'type': 'user', 'value': _('User')}) columns.append({'type': 'display_name', 'value': _('Display Name')}) columns.append({'type': 'solved_problems', 'value': _('Solved Problems')}) if is_export: columns.append({'type': 'total_time', 'value': _('Total Time (Seconds)')}) columns.append({'type': 'total_time_str', 'value': _('Total Time')}) for index, pid in enumerate(tdoc['pids']): if is_export: columns.append({'type': 'problem_flag', 'value': '#{0} {1}'.format(index + 1, pdict[pid]['title'])}) columns.append({'type': 'problem_time', 'value': '#{0} {1}'.format(index + 1, _('Time (Seconds)'))}) columns.append({'type': 'problem_time_str', 'value': '#{0} {1}'.format(index + 1, _('Time'))}) else: columns.append({'type': 'problem_detail', 'value': '#{0}'.format(index + 1), 'raw': pdict[pid]}) rows = [columns] for rank, tsdoc in ranked_tsdocs: if 'detail' in tsdoc: tsddict = {item['pid']: item for item in tsdoc['detail']} else: tsddict = {} row = [] row.append({'type': 'string', 'value': rank}) row.append({'type': 'user', 'value': udict[tsdoc['uid']]['uname'], 'raw': udict[tsdoc['uid']]}) row.append({'type': 'display_name', 'value': dudict.get(tsdoc['uid'], {}).get('display_name', '')}) row.append({'type': 'string', 'value': tsdoc.get('accept', 0)}) if is_export: row.append({'type': 'string', 'value': tsdoc.get('time', 0.0)}) row.append({'type': 'string', 'value': misc.format_seconds(tsdoc.get('time', 0.0))}) for pid in tdoc['pids']: if tsddict.get(pid, {}).get('accept', False): rdoc = tsddict[pid]['rid'] col_accepted = _('Accepted') col_time = tsddict[pid]['time'] col_time_str = misc.format_seconds(col_time) else: rdoc = None col_accepted = '-' col_time = '-' col_time_str = '-' if is_export: row.append({'type': 'string', 'value': col_accepted}) row.append({'type': 'string', 'value': col_time}) row.append({'type': 'string', 'value': col_time_str}) else: row.append({'type': 'record', 'value': '{0}\n{1}'.format(col_accepted, col_time_str), 'raw': rdoc}) rows.append(row) return rows
def _assignment_scoreboard(is_export, _, tdoc, ranked_tsdocs, udict, pdict): ranked_tsdocs = list(ranked_tsdocs) casenumdict = {} if is_export: for rank, tsdoc in ranked_tsdocs: if 'detail' in tsdoc: for detail in tsdoc['detail']: if 'rdoc' in detail: casenum = len(detail['rdoc']['cases']) if detail['pid'] not in casenumdict: casenumdict[detail['pid']] = casenum else: casenumdict[detail['pid']] = max( casenumdict[detail['pid']], casenum) columns = [] columns.append({'type': 'rank', 'value': _('Rank')}) columns.append({'type': 'user', 'value': _('User')}) columns.append({'type': 'uid', 'value': _('ID')}) columns.append({'type': 'total_score', 'value': _('Score')}) if is_export: columns.append({ 'type': 'total_original_score', 'value': _('Original Score') }) columns.append({ 'type': 'total_time', 'value': _('Total Time (Seconds)') }) columns.append({'type': 'total_time_str', 'value': _('Total Time')}) for index, pid in enumerate(tdoc['pids']): if is_export: columns.append({ 'type': 'problem_score', 'value': '#{0} {1}'.format(index + 1, pdict[pid]['title']) }) columns.append({ 'type': 'problem_original_score', 'value': '#{0} {1}'.format(index + 1, _('Original Score')) }) columns.append({ 'type': 'problem_time', 'value': '#{0} {1}'.format(index + 1, _('Time (Seconds)')) }) columns.append({ 'type': 'problem_time_str', 'value': '#{0} {1}'.format(index + 1, _('Time')) }) if pid in casenumdict: for case in range(casenumdict[pid]): columns.append({ 'type': 'problem_case_detail', 'value': '#{0} {1} {2}'.format(index + 1, _('Case'), case + 1) }) else: columns.append({ 'type': 'problem_detail', 'value': '#{0}'.format(index + 1), 'raw': pdict[pid] }) rows = [columns] for rank, tsdoc in ranked_tsdocs: if 'detail' in tsdoc: tsddict = {item['pid']: item for item in tsdoc['detail']} else: tsddict = {} row = [] row.append({'type': 'string', 'value': rank}) row.append({ 'type': 'user', 'value': udict[tsdoc['uid']]['realname'], 'raw': udict[tsdoc['uid']] }) row.append({'type': 'string', 'value': udict[tsdoc['uid']]['_id']}) row.append({'type': 'string', 'value': tsdoc.get('penalty_score', 0)}) if is_export: row.append({'type': 'string', 'value': tsdoc.get('score', 0)}) row.append({'type': 'string', 'value': tsdoc.get('time', 0.0)}) row.append({ 'type': 'string', 'value': misc.format_seconds(tsdoc.get('time', 0)) }) for pid in tdoc['pids']: rid = tsddict.get(pid, {}).get('rid', None) rdoc = tsddict.get(pid, {}).get('rdoc', None) col_score = tsddict.get(pid, {}).get('penalty_score', '-') col_original_score = tsddict.get(pid, {}).get('score', '-') col_time = tsddict.get(pid, {}).get('time', '-') col_time_str = misc.format_seconds( col_time) if col_time != '-' else '-' if is_export: row.append({'type': 'string', 'value': col_score}) row.append({'type': 'string', 'value': col_original_score}) row.append({'type': 'string', 'value': col_time}) row.append({'type': 'string', 'value': col_time_str}) if pid in casenumdict and rdoc: casenum = len(rdoc['cases']) for case in range(casenumdict[pid]): if case < casenum: row.append({ 'type': 'string', 'value': rdoc['cases'][case].get('score', 0) }) else: row.append({'type': 'string', 'value': 0}) else: row.append({ 'type': 'record', 'value': '{0} / {1}\n{2}'.format(col_score, col_original_score, col_time_str), 'raw': rid }) rows.append(row) return rows