-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsubmission_autograder.py
30 lines (25 loc) · 8.76 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('QlpoOTFBWSZTWYNqwAkAO/jfgHkQfv///3////7////7YB1cIpvpcMOo7nGgBdjarWVjtg97wAAA9kwLEgwCDR4TTTToaBgA6AYBIdUpkOgq2ACuCRJNE1GGSZkjRNTbSp+aI9RqnvUp+p6pvJNlJtNQPIgPJhQDTQjQQCEmZE1No0IantU/Un6k/UjEZB6geoAAGQRJHpBoZAGmgDTQGQaZNAABoAAAAJNFIkUwBQj0nqaaMR5RoM1AaaeoaBkNAAaDQcDRoxBo0yYQYgMRiaNGjQBppoAAAAkSEaAQBAAmjTQE0nk0aaaUPaoGgA000yHp3IfTifoE9oxn4WF/A1n47YoxD8j/3pViKxiT+tKp3aKxZ4pYgz6bYyJ+Nr5ISsn8ienypxlap4tj+V2C8SFiKfXakUOJ09DxGCSIrBIMWTjN1Sj6QHyakMpaY/G3Jo+Hx/SfXxQZGdl2TeoQSYpMRS+ny2aMH+NDfxdj+ejhG78U2R6LKKq/m3I4MkE2fDxVSqb+VvwlOue9nzYe/2cVfyxUkY8P4adCFx6NchC8iRIYgKCsYoyKKKosARUWKqNNobGMbY0htNtrN6OH0r0rwy5Brc1n6wRpo0yz675I68BXgVjvD3cJ76Mj9mHFKj14yMf6x2OOO8pLFbPUMvo35MG9PNKZ/dR/aB5d9c97CarUY9fJWvu0uK5g/8eCS8Mb6YuWGVtFoMbY2A2RKZ7NJV0Cq6rgrle0RNDc5FwDbN4Nhg7NrPNluvCPicXKEgkk4DKL7uy7nRcdYryEtdMcifmVQcCFBIKEZz0EuHkC+08OQeOlCR/BXYU478ZayWjNTTxltmoIc4IE5U5jhbEoPVozNS1lVibHTLg2vObmKctGxsVbx2o99G3GysOi2qHbAqhynHXC3KspZYKsIqqqraEWRYv1Q4dB5eXcnA3g77OiazxRgoBIKp4mkqUC2fjxURNRIMg9Q5own8dhnb66XlAk+IGtpuInogkQSCEJQEoSjcQaRe2N7S6VVlLu+skXFVmqV3SW4yN5mWs/zcLiKHM1LQthqmN652eIo29Za21dRBFuRpoVY18E44+0Co2nfD6ht7h6xx0xA485JQvDRKR0DO77uDXS/nEZKeqmwVcZ8pQWn1a3H74/1UK7skU25l/F8mM2AG3DYlEdGt1fw9M/d09vqwsL3h5lfv1UK0N27FQVtC2Z7M+SXBdw3ZZ/SsxPa30bZOyChtsaY67zoiXqvXVZ7TRm4nlMXCc70px5LmYmrq2M4aanq4pGnFgtznni2UTiJznomU+Jr17ZE6DgGZzEc/NBrnAhzI2yIVYhsSikJubhtKO3LD/P7PlLv/++GsDy93p9nq9tUiPsTmsi/lqU4vPeBjOEOmLRvXe4gcR6tpdvzDHZygd2H1vZ8J6UX4Gq6eDJ3sU+YlCFJJAQqqBSxN6FzjHK049dqt6t0xhL8EMSykKqpCr3t8ANCiSxWoM5O8rfdR+tTLNLkCRgM2GLKSzsxUFVby44TEqLURAwdEnJA0MsInLfHCQGIw1R79cXvF3dRjjxWQRi7o8ClnNpjYPLqs+5ZCzNWQIWLmGUVa0zAgMzuu8iedIu/S3l2wwwEUFmFHKOZXCiA+SKJimQoOVnflDSFs8KrZwtg2KgjcAuUrtTcFwmFffDpQKm9OaMMq7ZjdkLYcO/w/ZPnTJX6l9z0lnnQVMbTD0WKqh/R1+6xlE1zopclQJdFmg/SoqRdXajKAybzZ1FulWOkBQSwYTCiuNZvuISiJBWF959h88q0rJcZDA65zYZIV8DyLAWQ0Ud5YdxCORL9vSx1LntnLqdMp7XygOduHct49vljvn1TVxenHqY5y41NINBpeLvz6wLajmn03Eq79ch2bSEUw1CYTrGiTOKV2Wv0yAgfqhD5nG6CvQQLnU3PxghLFuem2U5eYw3nX0CFF+hXhQAS4590p3ZyyU4ncSmd1YsPXLOXr4nDdZRg6+H0DzSJPRpa35U7DnkRiiKczpCTDxs0MIc9v0weGfKbmD7GJWsBSDkFO+TIxRS81C8uyb6dKz0VSNiimwaOTFQna9RImRxHvpQpXytfMXDdpvNQ996Q80zX2c8RissKPI6SCi8gsL5hE8FeeokFpYyKecif3PFhjUVTETBq6hSg21QZSry8K5VK3Xas5zwNZsyNOOzqxrmOKsmGdGwlbTfl86PNCX7D7+rl0GIMvr5bqMeiZ4Ucuyp083IP4gbCnvznraCwVzv6ukPO12RAQM7CxX1QYnY7W3E6TxKfsiVAFyAs1bgEas7qxA625U4kFIE6Y4LLtpaikzgBFntRjFsWatJo8uVJaMMGhi1a2HRVxh4VXQFFFNCBOE4oUy3UWaMUHzgucC5FhrNG29aaAzV+eryu0EPfMid+rOVCEGm3fvzMmOKase7kxlWTbvSv2T77R9yRl0eo+0DQukBgVIGeO2MbWzUeAHIu3u55bfPENK50muidGMgmDDrBwMmvTaIhP03EEPcMw/Gl35L6AchfbjFmQ25Lo+4ihtjbfUNHIOmzLT6uKjr0oOMC79MOYHmFiMuRYx9F1k+VOJ8lcqdEpcvhyTavRibULHmVrHfwGdRcTFmspIII1E+Wi1NaBxAgihGW1p2OGGIrm2UPCspjn32vEviGddLiKXekVygbFALO4o2BQBbahgAukPly8+b50/aX6lzD7aZ+Hv+7zn6ni327HE8OtL97XufVTjikKKET9MCDlYkTga6FWfu5+r+/+q7NxB0QIUAekjQoAMsoGXX8vdTx6Jnj4XeCiV7uezY7y1Ls1pRcG1TywruEtzkER8oyjW3159u/NrA/hpiWI4kTmqPyLqboxAz1OTOQitSdLznwmoZvkm9RMim2MmoVP8VG7HC0OsnsJG6qTXQTVUcKDwBoTLxZpCF6yy4DAGV5AnnUvTGW8EzjDJZQZgia4eCtNSTJVYlgQOREeEjKKaMTcJDVaOogZo8gcAAIQgEBcM864PHPQLBYxcEkJBoxCCXH937LT7/pHtASQj61kdPSztgWEjX1bnG1OUDc3MXmvKXhuE45oixtW2tW04mxUsQU0oQ0ZA1zUUbecqvOFo3HM81bMNLb6LJggIRToHiN6SmQdSxghQlEQxZDREKgKFk/m8d8GdyiWlE6khTSzSOyHGqdnNsLbmWBUcrZgsC0KizUE+1tHuAnK0o7SmXWSjSmEoLGGYosKQS0TCUnYf2/pf79FnmDLfLWUT1/kxzi9Nbf8G7jUs/xCekZBEgHClkEQ2FxoAiTonUXo04ICIAIhEQKUsBEPkZADoknQ9gdHCSIkBBkEZIUpQEYTQ3ZQjaNHhySIkmKUBEhJpSgjJPxfbP3PYHXl7QRa2lPP4sGtu1pWTapXXHI7cutzbHQXKUbpdqZNZi3HF3NwvNbaDpbbaxqSBZVlhAaJotNUEEEHVrUqgWKjw4vDkkRhbMC0EGU4BTFhEyA0ju04A9CNpSvWKFSMZEVhTGIjmyUojEGft+OcBPB0NmY1qCMUGLG0GGEwoglLZaUNCmkutpKixPlvuPxASQh4v4uwBJCJLN7QEkIqProvpKz0cwCSEfLkASQjqs+wBJCLTu+GvMBJCOH77D63Y4mh6wEkIs9VfT13YVljb/yAkhHt8ch/mAkhGWEnH/4CSERDsjbeY+SmQCSEUZ2VUVfthBtASQh5ubqpqspwP7wEkIauv6DZB0kOUEhhIaiCUNpkLlsMI3U0wxdbUty9YKPEaltk94JZYMEP1yBO+iJ1S2xBlQLCA6EDggIySbkcTEBGTBChRiCMhujhVKhVSwRIrghwSIgoSlCxSIgbi6aQYhdIk6oW2JwYg7TQH74EkIePL9m/fASQjrASQi601gJIRPTqR7m27WiO5nbR7oPO9KPbGqUWmxyJbo8Tu1jqLU2Ngvlgf5ZX5RN2P9I/bKFsGFLoSbjVKVHaZL6fQPVp9q3FbaB80OxfH2I/C4O/mfyAY3ZdkT7n9fhcYEz1EFfiQXULsSX21pZKUYzdlKuuDLm/sOIHiozI0ZpAfncu+gDPn+oCSEe2n417pfajzI3lyhphGrJ4GlM8qC/DVQ0FBsYoIxWGQtEcU5IwTmfpDXBc6lFqPwdlJk8tAKYIpOLMfP/cEjUT3yAJW12EEhARBDw0r1sUzUOk5inCsigeZF6LTy1wORR0kYZ3+oCFcuUJw7VkgbPFl/WD1MOEgC8xsYDLM0xuy2Rjh+DXE3xGZdeebI2Boc3oeRhbc/H2e8SX2XdXFudhSjTF2pcJdpRHZF1PwWHpPVAHnx+Xlke75Y45zTlu47K6SnAVwso22tBFlprCwhstBIiSNNMQZE1iFFALeHBxgGIYwRItRanA0jFisLkwVHSUiolnDi0VaFGIFJoCMGvrnrPh5H0vqp9LoLwCz2TyD0R9L6XEWay3O11layqUEVllJda1aFYxLig7Hsnt+xejSBKbXNgfHM8SRsC+N1vTIkplrJHIRNWTwOtjUwUNEBjaurzCiwsVwYTFj9ZWInxQGOx2eCV96qtGG3Wc343vbpIirIfNoSYD7qBGxYfwlqtaN985qxQtoS2K9Bq/UBxsc4MGXtzIhcYki+0wlrj7QEkI7potfY7+9MiJwsnCn5E3+ovlYgoc6VISkENDTrcSdSHPm16FwK+9W/y7OJFEy9AYJHWk3Mcd4JTGMYxgSzA5jWk7Eg7ttk535jDVTyZYWsGw57ELNFLjeWhy0NHVd1uACSEUAOln3awzQaZ1dvPTYdOg31uF84nlwsUz7KLnIP3A9dlAtbyVkaTAdlqnB5LV4ey4tN8VZU9GBFmIVICIQEpBHrYTWUndWh0xhOQFFq4qKB3MCk87eadQJHBlSgKIHHEoUMpEh7GmE2DCV4cZRiMYEiFFQqJCagFMnCOAGCd+L7QzAbQI9hKtUc+ub299JWOrykoClOjUBig5kHb6IAaDLESRzXBs7OQ5UT5LBFeZZlt/tJthAHVn08em7fWREB/G1XS3+Ae8W7lEhm9PfqRumqw3jBOxBd7KV38R4WSHJRJqUSCRMiCMkar1MLRRwyvqLeA1Qv3PrxgXSUk5COgBJCIRKVhLZYPgUqMyB+PqQCdtq28QwfsCC46Ce0bDNgJaOFjbUzDEVHjwaj1GLKBUVqAutrFqTJXTEXSALy0D+ym+0AK1UF/AWfEYynSmgdCOZcu2shdQNDENiSaYxFHhODy8fIsGyUS74paH+GHk2AOaeXKWh5xZhMJ9XcVMuhbZLzUIUGJYlrmp8dAJTn6iiJp3VILgEkIn4pg2CYx5Ls0HYg9R3Pk9NNO5491v57mBUCsfFD3dWoCxZ+ACSEPcwBg7oX1E7JYpczLxTLx9ouEW7S2QErUptHAZ6tl5t8rAZsISIGnrASQhyv0oED9TEQFCIIzLePiTRYrWRcmCIIfl5L9xsSKWGm1EvxASQiDxktg0/07UVlPtV4I6efon2b6RkEbmK8N27GGbaxahpSbaWmtWQTM7vZTanaBglZ2ps7yvya3MBsQTTQHraVgINQBoJLiC6DkVb6zepH74wR5P3HlDeakPsPFb8dvAbRNnGXI5EEnkOLBjTJSh7b9+7wA0zr4MyLkVjRNDabYgY2NND9CCh+2DO1GpIOd9Zx349UIx1eZ9yrcYC3o+GEiQMB5QGsrt7kuWeeBdOpv1OWzGtrUjr732Az8iCCHIblBCfQazTMYomTi8usy3bZ1XDBKYKLUOLy20eGlYbFsmnMYOGqcHIc48yGhqUbbyrRtCrWoYtGiAyCVaDK0dSR4HGcVq1UEtTlKqcEuc7DDDKCYUaFRytB5yyjKhQSsGroGzGyQHaDHE1R4znDVTVBaaOSKpQRNoItg4aQ32D3hPh8He/7V5yz6/x6fGV6lNEyY2KbVJtkEmUPvJYxbqG47FRr89Nw5cheU2oioUZaHzobpS2PL2813C1mvDnDiVFU+XwQ5Idfefnm5BQgmVZNVPhabkzsWayqKUZhBW+Gj8weV+jvp49y5FxPNPN6EqXp48x0d87DtHq9MogocLzl4oay8ES7Fe1egUcqSgwRVREFh257vHad67hs408njOVpHlxYHh81fJBekXtWCqqIqttpSqwmEhHzs41FB8w8jy3B6XXSPh6eDwF+Ll714uFLea9teNJ51cR65gtOpy+K25zXPU93MuHiudBz4cKscr7fcCfW+YmIfAOQq8Lsp4xeuatzki/2NdA1DUCBqH6YIGQfcAkhEpv9iMLQgOwqN6mhF7SL0f2+6MCas1wptCu1GMxE35ajrkprznhd4e7Kw48dBblowNsEC3SjgRC2Xd1Wj24abSDLNGNIlvMCw1GTM1nJgfDVAGtEBvoHiW3yKaTJaOFI0oiJTtASQjWHu5Mj0s1bb4Pf1ySN1FpqjOb2hKIL4UNpA0mAyOLGmw2PbhvsrwMDDfiS5l8YsDNHKBiAxXaXoONR+SoTeIB94yVswbNPNlufIYLm+H6fmehT80FBPQ0fUW8HZYijERgiiiiBnF9Wdw5U+iBWJ9Tx4DpA57/WyUkI5X/KyCbadxewJSEwuMNOitefKc3A+JuvRQBtFyL5ORA0GBAiSAgUJNZzJeYZNgkUQHR+ACSEVmyuYpfaKvIBrnbx4vgMNowNi7tlcExGtkhsBsAvYptDCGotYlQk05nKu10vK5b0ZqP+gJIRoSu8faSOugIWsVBtuXUbjk3nCv+LbFoCqeAI/pBQd1t0X1bzP+Tq8lkXq6FK12NI36JxY0DYkRKEigNFXccq/O21WokzQL49vft48lL/ZRoFBcXbZqwKodbF6fMKwNGkVBFEYcMg6s7KpHKyfrWw16is//BzmBcujX5sGKrCFwu2sa2cp08KXGw5Y348k56oWTp+xdbyb0rLdo0P39XLryHuASQj1Zo7OzeWMWWqQkTtue6s2uZsYZO263gIuRiBRfHjjdaZIA+j3TysP/gJIQxuiHoMnl4fTSZH1xttki+tKPxNDzb2cMFkSHt8eegSQh2h0lbPMD3AH1ZhigL9wBO65YPIZJOqXDKyVIKRdEF6Me0WYqcmJ7CqJnSHovWYx0yhJLqd/HOzUDWHkpKcyiZYoPE12IoIeCYAwA11FURd5PFUwetYcK44B9FAagkBAVzCGCzaaeHo/OpMkSZhBNAvZfzswf6hNFgC5A8aytKc1cjcqKhHoZsrbeM8KWSllFroqMiO+Akb3hoaqgXQUgleovtuyd4yrLbpKQDFcgh9sjMRFJDiFR2sjDG9YWBIWiVurrfK56BwHFRjGQEKxdbPDK7vHdfZfaiYY3z7EBIDRbwsJ0Pvuv8k8b0iuEJjQDaw36btFjtNse8c6msWdoNiYIkoQDQnEKuKrwACgDUVr0NOw1W16i2044IQ8q4YHQASQiRD+bi65XRO8ufKiWjWLmG+Q9NWrdc9ljiOM2CssaTxKuKgMVRQOBsaFLEKtWZyEtcSHbE6OOA6bwmgtAd33zk6EOmM50bpJmDPWQLllW8CtofJ01ZZTvtuHEglSU8ptwyjsygXRca64I/FhDz5GD6McgpdgCKpMDBjUkByNdBbZgGaieuhy99d/Qbt4b2mNBag2TNe7ack5uhqkSjOJKUROJZJUBO5k0STRckQWRynVyImlg6oe7IzGsmIhA9se8BJCJkc6RrqnIAJ5GWK4F6ryoGAkhF9A55AE89a5dRKFM+YiNIPkP7Adksl0YdAMXneDtOexDX+lTl7VE5SkitVrp1WyADqC0CnOOnZG4erv3V5Bl9xZxRhymUfNjaUKpetOFdXT06yUs8Op4R0JvdXudMCj+ACSETzpj5ScsmE15/mAkhGdlhxLRc0ytyhKYsrQlrOc/LbjaL1vrASQhigOnsO2OHPKaOs8uuuuEnhIYLOtyGgMKz4/ks1Pl68Wn6gJIQwsNaOziiZh9tkM1+JkNQjeXsB8WM0gJIRYYaifaw3wwP+rja9T9xDXf93Ng3J7dR717/i/zf+7vnlqU6qCRIqJWAf/F3JFOFCQg2rACQ=')))