Skip to content

Commit b362b80

Browse files
committed
Inlined the code, MASSIVE SPEEDUPS :D :D :D :D
Also fixed a stupid bug with my jumps. Durr. rot13 and squares pass with flying colors now. Finally, also added support for "!stdinputtext" for taking input on the last line of a ook program.
1 parent ec0ce68 commit b362b80

File tree

4 files changed

+173
-91
lines changed

4 files changed

+173
-91
lines changed

README

+3-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ This is a short Ook interpreter written in Python. Turing complete! Run some of
33
python pooky.py helloworld.ook
44

55
TODO:
6-
- A GUI?
7-
- Selector for running programs?
8-
- More advanced "auto-input" for feeding into the program?
9-
- Done with a !inputstufftexthere by itself on the last line.
6+
- A GUI
7+
- Selector for running programs
8+
- Configurable stdin

pooky.py

+76-86
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ def parse(raw):
1515
a,b,c = "Ook.", "Ook?", "Ook!"
1616
elements = raw.split()
1717
raw_commands = [a+b, b+a, a+a, c+c, a+c, c+a, c+b, b+c]
18-
real_commands = ["next", "prev", "inc", "dec", "read",
19-
"print", "j1", "j2"]
18+
real_commands = ["n", "p", "i", "d", "r",
19+
"w", "(", ")"]
2020

2121
translate = dict(zip(raw_commands, real_commands))
2222

@@ -25,96 +25,86 @@ def parse(raw):
2525
yield translate[command]
2626

2727

28-
class Ook:
29-
"""Implements the Ook commands."""
30-
31-
def __init__(self, raw):
32-
self.memory = [0]*30000
33-
self.mp = 0
34-
self.commands = [x for x in parse(raw)]
35-
self.cp = 0
36-
# Cached j location, lookup
37-
self.j1 = {}
38-
self.j2 = {}
39-
40-
# Populate the cache, make a pass through the input
41-
s = []
42-
for i, cmd in enumerate(self.commands):
43-
cmd = self.commands[i]
44-
if cmd is "j1":
45-
s.append(i)
46-
elif cmd is "j2":
47-
j1 = s.pop()
48-
self.j1[j1] = i
49-
50-
self.j2 = dict(zip(self.j1.values(), self.j1.keys()))
51-
52-
def next(self):
53-
cmd = self.commands[self.cp]
54-
Ook.__dict__["_"+cmd](self)
55-
self.cp += 1
56-
57-
def _next(self):
58-
self.mp += 1
59-
60-
def _prev(self):
61-
self.mp -= 1
62-
63-
def _inc(self):
64-
self.memory[self.mp] += 1
65-
if self.memory[self.mp] > 255:
66-
self.memory[self.mp] = 0
67-
68-
def _dec(self):
69-
self.memory[self.mp] -= 1
70-
if self.memory[self.mp] < 0:
71-
self.memory[self.mp] = 255
72-
73-
def _read(self):
74-
print "In:",
75-
c = raw_input()
76-
if c:
77-
c = c[0]
78-
self.memory[self.mp] = ord(c)
79-
80-
def _print(self):
81-
sys.stdout.write(chr(self.memory[self.mp]))
82-
#sys.stdout.flush()
83-
84-
def _j1(self):
85-
if self.cp not in self.j1:
86-
offset = self.commands[self.cp:].index("j2")
87-
# Cache the j1 and j2 locations
88-
self.j1[self.cp] = self.cp + offset
89-
self.j2[self.cp+offset] = self.cp
90-
if self.memory[self.mp] == 0:
91-
# Skipping the loop, condition not met
92-
self.j1[self.cp]
93-
94-
def _j2(self):
95-
if self.memory[self.mp] != 0:
96-
#temp = self.commands[:self.cp+1]
97-
#temp.reverse()
98-
#offset = temp.index("j1")
99-
#self.cp -= offset
100-
101-
# Jump back to stored j1
102-
self.cp = self.j2[self.cp]
103-
104-
10528
def main():
10629
if len(sys.argv) < 2:
10730
print "Usage: pooky.py <filename>"
10831
sys.exit(0)
10932

110-
o = Ook(open(sys.argv[1]).read())
111-
112-
print o.commands[:117]
33+
# Initialize
34+
memory = [0]*30000
35+
mp = 0
36+
raw = open(sys.argv[1], "r").readlines()
37+
38+
# Look for "stdin" as the last line
39+
stdin = ""
40+
if raw[-1][0] == "!":
41+
stdin = raw[-1][1:]
42+
raw = raw[:-1]
43+
44+
commands = [x for x in parse("".join(raw))]
45+
cp = 0
46+
# Cached j location, lookup
47+
j1 = {}
48+
j2 = {}
49+
50+
# Populate the cache, make a pass through the input
51+
s = []
52+
for i, cmd in enumerate(commands):
53+
cmd = commands[i]
54+
if cmd is "(":
55+
s.append(i)
56+
elif cmd is ")":
57+
j = s.pop()
58+
j1[j] = i
59+
60+
j2 = dict(zip(j1.values(), j1.keys()))
61+
62+
end = len(commands)
63+
while cp < end:
64+
cmd = commands[cp]
65+
66+
if cmd is "n":
67+
mp += 1
68+
69+
elif cmd is "p":
70+
mp -= 1
71+
72+
elif cmd is "i":
73+
memory[mp] += 1
74+
if memory[mp] > 255:
75+
memory[mp] = 0
76+
77+
elif cmd is "d":
78+
memory[mp] -= 1
79+
if memory[mp] < 0:
80+
memory[mp] = 255
81+
82+
elif cmd is "r":
83+
if len(stdin):
84+
c = stdin[0]
85+
stdin = stdin[1:]
86+
memory[mp] = ord(c)
87+
else:
88+
return
89+
90+
elif cmd is "w":
91+
sys.stdout.write(chr(memory[mp]))
92+
#sys.stdout.flush()
93+
94+
elif cmd is "(":
95+
if memory[mp] == 0:
96+
# Skipping the loop, condition not met
97+
cp = j1[cp]
98+
99+
elif cmd is ")":
100+
if memory[mp] != 0:
101+
# Jump back to stored j1
102+
cp = j2[cp]
103+
104+
# Increment command pointer
105+
cp += 1
113106

114-
end = len(o.commands)
115-
while o.cp < end:
116-
o.next()
117107

118108

119109
if __name__ == "__main__":
120-
cProfile.run("main()")
110+
main()

rot13.ook

+2-1
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,5 @@ Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook.
8888
Ook. Ook? Ook? Ook! Ook? Ook. Ook! Ook. Ook! Ook? Ook! Ook! Ook? Ook!
8989
Ook. Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook?
9090
Ook! Ook? Ook! Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook? Ook! Ook? Ook.
91-
Ook? Ook!
91+
Ook? Ook!
92+
!helloworld

rot13big.ook

+92
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
Ook. Ook. Ook! Ook? Ook. Ook! Ook. Ook. Ook! Ook? Ook! Ook! Ook! Ook?
2+
Ook. Ook? Ook. Ook. Ook. Ook? Ook. Ook. Ook? Ook. Ook? Ook. Ook! Ook!
3+
Ook? Ook! Ook. Ook? Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook? Ook! Ook!
4+
Ook? Ook! Ook. Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
5+
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook.
6+
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
7+
Ook! Ook! Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook?
8+
Ook? Ook. Ook! Ook? Ook! Ook! Ook? Ook! Ook. Ook? Ook. Ook? Ook. Ook?
9+
Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook?
10+
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook? Ook. Ook? Ook. Ook.
11+
Ook? Ook. Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook? Ook? Ook. Ook. Ook.
12+
Ook. Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook? Ook? Ook.
13+
Ook. Ook. Ook? Ook. Ook! Ook! Ook. Ook? Ook. Ook? Ook! Ook! Ook? Ook!
14+
Ook? Ook. Ook! Ook? Ook. Ook? Ook. Ook. Ook? Ook. Ook! Ook! Ook? Ook!
15+
Ook? Ook! Ook. Ook? Ook! Ook? Ook? Ook. Ook? Ook! Ook? Ook. Ook? Ook!
16+
Ook. Ook? Ook. Ook? Ook! Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook? Ook.
17+
Ook? Ook. Ook! Ook? Ook! Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook?
18+
Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook? Ook. Ook. Ook? Ook. Ook? Ook.
19+
Ook? Ook. Ook! Ook! Ook? Ook! Ook. Ook? Ook. Ook? Ook! Ook? Ook? Ook.
20+
Ook? Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook! Ook? Ook! Ook. Ook?
21+
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
22+
Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook!
23+
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook! Ook!
24+
Ook? Ook! Ook? Ook. Ook! Ook! Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook.
25+
Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
26+
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook!
27+
Ook? Ook! Ook? Ook. Ook! Ook! Ook? Ook. Ook! Ook? Ook. Ook? Ook. Ook?
28+
Ook. Ook? Ook. Ook. Ook? Ook. Ook? Ook. Ook! Ook? Ook. Ook? Ook. Ook.
29+
Ook. Ook? Ook! Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook? Ook. Ook! Ook!
30+
Ook? Ook! Ook. Ook? Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook? Ook! Ook!
31+
Ook? Ook! Ook. Ook? Ook! Ook? Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook.
32+
Ook? Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook.
33+
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook.
34+
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
35+
Ook! Ook! Ook? Ook! Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook? Ook.
36+
Ook! Ook! Ook? Ook. Ook! Ook! Ook? Ook! Ook. Ook? Ook! Ook? Ook? Ook.
37+
Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook? Ook! Ook! Ook? Ook! Ook. Ook?
38+
Ook. Ook? Ook. Ook? Ook. Ook? Ook! Ook? Ook? Ook. Ook? Ook. Ook? Ook.
39+
Ook? Ook. Ook! Ook! Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook! Ook!
40+
Ook? Ook! Ook? Ook! Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
41+
Ook. Ook. Ook! Ook? Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
42+
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook?
43+
Ook! Ook! Ook? Ook! Ook? Ook. Ook? Ook. Ook! Ook! Ook! Ook? Ook. Ook?
44+
Ook. Ook? Ook. Ook. Ook. Ook? Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook.
45+
Ook! Ook! Ook? Ook! Ook. Ook? Ook. Ook? Ook! Ook? Ook? Ook. Ook? Ook.
46+
Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook! Ook? Ook! Ook. Ook. Ook. Ook?
47+
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook?
48+
Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook?
49+
Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook? Ook? Ook. Ook! Ook?
50+
Ook! Ook! Ook? Ook! Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook?
51+
Ook? Ook. Ook. Ook. Ook? Ook. Ook! Ook! Ook. Ook? Ook. Ook? Ook! Ook!
52+
Ook? Ook! Ook? Ook. Ook! Ook? Ook. Ook? Ook. Ook. Ook? Ook. Ook! Ook!
53+
Ook? Ook! Ook? Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook?
54+
Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook? Ook.
55+
Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook?
56+
Ook. Ook? Ook. Ook. Ook? Ook. Ook! Ook! Ook? Ook! Ook? Ook! Ook. Ook?
57+
Ook! Ook? Ook? Ook. Ook? Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook?
58+
Ook! Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook?
59+
Ook! Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook? Ook. Ook! Ook? Ook. Ook?
60+
Ook. Ook? Ook. Ook. Ook. Ook? Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook.
61+
Ook! Ook! Ook? Ook! Ook. Ook? Ook. Ook? Ook! Ook? Ook? Ook. Ook? Ook.
62+
Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook! Ook? Ook! Ook. Ook. Ook. Ook?
63+
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
64+
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook? Ook.
65+
Ook! Ook? Ook! Ook! Ook? Ook! Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook.
66+
Ook! Ook? Ook? Ook. Ook. Ook. Ook? Ook. Ook! Ook! Ook. Ook? Ook. Ook?
67+
Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook? Ook. Ook? Ook. Ook. Ook? Ook.
68+
Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook.
69+
Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
70+
Ook? Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook.
71+
Ook! Ook? Ook. Ook? Ook. Ook. Ook? Ook. Ook! Ook! Ook? Ook! Ook? Ook!
72+
Ook. Ook? Ook! Ook? Ook? Ook. Ook? Ook! Ook? Ook. Ook? Ook! Ook. Ook?
73+
Ook. Ook? Ook! Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook? Ook. Ook? Ook.
74+
Ook? Ook. Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
75+
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
76+
Ook! Ook! Ook. Ook? Ook. Ook? Ook! Ook? Ook! Ook? Ook! Ook! Ook? Ook!
77+
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook.
78+
Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
79+
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook?
80+
Ook. Ook? Ook? Ook! Ook? Ook. Ook! Ook? Ook. Ook? Ook. Ook. Ook. Ook.
81+
Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook.
82+
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
83+
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook? Ook! Ook. Ook?
84+
Ook? Ook! Ook? Ook. Ook! Ook? Ook! Ook! Ook? Ook! Ook. Ook. Ook. Ook.
85+
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook?
86+
Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
87+
Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook.
88+
Ook. Ook? Ook? Ook! Ook? Ook. Ook! Ook. Ook! Ook? Ook! Ook! Ook? Ook!
89+
Ook. Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook?
90+
Ook! Ook? Ook! Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook? Ook! Ook? Ook.
91+
Ook? Ook!
92+
!januaryxylophonelocustsdinnerjanuary

0 commit comments

Comments
 (0)