with open('ook_code.txt', 'r', encoding='utf-8') as f:
ook_text = f.read().strip()
# Split by double spaces to get Ook tokens
import re
tokens = re.findall(r'Ook[.?!]', ook_text)
# Build Ook pairs
ook_pairs = []
for i in range(0, len(tokens) - 1, 2):
ook_pairs.append(tokens[i] + ' ' + tokens[i+1])
# Convert to Brainfuck
mapping = {
'Ook. Ook?': '>',
'Ook? Ook.': '<',
'Ook. Ook.': '+',
'Ook! Ook!': '-',
'Ook! Ook.': '.',
'Ook. Ook!': ',',
'Ook! Ook?': '[',
'Ook? Ook!': ']'
}
bf_code = ''
for pair in ook_pairs:
if pair in mapping:
bf_code += mapping[pair]
print(f'Ook pairs: {len(ook_pairs)}')
print(f'BF length: {len(bf_code)}')
# Execute Brainfuck
tape = {}
pointer = 0
code_pointer = 0
output = []
while code_pointer < len(bf_code):
if pointer not in tape:
tape[pointer] = 0
cmd = bf_code[code_pointer]
if cmd == '>':
pointer += 1
elif cmd == '<':
pointer -= 1
elif cmd == '+':
if pointer not in tape:
tape[pointer] = 0
tape[pointer] = (tape[pointer] + 1) % 256
elif cmd == '-':
if pointer not in tape:
tape[pointer] = 0
tape[pointer] = (tape[pointer] - 1) % 256
elif cmd == '.':
output.append(chr(tape.get(pointer, 0)))
elif cmd == ',':
tape[pointer] = 0
elif cmd == '[':
if tape.get(pointer, 0) == 0:
depth = 1
code_pointer += 1
while depth > 0 and code_pointer < len(bf_code):
if bf_code[code_pointer] == '[':
depth += 1
elif bf_code[code_pointer] == ']':
depth -= 1
code_pointer += 1
code_pointer -= 1
elif cmd == ']':
if tape.get(pointer, 0) != 0:
depth = 1
code_pointer -= 1
while depth > 0 and code_pointer >= 0:
if bf_code[code_pointer] == ']':
depth += 1
elif bf_code[code_pointer] == '[':
depth -= 1
code_pointer -= 1
code_pointer += 1
code_pointer += 1
result = ''.join(output)
print('\\n' + '=' * 60)
print('MESSAGE FROM ORANGUTAN:')
print('=' * 60)
print(result)
print('=' * 60)
MESSAGE FROM ORANGUTAN:
89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 00 00 00 CE 00 00 00 0E 01 00 00 00 00 4F 8C 1E DD 00 00 01 01 49 44 41 54 78 DA 6D CE A1 4E C3 50 18 C5 F1 FF EE 2A 6E 48 43 2A 2A EA A8 98 AC A8 A8 22 13 15 08 24 A2 02 81 E0 31 50 A4 41 90 A6 6A A2 92 07 E0 01 10 C8 2B 10 15 23 A9 40 20 10 37 C1 54 2C A1 21 4D 73 13 C2 3E 0C 90 89 FD D4 39 39 E6 20 22 EF B2 E3 4B 8E 3E 44 44 E4 4E 1D 57 AD AF 7B 7A 7A E8 01 2A 03 5D 0B A9 72 0F 8E 8C 1D 1B 02 EC 06 62 C5 49 09 83 1E F4 50 31 DC B4 AC 2A 56 4F 79 B5 AC 50 0B 93 83 4D 6C 62 33 EC E1 C8 BD E3 F2 8D 9C 0C E5 CE B0 6B 34 1A 0F 02 C3 E9 0B C4 80 87 A2 F8 EC 32 83 C1 74 18 6E 21 81 92 81 6E 54 69 A4 D3 6D 4D 4D 5D 50 73 0D 1A 20 A0 F0 15 98 98 89 89 29 62 FA 3D 59 62 88 F0 28 4B 14 00 CE 87 25 8F EE 22 B0 E9 15 0E 85 7F C0 1A 80 06 F0 39 0F C3 70 D1 84 AF 0D 33 81 21 60 8F 67 05 8C FB 16 BA 99 FC 67 99 6F 91 F9 F6 AF 7E FF 00 B6 4A 6A 64 35 AD A6 0E 00 00 00 00 49 45 4E 44 AE 42 60 82
