from __future__ import print_function
"""
Adventure Time Comic #11 Secret Messages
========================================
I had a hunch that the messages were letter values encoded in
trinary but substituting BMO for 012 didn't work so I tried
some more methods. Turns out it's OMB (BMO backwards) and
the number -> letter substitution is backwards from Z too.
I won't ruin the surprise here but you can see the properly
decoded messages (among the other wrong attempts) by running
this Python script.
-blayde
"""
MESSAGES = [
'obo boo mbb obm bom bbm mmm bmo mbb obm bob omb mmo',
'omo bbm mbb obo omo boo bbm obo bbm obb bmo obo boo bmo obm bmo omo bmo mbb obb bmm mbb mmo obm obo obb omb bmb obo mbb mob mmo obm',
'mmb bmo omm bmo mmb mmo mbb mmo bmo mom obb mob obo mob bmb mob mmb mob omm bmo obb omo obb mbb obo bmo obm omb bmb bmb bmo obm obm',
'mmo bmo omo obm omb bbo obb mob omb obo mbb mmo bmo mbb mmo obm obo bbm mmb mmb bbm obo mbb mob mmo bmb mob mmm mom mmb bmo obo bmo',
]
# all permutations of 'bmo'
REPLACEMENTS = ['bmo', 'bom', 'mob', 'mbo', 'omb', 'obm']
CONVERTERS = [
lambda x: chr(ord('a') + int(x, 3)), # forwards from a
lambda x: chr(ord('z') - int(x, 3)), # backwards from z
]
for message in MESSAGES:
attempts = [''] * (len(REPLACEMENTS) * len(CONVERTERS))
for letter in message.split(' '):
for i, r in enumerate(REPLACEMENTS):
replaced = letter.replace(r[0], '0').replace(r[1], '1').replace(r[2], '2')
for j, c in enumerate(CONVERTERS):
attempts[i * len(CONVERTERS) + j] += c(replaced)
for attempt in attempts:
print(attempt)
print()
ZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKIiIiCkFkdmVudHVyZSBUaW1lIENvbWljICMxMSBTZWNyZXQgTWVzc2FnZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJIGhhZCBhIGh1bmNoIHRoYXQgdGhlIG1lc3NhZ2VzIHdlcmUgbGV0dGVyIHZhbHVlcyBlbmNvZGVkIGluCnRyaW5hcnkgYnV0IHN1YnN0aXR1dGluZyBCTU8gZm9yIDAxMiBkaWRuJ3Qgd29yayBzbyBJIHRyaWVkCnNvbWUgbW9yZSBtZXRob2RzLiBUdXJucyBvdXQgaXQncyBPTUIgKEJNTyBiYWNrd2FyZHMpIGFuZAp0aGUgbnVtYmVyIC0+IGxldHRlciBzdWJzdGl0dXRpb24gaXMgYmFja3dhcmRzIGZyb20gWiB0b28uCgpJIHdvbid0IHJ1aW4gdGhlIHN1cnByaXNlIGhlcmUgYnV0IHlvdSBjYW4gc2VlIHRoZSBwcm9wZXJseQpkZWNvZGVkIG1lc3NhZ2VzIChhbW9uZyB0aGUgb3RoZXIgd3JvbmcgYXR0ZW1wdHMpIGJ5IHJ1bm5pbmcKdGhpcyBQeXRob24gc2NyaXB0LgoKLWJsYXlkZQoiIiIKCk1FU1NBR0VTID0gWwogICAgJ29ibyBib28gbWJiIG9ibSBib20gYmJtIG1tbSBibW8gbWJiIG9ibSBib2Igb21iIG1tbycsCiAgICAnb21vIGJibSBtYmIgb2JvIG9tbyBib28gYmJtIG9ibyBiYm0gb2JiIGJtbyBvYm8gYm9vIGJtbyBvYm0gYm1vIG9tbyBibW8gbWJiIG9iYiBibW0gbWJiIG1tbyBvYm0gb2JvIG9iYiBvbWIgYm1iIG9ibyBtYmIgbW9iIG1tbyBvYm0nLAogICAgJ21tYiBibW8gb21tIGJtbyBtbWIgbW1vIG1iYiBtbW8gYm1vIG1vbSBvYmIgbW9iIG9ibyBtb2IgYm1iIG1vYiBtbWIgbW9iIG9tbSBibW8gb2JiIG9tbyBvYmIgbWJiIG9ibyBibW8gb2JtIG9tYiBibWIgYm1iIGJtbyBvYm0gb2JtJywKICAgICdtbW8gYm1vIG9tbyBvYm0gb21iIGJibyBvYmIgbW9iIG9tYiBvYm8gbWJiIG1tbyBibW8gbWJiIG1tbyBvYm0gb2JvIGJibSBtbWIgbW1iIGJibSBvYm8gbWJiIG1vYiBtbW8gYm1iIG1vYiBtbW0gbW9tIG1tYiBibW8gb2JvIGJtbycsCl0KCiMgYWxsIHBlcm11dGF0aW9ucyBvZiAnYm1vJwpSRVBMQUNFTUVOVFMgPSBbJ2JtbycsICdib20nLCAnbW9iJywgJ21ibycsICdvbWInLCAnb2JtJ10KCkNPTlZFUlRFUlMgPSBbCiAgICBsYW1iZGEgeDogY2hyKG9yZCgnYScpICsgaW50KHgsIDMpKSwgICMgZm9yd2FyZHMgZnJvbSBhCiAgICBsYW1iZGEgeDogY2hyKG9yZCgneicpIC0gaW50KHgsIDMpKSwgICMgYmFja3dhcmRzIGZyb20gegpdCgpmb3IgbWVzc2FnZSBpbiBNRVNTQUdFUzoKICAgIGF0dGVtcHRzID0gWycnXSAqIChsZW4oUkVQTEFDRU1FTlRTKSAqIGxlbihDT05WRVJURVJTKSkKICAgIGZvciBsZXR0ZXIgaW4gbWVzc2FnZS5zcGxpdCgnICcpOgogICAgICAgIGZvciBpLCByIGluIGVudW1lcmF0ZShSRVBMQUNFTUVOVFMpOgogICAgICAgICAgICByZXBsYWNlZCA9IGxldHRlci5yZXBsYWNlKHJbMF0sICcwJykucmVwbGFjZShyWzFdLCAnMScpLnJlcGxhY2UoclsyXSwgJzInKQogICAgICAgICAgICBmb3IgaiwgYyBpbiBlbnVtZXJhdGUoQ09OVkVSVEVSUyk6CiAgICAgICAgICAgICAgICBhdHRlbXB0c1tpICogbGVuKENPTlZFUlRFUlMpICsgal0gKz0gYyhyZXBsYWNlZCkKICAgIGZvciBhdHRlbXB0IGluIGF0dGVtcHRzOgogICAgICAgIHByaW50KGF0dGVtcHQpCiAgICBwcmludCgp