Странная мини-игра на 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))])
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д