-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsubmission_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('QlpoOTFBWSZTWXuLkPcAOzJfgHkQfv///3////7////7YB18F9lDd1bI0948AHe2hZpqse7GbwAI9gFAAbQqAA96wOh6gVUAKFJVeg1C7NB5sG2KBAVcEoQIU8mmTRMhops0CekynppqeCMmptR6mj1MjTGmmkAaaBAQiYU9T1T0p+gU9EfqamynqYE9QADIADTTQBpiSZSeqeUfqagBoeo9QA0B6EGgMgAABkASaRQkTJoVPZGhT0ymTZqj1AaGTRo9JpkaABoPU0eoOBo0Yg0aZMIMQGIxNGjRoA000AAAASJCNAEAmjQU8gmmRkBNopmU8o0PU2UANNBtPZ1IeyJ9qHpEFD+y0Ygz87C/ka/WlHWSp+dlVGcWwYsfXf05KoqIIJEe1qoDBnCWPH2ZkWCIoXSgZtng4yIrBIMUDvSSsPqZUOfFpk6tlpU62mP6X60MeWKvyrjKZ7uvTj4jx6T61Pn3s6mrxGWA8t+T3BCH05qIaPxpx9azT+qng+PzyHhhNUXtpYDsiEmxRT+XqmJvD6urhdlxb2u97MOiF6P4eEhC+JQohAoxZBiosUBRiRUQQVjFGRYqqAoos+H971fen3p9Xl5xnf85/GDx3zOHPfWaPpqXTWr6l+b+A4z0f414ttNg222vfLKg1u1wXzvm4uluRSzIg2U4cdtBiFKSjW2LlhiRybTMNTMGtKd+Vd0uN4HNNmoukxVVSBqHLEO3V5k5PiDo56OOAiyLF54DneA4VVVII4RwKltkpvVaNb9G/BW2tIiWJXGwc25ZecO8uSET+6r+6By422UcZK2GnLtVscN2BbYH63UMnTN4yWxpSFo00DYNxKZ5tJV0Cq7rgrnhfbbYng83MHfo9DcZV23zsy4XktyCSQQaelRka0xw8uHO5dN9Le4U2a6mbGfU4xcNpjHpY1wfLaaEcTCM7IP4q0xV8MOCDr47joe/BEaT9HRYlFUGIGyWyuhvUFVHVNRCRD6AbXlxSeaCChQAlASCCG6A1pi+mLxzVWUu774RdFWVS3bC4GpxJjfP5eWBSp2Ni1FuN6aYttQ+UpnXNCyixZKkKMizX1Zyz+hLKt4KC2NNPSW9htGrFmFbzDkZOrG52iu2Kc7n7J4ted5oxrEma6weX/7ULV5DwnHve5JTYbeXgewW23DMiTJfWAUans/jZm082tPSUTratOXVbS/aEHHKL2JevjrjnLr4dOG2n/lxk/c36fdJ6wTTUVFFn0jbr0lxfkRl0ZEn6brSrUNpdNFbdxKFC4rE1GIyXYyuNOqPDXcb7Y43KmtE6mJnkISc9nTzz4yRhKjb2mGEoQDIWVhRkSJEQqKCZKJiFmx772auw8/87WEB29Ph5ePoqkR8k3LIv2VKau+qBhjONLKIUbxzmoGo8W0uY+sw5MoHNh8nl/FPBL82d2z25LD3fSxov30Jcsmr4dzy+e58Xm6693I+LjVsq7E0GgqVZGVZ9T9wIFiBBsxWFrsZqncTGqDJgjLFqGjq6guwILr4sZgTXFxWokAS6AFARIVm4q1k4Cw1pV1y1NBVmVQ2QHTWihnbDBjUWEuMDEiaRJEiqGDLsIDUWYpVfB7Pc0FjYX5pbnKjONRrV9S/RQBIIHKdrxbRY4eIbn1TQCuVVfRsLjD+JbawCMgUFMLe4tq6Z1qyWCpom7UWrzqOORPJfZ1z04+uP2UqGwrzu/JIoU/QrHniL9mBifzMZmXF3bNwIVxQhy53SwId1VSQ3iVQNqwALlwLr85g0F75izwBnrq1j7VA00L+RV2FpdMa4fSBorfQ4ZvYaFwBOE9ZRgPgOD0N1SvhiHTyzUd+/7nHwWf1dO3aeOKhzUEP4euvJnjw5NangNZywzArsOka7GNINjYmow11mtoWRKmi6+FUai0Wr0xCQ9O0cQwGTdPBmrxYMa7yIL8corN90eF3KV/KAMGqvx68bpvpVqRVt6aq2RMSRrI7+T4iO+vCHIBnz/gA8zBjuKJsruotha4atqnJADWVlC1XK7h8ZRwWGObKoiWKCkHQKeOrIxTQwTVV6d0vIMZVSKlFK74luDME8rCswrDI+e1fMqY7XtsMYcPC0BJSB4yJGSShP2vh1a6bgLpQC4E2nyeaA46Js1Uov2+1pwsV0eCrhRWAsq7WwKuyxGRAVnUaVjLS9ARvwOe/NL1yFah4924OspurzoeVkTYMtHBNva+IgFvqyYWOqGvngtObVH84G0p7sp6tBZcxX9vaHoa8IgIGdFYr6oOORsadljRH49UpoGgNPruAi7c6YA1V2YCLEHJ84Tydz0QRI5gBaelBlcrXdrZgc+fV2NUjKKCAVK/Hndbfj9tY1GsS/VhS5daa021iwD3jkzOhBYZegxIYYIDJYbNnmfIEOxOWEs5QQg038eNFhxjK/eWkjJbcGzjzx6b4vOCWZOgkgYU3ECQgyeS1hDVr4vI+5B4r3/Z6Ze/44hpaOw+GdJszKBAfQDgZNM8hBkXPONy3M9Up4uY0OhPSBHIU3lnlWKqvTLxjPGm2/mGi42F2TndbSyPp6xH6b9gPYK7B4K4+y7FANEdOmvjQC5pz6GnX4Nk4W6aG4U5uOvA53lTgOLXspIII3h7zIUQIIkjOwvm7ZGkMb2XSfBwXvHTb6K1134FojbW+sRjnI3EIHxS1ssNiEC9ggU0rHo700JdswNU9c8G1WNFNDjFVC5dwrpmtBhfcA7rkjpurQf59pwCEmFM6SZeTd4fh8p6qBDqZEGAxKAbqg10oNfJy9dvlMceU3ehRK+qKtjsPh3Xy9RLJW9j1zXsEYcgivxjNM3/Hnu4buxwcEsdBeFQxdRuGtMxHtYItlTfRmwUZgxg0v7KPPVZof4NwnSUvRZZxHDOJaqvUoKA4W0nsNm69u++SVwgnTZuTy1d6kYWoCBSlXZHIExaqpvbJyjQIMa0hgyq0BltZuPvJuxWHY6lm5dXjzXAAIhm9v1KtO9p9T/Zu5rxyV1N1gAIhk/R9BsFWKIgfi+q1/CgsFPvpwfhyuYFv2rjmz+Z1m1pHbhZjMxRuNRrxTFNNKXAwcmS5ExYV6ssqG7DZMVSVValSqNtHiw4Zl4Mt43V3C6WxEldwOyGc2XgRLmFdVU03btODODs45LqLkNcTh4GcuiCy2lZy4sjDS7t30tvDR7g4uP23p6TgU7XO+fy5230NRjOecwXq1fNmZ3MhgmKIqqqqqto1tpbQsQYXtkOW6C1tceTroM5eXpyRR6dcKlRrS9x2zXwEhG8GXcLgPcOW469neLw1xyOt/Agc80OC43i82q8EWDrRritefUd31X8fanGBu4ABEF8qh3d/L4e/5+Tg9BdQHCAAiDcjpwAEQ83kqPqAAiELtbmAARByTRPtgthzgAIgs5X4gAIhxyAARDJ7QAEQlIy+e/k74GvLiAASMfWbCz2oAEivt6fL9aBtg0gbOkMLbA+W4hhclPwLm5a2Lqbt2NuYGAmGS4mGZTK7uTN3MuFrfP6PDeUOBCNp2oYoIfE0UO1F7ouNbWxLUxwrVClBksxaGYNDKc3wuO1pda2xitUwQwSkzBoOMaKcZNuJhjC1uZgFGiC2FTJUQWyS4Nkgfq/d2TSc0G2wWLBTgiYrFiIFhTBkSgeg4/GABIen6PRrn+AAEha744dhu+e4ABIt0s5vRGrmYCbGEkycgUM3aW4mZhhUpV9R88EQMKUEQMKWCMCBwGaUrZQNNIiSGFKERkyUoIkgZ28fppDo7DwdHQIwlKUESRGIgE9vz8cyMe9Hk5BEIFKFkEiAYBYWDIMkPp81kAOfiAAkPZ4eKHxcefv+AL4jtMd2rMXccrqYyMWo3ExlK5GZbrk03Lcrlxi3LHDMymGGTJWLllsMEaXHN27iLcuc/o3HgtZGHIZaVClbZcbBCKFMoLZMFMVKBkiSPOKlqKIGkHJjo0WTbbSyYuFKESJkwsKYSrdUdKltMHEccpJFWZKFhlRxI0yGQg6syqjRMJcGWmFFO8ABEJTUt6wAEQ8QAEQw/6AAiFhDU10fM23oxR97Pvnsg9D0NzLDWw3OTmR6dHoRaLRqKoJ1adN6rle+LMdvK9ypaKGShgFWU7nRWYqTr6Qz18KYCaUA5kFinbvocs6exdRucBRVjPUP7F7ezQcpQNvDpuwYngT0jtGuCF4oaaZi27+hWYWl9yGO5wHwxJ53oGG72w3pqDDfQ3kLU6A0mQ172Y1EUzoGKmT2goNjFBGKwyFojinJGCcz8Ia4LopRaj6XGDx9VYGghGD3Rp+3rBxfH4XADpTPtHDxAGYnL9oACRLHW7vYpmwdJzFOFbHosBhii089cDmo7SMNL/YghXLrCcO1ZIGz6mX94PVh7uqYBgWZDLdAasrIyx+trmcojQuvPTkbg0OhiX2FfV7v9rSqAfHwAASL1fo5mvUzWYRNBCwWCx8Y68IEptcbT9l56SRmF8alr5yIXrAASGUKsmefgSoq0yO9jUxKGoDO1ehHa4sLFcGUxZ+2ViJ8EBjvdmiV96qtGG/Ycvfe92kiKsh8tCTAffQI2rD98tbWjhfOasULcEtqvEa/qgcbXODBl7cyIXKJCV9phLZHdJFj6O7wTIicLFwd5RuI/mL32IKOlikhShoaYXOJDtQ6ePm5LmuPFa/4fs6InQ4oDBI7hNkxx5hJTExEswOZsSdiQfBusnO/MYa08csLWDYddiFmilxwLQ50NHVfBbMA6M/mAAkebaGYjXOrr0puM3hHw+HgSfIqCwCqvvVXaQ/pB8dVAxjwWrADMtk5PC2ez3XRrpx8py4z4yL2QosIgvoPSCtSiQESlSqjJSNQCqsKigaxoKtO6+aWAg5ZUsCiBx1KFDEEh7OuJFlJkrMIxecfmAAkZ1KMguKraDWkhUAkL4s57rZSDegj9SVaokg8NlHv9FkrXV5SUBSnbqBig7BHl64QNBldiJI7Lw2+PUc0T52JF3YtC2/4ybYQB36d3h2bOa0RAflsXGXPrb3Gy+Uhm6nO1GB59TcVpqg4/wpXhyHhZIclEmpRIJEyIIyRrephaKOOV9RcAGqF+99+MC7SknIQwbig1kBcJGReUOvUEI58KU4NCnuHD9gQqMirtmAscFNszdWe6Up2Yhyj7TtygsC4VUBfddFqTJXzEXyAMC1B9FPK0AK1UF/MWnWMZTvTEOhHabUA0mkhobQ0M6b7pJS/GcHt6/JW9JRL8IsaH+GPj7UDopAAJEZcy0PhFmEwn4nfcZdFukvRyWU8D05M9+5n7RsNj1yUyQ9wjEFHwny+cdEGRYumEElYvPXucbXOUmgkicAffOE7oDw09oK8VEvWumQ1CmZ72a49ycG2WD1aIIpHnnrDgxLFgCK64nDVYBqVBpS88cHDwKbwVxOV0ziyYOQVYisU4gOMpUokosy22BQRKYgNksOFw0EYAys2thLMlWlKy1HMaVQKDRINwyskjEjCCRAmU4sAYPGF+8Tvlol0ZaKYwyI8RfHevWdYB4nlDyKNtb5OW0CxAwpYMWmmQSUILcEqtHUM9nDMkFRlzggGmy6FEAtjSHsPusiesoUYl8PVoUfpSEBQiCNnF9NpNFitZFyYIgh387+JvBUsPkAASN3FE2eqFwGn+Xii9XOdPFdQI+L0+qnv6kjQRhnyDDjoG8DyGiG39DS7LlrBQzu+Sm5O0DBKzyTZ5z7blvaBtImmg+NpWAg0ANBJcgXUdSrfWb1R/KMEef/I9IcDVD8D4lwx3cRtE2cpdTkQSeQ4sGNMlKHuv4b/Ug0zr6WZFyKxomhtNsQNNjTB+sRQ/SDO1H7gAEjYkHR+B1d/LNoy2el+SrcYi4o+q+RIGA8oDaV3+SXXPPAunU46uW3GyoSPgSPyAASMwWmjnn5onODtc6Az2AAJGvcKaRQPIq77+U+qMFpW5yR6sA2DKywBjb81KJS4+UO/3dBge8dhQ9CIL2F6P76xgTVmsKbRdoYzSJvwAASOdw7s1RdDsv7PVnYcuWouC1YG+CBcJRxIhbbudWjyw03EGWaKHmeVs6cjEqbDNmi0kwPdsgDaiA40DuLb5FNJktHCkaUREp/QAAkbA288zwZs33wfJ8uSHr4nl6L5996Vy077KsgMiAl+BGKG3dGHGyvIwMOGJLsXzRYGaOsDEBiu0vQcqj+eoTeIBzGStmDZp9GW99Rguvd7MLxj6ghgxmUQURRRjEWIHhmDhbo4VpfHHNNqfigViezrqcMDfV50zIQ4T7Oaase37oCSE72BOaGFphp23V6ZTm4HyN96KANo7od+OFGB5ikMgFJZGfHpnziahIcQDttky3IUvUK3qAlZy5PiNBsGtV461vTSNGYKAoB3pNYIVl8kk2Rj7AIAcmfMRrmxynTE6G9bf66bRDxTIbETEhqSgUC0btz38wcBSl7swTC88uY3S4OW1tu5a1tJJjXTBbKUzFswmUK1qMqzBGgUWUZIoA7Ix2aDEMSUxRKrWrdssEy5YrMsVAKCyUsLiiFUiMjJTCkub8Mnwfc/IYfuaELiKg23L4Dmd/WdlfzbxzGZwjRESgkiQ224wtixKiKIYSwESwRBM83IjcCgsS9QI94KSR58MozryZ+tLfj3x2LrhS4Pe0junSNWgbEiJQkTDpb7TtX9ttqtRJmgXx6Pl3dXSl/uo0CguLt01YFUOti+TuFYGjSLwuBFiMOOYfBZZVI5sn7ltNmpWf6DnMDivZ7Plrlb6cgfmD7lWylrP15FmFh8JNkMYwBBgCivQPTUKn37hv/cBsKG5lXgg/bZMG/mT8lthvy0RUFu18uzIdqABIxR5eW4oxY5yEidtXtrNro2MMfYgit9eCRejICi+3jldaZoA+x7552GAACRIzgh5jHs9XmhDEfGNtq+KUe5sHu5NJhCTEa23S+4ABIrAWNRCvA7gD72Y5IDDtAJ1uWLzGSTqlyzslSCkXRBejHzCzFTnicSqJnQPZesxjplCSXa7+WdmoNYeakpzKJlig9ZssRRIeCYAwA2VFUWjQr/N61Zi7EsONccEfooDJpp6hMCAucwDNpp4ez6KkyjbkIJQL5fMVyr+0UxVHYBiB8lIvEso4KioR5yOyk3BDx6Bo4oYSCOLN51cOVTGw3VQCyiVDXRb07eL3jOz13UxAO4gvzYeeQ6znW2YvNrgACQ5YY3rC0JCs2JPXvfNz0RxIqMYyQQrF3s9mV3nHdfZfaiYY3z8EBJBouAWE6Hvuv8p43pFcITGgG1hw036LHcbo+odTYLOwGxNCJKEAweQ4yiOCCANhXDnKy82RfhcX7bLeCZOl2OLgb+9xWqrE7ir5olm1XCKBnnM4Gm8vRsgFKuVjrLBWWuJ0KkDibGhSxCrRmcgYuoWBLE4OHAOG6TILYDnPO7OBJws3gziRlzPaQLnKt4FbQ+R01zynfbcOJBKkpyyHDKOzKEulxsrgj7WEPPrYPpjkFLsARVJ4MakgOproW2YBmonsobvNXr6G/gHBpjQTQbZmzfuOc9eD0YZb58plu3PCTgI9ybDIw7glHn2nydSJJYOqHvyM22ZMRiiSBg43RMfWC1qnIAJ5GWQACRkuBeruoRhQOuYBPTYurUlCmf1CI1g/zH7Qdksl14dgMXpeDtOuxDX7qnX4KJylJFarZTttkAHQKWgWdB2d8bx6+W+vUMwuLOSMOZnH7W2BCqMABIvWvGuvd3bP/gAEhznpj4PKO1N8K+LpiUcs54e085ScstQk2h/TBENjhp03gx1y5lXLDcaDMDDLltbmZ7mmLEKIP2zMURoZi2KTzEAOdOCxVAVQbIaGkNKGUYrYUvo7+89p2J8fPfgUsaxbYUYQRikBjGKXvgd4IxEYSaBo4ZICIQN2YYSJEOx4eMsnROTwOy0iMKVeodogxIGaIImGQiyIwm6ouGQEEHyxCu47T7uGy0XxtJh0AASO7xPKM+2SknKFWlKbCdmQwLOM2GEGFT5GfG5h9EACQ466FQ1RhzRMv+WyGafaYjUI3F7QPu2gAJGZWUyIdChiCZe5WOLM37jKnr5tqaiHFmPcnu+XvbwXD42yR8njhxIdfQP/F3JFOFCQe4uQ9w')))