Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #5
0
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