-
Notifications
You must be signed in to change notification settings - Fork 1
/
submission_autograder.py
30 lines (25 loc) · 8.8 KB
/
submission_autograder.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
from codecs import open
import os, ssl
if (not os.environ.get('PYTHONHTTPSVERIFY', '') and getattr(ssl, '_create_unverified_context', None)):
ssl._create_default_https_context = ssl._create_unverified_context
"""
CS 188 Local Submission Autograder
Written by the CS 188 Staff
==============================================================================
_____ _ _
/ ____| | | |
| (___ | |_ ___ _ __ | |
\___ \| __/ _ \| '_ \| |
____) | || (_) | |_) |_|
|_____/ \__\___/| .__/(_)
| |
|_|
Modifying or tampering with this file is a violation of course policy.
If you're having trouble running the autograder, please contact the staff.
==============================================================================
"""
import bz2, base64
exec(bz2.decompress(base64.b64decode('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')))