Странная мини-игра на Python

Узнай цену своей работы

Формулировка задачи:

Всем привет, в этом hex коде хранится текст программы на Python, может кто-то расшифровать? 1F8B08083E600F5A0003616D617A652E7079009D554B8FDB36103E8BBF627268565A3F20527EC88BF5DEDA5B8A022DD083EB18B445DB6C6C4990B41B B9BFBEDF90F2236E90A695618A9CF9E63D43D96359540DED75BD3FD8B5A8F75A8D2734A7833EAE334DF5D39935F4ACB0D4CD3E1A667667EA268C8458 27EA0A6F9FC8E64D18B73F750FBDA716A06363F3CCB4004ED408276C16F1921EBB23EFE73452625B5464A1822A9DEF4C28FB0C889E44008C650CAC85 32956A94246A9C4041C81C1A905CD247BAEE5F5E288923EA9185F5CC6CC1DA19F80B55BB43B1D607EA5CBA390B11D8ED994E2FCE57E0833BA73A8F82 E0D4F9137AE7DE53DCA6B17F60991101B3420B3764443FB03E0F9B6EFD13458C3AC776C626B3E905FD914E1C8B641C9C3B81AEE8DD9C62E7C1ADA865 70DCCE6671BA8EB3AD60E639E931423B7958475C7AC2E96240DE129E9F690A47D52499CC543A19C5774C390677142B354DE2E958DDEB4AC5C5766FCE BE57A679AD7297AC13EA216AFB9781C4EC51F5A4386A77582CD0058F8E739770A645CBAF537D7151DA0F61CD55E92CB1CE450D854BACD2AD6AB974D8 DA61FBF4E6DAEAAB3878F32684AD7FD787037D310B479BC30EF7464C3ACF60A7E5F33339BF99D2B94273CEBAAD7F2DF5C6FC4F15EF5CE144662BB369 6C91D7D0F3875888ABAE905D1F604AD879227E2BBCA3FE3DA6F71D18CF939DBE6F637ADF8139DB1AC87FC7F4642496DC188DDE7CE266C0E8E387FAFA 723119627DCC5137CEFA93F9D9B47EA2CB8253E3410389D6D66FDA1EF4FAE0FA2A739D9371E7DCA412C3E40B1C66F8414314C15A9041E222BDE82E0D 0CDDC1E4E185CE406FD34B8AC079896DDF019D273CDB7720260F75599AFCDB7297083FA03D5D849FF716C15C31F4E26F80A63AB98BE09A0E9C4CBB31 65E3E8DE645994E18033E71437B8B87FC125EE6FF24BFADC400D54FF8B17D4ED8A8293F25BF56A84BB0AEBC6949C4C166723CCBD2676C1F73F433849 770938EB722FEEF46E3ECEECFF84EE26FDC275C208C3370E621528F16A95EBA359AD98F3B05A1DB5CD57AB0737F8E7EC227E04023B95FEBCB279F98A 240EEBA6B225F3A0232F9A7FE62CA8B4AD0DFDE8528DB819CB4ABA8FE4EDB732626BB5EB6AA5C67D4AD23EA9049B74867E8EF91B87FF3801753C0265 8A9D4C632C23D0670A7F60596802E888854197E32984405132F61A9452BCB0E0C42D0048C536248CA9111F93290BA4DCBF150A450F0FC33F0B5C488B CDBE0A8B2A0BF7F88E44FC2585C76E7B77EB720B320FC3821CFF0DC6FC0DE63D080000

Решение задачи: «Странная мини-игра на Python»

textual
Листинг программы
import hashlib
sha256 = lambda s: hashlib.sha256(path).digest()
 
b32 = lambda x: int(0xFFFFFFFF & x)
 
mtindex = 624
mt = [0] * 624
mt[0] = 42
for i in range(1, 624):
    mt[i] = b32(1812433253 * (mt[i - 1] ^ mt[i - 1] >> 30) + i)
 
def mtget():
    global mtindex
    global mt
 
    if mtindex >= 624:
        for i in range(624):
            y = b32((mt[i] & 0x80000000) +
                (mt[(i + 1) % 624] & 0x7fffffff))
            mt[i] = mt[(i + 397) % 624] ^ y >> 1
            if y % 2 != 0:
                mt[i] = mt[i] ^ 0x9908b0df
        mtindex = 0
 
    y = mt[mtindex]
    y = y ^ y >> 11
    y = y ^ y << 7 & 2636928640
    y = y ^ y << 15 & 4022730752
    y = y ^ y >> 18
    mtindex += 1
    return b32(y)
 
 
size = 9*2+1
maze = [[[0]*size for i in range(size)] for i in range(size)]
 
def getM(s):
    return maze[s[0]][s[1]][s[2]]
def setM(s, v):
    maze[s[0]][s[1]][s[2]] = v
 
isWall  = lambda s: min(s) >= 0 and max(s) < size and getM(s) == 0
isSpace = lambda s: min(s) >= 0 and max(s) < size and getM(s) != 0
 
 
directions = \
[
lambda s: (s[0]-1, s[1]  , s[2]  ),
lambda s: (s[0]+1, s[1]  , s[2]  ),
lambda s: (s[0]  , s[1]-1, s[2]  ),
lambda s: (s[0]  , s[1]+1, s[2]  ),
lambda s: (s[0]  , s[1]  , s[2]-1),
lambda s: (s[0]  , s[1]  , s[2]+1)
]
 
 
stack = [(1,1,1)]
setM(stack[0], 1)
 
def makeNext():
    pos = stack[-1]
    available = [d for d in directions if isWall(d(d(pos)))]
    d = available[mtget() % len(available)]
    pos = d(pos)
    setM(pos, len(stack))
    pos = d(pos)
    stack.append(pos)
    setM(pos, len(stack))
 
def makeMaze():
    while len(stack) > 0:
        try:
            makeNext()
        except:
            stack.pop(-1)
 
 
def testPath(path):
    pos = (size-2,size-2,size-2)
    good = True
    for step in path:
        d = directions[int(step)]
        pos = d(pos)
        good = good and isSpace(pos)
        pos = d(pos)
        good = good and isSpace(pos)
    return good and pos == (1,1,1)
 
 
 
if __name__ == '__main__':
    makeMaze()
    path = raw_input().strip()
    if not testPath(path):
        raise Exception()
    h = sha256(sha256(path))
    mask = [225, 38, 235, 89, 101, 61, 53, 254, 173, 180, 141, 92, 9, 88, 26, 64, 231, 157, 56, 210, 61, 222, 220, 160, 167, 129, 115, 247, 137, 218]
    print ''.join([chr(ord(h[i]) ^ mask[i]) for i in range(len(mask))])

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5