Skip to content

Instantly share code, notes, and snippets.

@werediver
Created November 5, 2012 09:41
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 werediver/4016341 to your computer and use it in GitHub Desktop.
Save werediver/4016341 to your computer and use it in GitHub Desktop.
10gen M101 course week 2 homework 2.3 validation script ported to python3
import base64
code="aW1wb3J0IHB5bW9uZ28KaW1wb3J0IHVybGxpYi5yZXF1ZXN0LCB1cmxsaWIuZXJyb3IsIHVybGxpYi5wYXJzZQppbXBvcnQgaHR0cC5jb29raWVqYXIKaW1wb3J0IHJhbmRvbQppbXBvcnQgcmUKaW1wb3J0IHN0cmluZwoKIyBtYWtlcyBhIGxpdHRsZSBzYWx0CmRlZiBtYWtlX3NhbHQobik6CiAgICBzYWx0ID0gIiIKICAgIGZvciBpIGluIHJhbmdlKG4pOgogICAgICAgIHNhbHQgPSBzYWx0ICsgcmFuZG9tLmNob2ljZShzdHJpbmcuYXNjaWlfbGV0dGVycykKICAgIHJldHVybiBzYWx0CgoKIyB0aGlzIGlzIGEgdmFsaWRhdGlvbiBwcm9ncmFtIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBibG9nIHdvcmtzIGNvcnJlY3RseS4KCmRlZiBjcmVhdGVfdXNlcih1c2VybmFtZSwgcGFzc3dvcmQpOgogICAgdHJ5OgogICAgICAgIHByaW50KCJUcnlpbmcgdG8gY3JlYXRlIGEgdGVzdCB1c2VyICIsIHVzZXJuYW1lKQogICAgICAgIGNqID0gaHR0cC5jb29raWVqYXIuQ29va2llSmFyKCkKICAgICAgICB1cmwgPSAiaHR0cDovL2xvY2FsaG9zdDo4MDgyL3NpZ251cCIKCiAgICAgICAgZGF0YSA9IHVybGxpYi5wYXJzZS51cmxlbmNvZGUoWygiZW1haWwiLCIiKSwoInVzZXJuYW1lIix1c2VybmFtZSksICgicGFzc3dvcmQiLHBhc3N3b3JkKSwgKCJ2ZXJpZnkiLHBhc3N3b3JkKV0pCiAgICAgICAgcmVxdWVzdCA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QodXJsPXVybCwgZGF0YT1kYXRhLmVuY29kZSgidXRmOCIpKQogICAgICAgIG9wZW5lciA9IHVybGxpYi5yZXF1ZXN0LmJ1aWxkX29wZW5lcih1cmxsaWIucmVxdWVzdC5IVFRQQ29va2llUHJvY2Vzc29yKGNqKSkKICAgICAgICBmID0gb3BlbmVyLm9wZW4ocmVxdWVzdCkKCiAgICAgICAgIyBjaGVjayB0aGF0IHRoZSB1c2VyIGlzIGluIHRoZSB1c2VyIHRhYmxlCiAgICAgICAgY29ubmVjdGlvbiA9IHB5bW9uZ28uQ29ubmVjdGlvbigibW9uZ29kYjovL2xvY2FsaG9zdCIsIHNhZmU9VHJ1ZSkKICAgICAgICBkYiA9IGNvbm5lY3Rpb24uYmxvZwogICAgICAgIHVzZXJzID0gZGIudXNlcnMKICAgICAgICB1c2VyID0gdXNlcnMuZmluZF9vbmUoeydfaWQnOnVzZXJuYW1lfSkKICAgICAgICBpZiAodXNlciA9PSBOb25lKToKICAgICAgICAgICAgcHJpbnQoIkNvdWxkIG5vdCBmaW5kIHRoZSB0ZXN0IHVzZXIgIiwgdXNlcm5hbWUsICJpbiB0aGUgdXNlcnMgY29sbGVjdGlvbi4iKQogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICBwcmludCgiRm91bmQgdGhlIHRlc3QgdXNlciAiLCB1c2VybmFtZSwgIiBpbiB0aGUgdXNlcnMgY29sbGVjdGlvbiIpCgogICAgICAgICMgY2hlY2sgdGhhdCB0aGUgdXNlciBoYXMgYmVlbiBidWlsdAogICAgICAgIHJlc3VsdCA9IGYucmVhZCgpCiAgICAgICAgZXhwciA9IHJlLmNvbXBpbGUoYiJXZWxjb21lXHMrIiArIHVzZXJuYW1lLmVuY29kZSgidXRmOCIpKQogICAgICAgIGlmIGV4cHIuc2VhcmNoKHJlc3VsdCk6CiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgCiAgICAgICAgcHJpbnQoIldoZW4gd2UgdHJpZWQgdG8gY3JlYXRlIGEgdXNlciwgaGVyZSBpcyB0aGUgb3V0cHV0IHdlIGdvdFxuIikKICAgICAgICBwcmludChyZXN1bHQpCiAgICAgICAgCiAgICAgICAgcmV0dXJuIEZhbHNlCiAgICBleGNlcHQ6CiAgICAgICAgcHJpbnQoInRoZSByZXF1ZXN0IHRvICIsIHVybCwgIiBmYWlsZWQsIHNvIHlvdXIgYmxvZyBtYXkgbm90IGJlIHJ1bm5pbmcuIikKICAgICAgICByZXR1cm4gRmFsc2UKCgpkZWYgdHJ5X3RvX2xvZ2luKHVzZXJuYW1lLCBwYXNzd29yZCk6CgogICAgdHJ5OgogICAgICAgIHByaW50KCJUcnlpbmcgdG8gbG9naW4gZm9yIHRlc3QgdXNlciAiLCB1c2VybmFtZSkKICAgICAgICBjaiA9IGh0dHAuY29va2llamFyLkNvb2tpZUphcigpCiAgICAgICAgdXJsID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODA4Mi9sb2dpbiIKCiAgICAgICAgZGF0YSA9IHVybGxpYi5wYXJzZS51cmxlbmNvZGUoWygidXNlcm5hbWUiLHVzZXJuYW1lKSwgKCJwYXNzd29yZCIscGFzc3dvcmQpXSkKICAgICAgICByZXF1ZXN0ID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCh1cmw9dXJsLCBkYXRhPWRhdGEuZW5jb2RlKCJ1dGY4IikpCiAgICAgICAgb3BlbmVyID0gdXJsbGliLnJlcXVlc3QuYnVpbGRfb3BlbmVyKHVybGxpYi5yZXF1ZXN0LkhUVFBDb29raWVQcm9jZXNzb3IoY2opKQogICAgICAgIGYgPSBvcGVuZXIub3BlbihyZXF1ZXN0KQoKICAgICAgICAjIGNoZWNrIGZvciBzdWNjZXNzZnVsIGxvZ2luCiAgICAgICAgcmVzdWx0ID0gZi5yZWFkKCkKICAgICAgICBleHByID0gcmUuY29tcGlsZShiIldlbGNvbWVccysiICsgdXNlcm5hbWUuZW5jb2RlKCJ1dGY4IikpCiAgICAgICAgaWYgZXhwci5zZWFyY2gocmVzdWx0KToKICAgICAgICAgICAgcmV0dXJuIFRydWUKCiAgICAgICAgcHJpbnQoIldoZW4gd2UgdHJpZWQgdG8gbG9naW4sIGhlcmUgaXMgdGhlIG91dHB1dCB3ZSBnb3RcbiIpCiAgICAgICAgcHJpbnQocmVzdWx0KQogICAgICAgIHJldHVybiBGYWxzZQogICAgZXhjZXB0OgogICAgICAgIHByaW50KCJ0aGUgcmVxdWVzdCB0byAiLCB1cmwsICIgZmFpbGVkLCBzbyB5b3VyIGJsb2cgbWF5IG5vdCBiZSBydW5uaW5nLiIpCiAgICAgICAgcmFpc2UKICAgICAgICByZXR1cm4gRmFsc2UKCgp1c2VybmFtZSA9IG1ha2Vfc2FsdCg3KQpwYXNzd29yZCA9IG1ha2Vfc2FsdCg4KQoKIyB0cnkgdG8gY3JlYXRlIHVzZXIKCmlmIChjcmVhdGVfdXNlcih1c2VybmFtZSwgcGFzc3dvcmQpKToKICAgIHByaW50KCJVc2VyIGNyZWF0aW9uIHN1Y2Nlc3NmdWwuICIpCiAgICAjIHRyeSB0byBsb2dpbgogICAgaWYgKHRyeV90b19sb2dpbih1c2VybmFtZSwgcGFzc3dvcmQpKToKICAgICAgICBwcmludCgiVXNlciBsb2dpbiBzdWNjZXNzZnVsLiIpCiAgICAgICAgcHJpbnQoIlZhbGlkYXRpb24gQ29kZSBpcyAiLCAiaDcyNmRnZGY2MzI4OXdqYWtsZjk0NjdnaGRzamtmIikKICAgIGVsc2U6CiAgICAgICAgcHJpbnQoIlVzZXIgbG9naW4gZmFpbGVkIikKICAgICAgICBwcmludCgiU29ycnksIHlvdSBoYXZlIG5vdCBzb2x2ZWQgaXQgeWV0LiIpCgplbHNlOgogICAgcHJpbnQoIlNvcnJ5LCB5b3UgaGF2ZSBub3Qgc29sdmVkIGl0IHlldC4iKQo="
eval(compile(base64.b64decode(code), "<string>", 'exec'))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment