-
Notifications
You must be signed in to change notification settings - Fork 0
/
submission_autograder.py
30 lines (25 loc) · 8.79 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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')))