implementation module roll import StdInt, StdList d :: [Int] -> [Int] d [] = [] d [a:rest] = rest e :: [Int] Int -> [Int] e [] a = [a] e [b] a = [a] ++ [b] add :: [Int] -> [Int] add [] = [] add [a] = [a] add [a:b:rest] = [b+a:rest] sub :: [Int] -> [Int] sub [] = [] sub [a] = [a] sub [a:b:rest] = [b-a:rest] mul :: [Int] -> [Int] mul [] = [] mul [a] = [a] mul [a:b:rest] = [b*a:rest] div :: [Int] -> [Int] div [] = [] div [a] = [a] div [a:b:rest] = [b/a:rest] modc :: [Int] -> [Int] modc[] = [] modc[a] = [a] modc[a:b:rest] = [modulo b a:rest] dup :: [Int] -> [Int] dup[] = [] dup[a:rest] = [a:a:rest] notc :: [Int] -> [Int] notc[] = [] notc[0:rest] = [1:rest] notc[_:rest] = [0:rest] gre :: [Int] -> [Int] gre[] = [] gre[a] = [a] gre[a:b:rest] |a >= b = [0:rest] |otherwise = [1:rest] roll :: [Int] -> [Int] roll [] = [] roll [a] = [a] roll [a:b:rest] |modulo a b == 0 = rest |b <= 0 = rest |b > length rest = rest |a == 1 = roll1 [b:rest] |a > 0 = roll ([a-1] ++ [b] ++ roll1 [b:rest]) |a < 0 = roll ([modulo a b] ++ [b:rest]) pointer :: [Int] -> [Int] pointer [] = [] pointer [a:rest] = rest //outnum_s :: stack_output stack -> stack_output outnum_s :: [Int] [Int] -> [Int] outnum_s _ [] = [] outnum_s _ [a:rest] = rest outnum_so :: [Int] [Int] -> [Int] outnum_so so [] = so outnum_so so [a:rest] = add_to_s a so //innum_s :: stack_input stack -> stack innum_s :: [Int] [Int] -> [Int] innum_s [] _ = [] innum_s [a:rest] s = add_to_s a s innum_si :: [Int] [Int] -> [Int] innum_si [] s = [] innum_si [a:rest] s = rest //help functions roll1 :: [Int] -> [Int] roll1 [1:rest] = rest roll1 [b:c:d:rest] = [d] ++ roll1[b-1:c:rest] modulo :: Int Int -> Int modulo a b |a<0 = modulo (a+b) b |a [a] add_to_s a [] = [a] add_to_s a b = b ++ [a] x = 5 y = 1 stack = [] so = [] si = [] Start = start51 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]))))))))))))))) 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])))))))))))))))))))))))))))) 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))))))))))))))))) 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]))))))))))))))) 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])))))))))))))))))))))))))))) 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]))))))))))))))) 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])))))))))))))))))))))))))))) 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]))))))))))))))) 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])))))))))))))))))))))))))))) 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]))))))))))))))) 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])))))))))))))))))))))))))))) 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)))))))))))))))))