Skip to content

Instantly share code, notes, and snippets.

@soon
Created August 27, 2014 08:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save soon/9257c1bc55e29bc71f15 to your computer and use it in GitHub Desktop.
Save soon/9257c1bc55e29bc71f15 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
from itertools import islice
from bs4 import BeautifulSoup
from codeforces import CodeforcesAPI, VerdictType
from urllib import request
import sys
def load_source_code_from_submission(submission):
url = generate_submission_url(submission)
return load_submission_source_by_url(url)
def generate_submission_url(submission):
return 'http://codeforces.com/contest/{}/submission/{}'.format(submission.contest_id, submission.id)
def load_submission_source_by_url(url):
with request.urlopen(url) as page:
soup = BeautifulSoup(page.readall())
return parse_submission_source_from_tag(soup.find('pre', class_='prettyprint'))
def parse_submission_source_from_tag(soup_tag):
return soup_tag.string
def filter_successful_submissions(submissions):
return filter(lambda s: s.verdict == VerdictType.ok, submissions)
def filter_submissions_by_problem_index(problem_index, submissions):
return filter(lambda s: s.problem.index == problem_index, submissions)
def load_successful_submissions(contest_id, problem_index, start):
api = CodeforcesAPI()
submissions = api.contest_status(contest_id)
submissions = filter_submissions_by_problem_index(problem_index, filter_successful_submissions(submissions))
return islice(submissions, start, None)
def load_src_from_file(path):
with open(path, 'r') as f:
return f.read()
def main(contest_id, problem_id, start):
submissions = load_successful_submissions(contest_id, problem_id, start)
for i, s in enumerate(submissions):
print('Processing submission #{} ({})'.format(s.id, i + start))
submission_src = load_source_code_from_submission(s)
with open('submissions_{}/{}'.format(contest_id, s.id), 'w') as f:
f.write(submission_src)
if __name__ == '__main__':
main(int(sys.argv[1]), sys.argv[2], int(sys.argv[3]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment