1 implementation module roll
9 e :: [Int] Int -> [Int]
16 add [a:b:rest] = [b+a:rest]
21 sub [a:b:rest] = [b-a:rest]
26 mul [a:b:rest] = [b*a:rest]
31 div [a:b:rest] = [b/a:rest]
33 modc :: [Int] -> [Int]
36 modc[a:b:rest] = [modulo b a:rest]
40 dup[a:rest] = [a:a:rest]
42 notc :: [Int] -> [Int]
44 notc[0:rest] = [1:rest]
45 notc[_:rest] = [0:rest]
54 roll :: [Int] -> [Int]
58 |modulo a b == 0 = rest
60 |b > length rest = rest
61 |a == 1 = roll1 [b:rest]
62 |a > 0 = roll ([a-1] ++ [b] ++ roll1 [b:rest])
63 |a < 0 = roll ([modulo a b] ++ [b:rest])
65 pointer :: [Int] -> [Int]
67 pointer [a:rest] = rest
69 //outnum_s :: stack_output stack -> stack_output
70 outnum_s :: [Int] [Int] -> [Int]
72 outnum_s _ [a:rest] = rest
74 outnum_so :: [Int] [Int] -> [Int]
76 outnum_so so [a:rest] = add_to_s a so
78 //innum_s :: stack_input stack -> stack
79 innum_s :: [Int] [Int] -> [Int]
81 innum_s [a:rest] s = add_to_s a s
83 innum_si :: [Int] [Int] -> [Int]
85 innum_si [a:rest] s = rest
88 roll1 :: [Int] -> [Int]
90 roll1 [b:c:d:rest] = [d] ++ roll1[b-1:c:rest]
92 modulo :: Int Int -> Int
96 |otherwise = modulo (a-b) b
98 add_to_s :: a [a] -> [a]
100 add_to_s a b = b ++ [a]
110 start21 = (notc(gre(sub(push 1(push 1(notc(sub(push 1(roll(push 1(push 3(dup(roll(push 1(push 2[2,1])))))))))))))))
111 start22 = roll(push 1(push 2(pop(roll(push 2(push 3(sub(push 1(roll(push 1(push 3(dup(roll(push 1(push 2(pop(roll(push 1(push 2(mul(roll(push 1(push 4(dup(roll(push 2(push 3(dup[1,2]))))))))))))))))))))))))))))
112 start23 = pointer(notc(gre(sub(push 1(push 1(notc(sub(push 1(roll(push 1(push 3(dup(roll(push 1(push 2(push 1 (push 2 stack)))))))))))))))))
114 start51 = (notc(gre(sub(push 1(push 1(notc(sub(push 1(roll(push 1(push 3(dup(roll(push 1(push 2[120,1])))))))))))))))
115 start52 = roll(push 1(push 2(pop(roll(push 2(push 3(sub(push 1(roll(push 1(push 3(dup(roll(push 1(push 2(pop(roll(push 1(push 2(mul(roll(push 1(push 4(dup(roll(push 2(push 3(dup[60,2]))))))))))))))))))))))))))))
116 start53 = pointer(notc(gre(sub(push 1(push 1(notc(sub(push 1(roll(push 1(push 3(dup(roll(push 1(push 2[60,2])))))))))))))))
117 start54 = roll(push 1(push 2(pop(roll(push 2(push 3(sub(push 1(roll(push 1(push 3(dup(roll(push 1(push 2(pop(roll(push 1(push 2(mul(roll(push 1(push 4(dup(roll(push 2(push 3(dup[20,3]))))))))))))))))))))))))))))
118 start55 = pointer(notc(gre(sub(push 1(push 1(notc(sub(push 1(roll(push 1(push 3(dup(roll(push 1(push 2[20,3])))))))))))))))
119 start56 = roll(push 1(push 2(pop(roll(push 2(push 3(sub(push 1(roll(push 1(push 3(dup(roll(push 1(push 2(pop(roll(push 1(push 2(mul(roll(push 1(push 4(dup(roll(push 2(push 3(dup[5,4]))))))))))))))))))))))))))))
120 start57 = pointer(notc(gre(sub(push 1(push 1(notc(sub(push 1(roll(push 1(push 3(dup(roll(push 1(push 2[5,4])))))))))))))))
121 start58 = roll(push 1(push 2(pop(roll(push 2(push 3(sub(push 1(roll(push 1(push 3(dup(roll(push 1(push 2(pop(roll(push 1(push 2(mul(roll(push 1(push 4(dup(roll(push 2(push 3(dup[1,5]))))))))))))))))))))))))))))
122 start59 = pointer(notc(gre(sub(push 1(push 1(notc(sub(push 1(roll(push 1(push 3(dup(roll(push 1(push 2(push y (push x stack)))))))))))))))))