def proc_bool_eval(in_bool): return 'T' if in_bool else 'F' def proc_bool(in_char): return False if in_char == 'F' else True def char_move(in_char, change): return chr(ord(in_char)+ change) def proc_not(in_char): return proc_bool_eval(not proc_bool(in_char)) def proc_and(char1, char2): return proc_bool_eval(proc_bool(char1) and proc_bool(char2)) def proc_or(char1, char2): return proc_bool_eval(proc_bool(char1) or proc_bool(char2)) def proc_xor(char1, char2): return proc_bool_eval(proc_bool(char1) != proc_bool(char2)) def process(optcode, screen, next_optcode): if optcode == 'C': return '' if optcode == 'D': return screen + next_optcode if optcode == 'F': return screen[0] + screen if optcode == 'G': return char_move(screen[0], -1) + screen[1:] if optcode == 'H': return char_move(screen[0], 1) + screen[1:] if optcode == 'J': return ''.join(sorted(screen)) if optcode == 'M': return proc_not(screen[0]) + screen[1:] if optcode == 'N': return proc_and(screen[0], screen[1]) + screen[2:] if optcode == 'P': return proc_xor(screen[0], screen[1]) + screen[2:] if optcode == 'Q': return proc_or(screen[0], screen[1]) + screen[2:] if optcode == 'R': return screen[-1] + screen[:-1] if optcode == 'S': return next_optcode + screen if optcode == 'T': return ('TRUE' if proc_bool(screen[0]) else 'FALSE') + screen[1:] if optcode == 'W': return screen[1:] if optcode == 'X': return screen[1] + screen[0] + screen[2:] if optcode == 'Z': return screen[::-1] raise Exception('UNKNOWN OPCODE' + optcode) def run_program(instructions): instructions = instructions +'0' screen = 'OK' skip_next = False for i, optcode in enumerate(instructions[:-1]): if skip_next: skip_next = False continue next_optcode = instructions[i+1] try: screen = process(optcode, screen, next_optcode) except IndexError: return None skip_next = optcode in ['S', 'D'] #print 'After {}, screen is {}'.format(optcode, screen) return screen def try_all(): opt_bank = 'CDFGHJMNPQRSTWXZ' for l1 in opt_bank: for l2 in opt_bank: for l3 in opt_bank: for l4 in opt_bank: for l5 in opt_bank: instructions = ''.join([l1, l2, l3, l4, l5,]) result = run_program(instructions) print instructions + ' yielded ' + str(result) if result == 'TESLA': return if __name__ == "__main__": # run_program('CDFFDTMNQT') # run_program('XHFRNFGDAJDEZX') try_all()
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question