kleine aanpassing layout
[sec1415.git] / functions.icl
1 implementation module roll
2
3 import StdInt, StdList
4
5 d :: [Int] -> [Int]
6 d [] = []
7 d [a:rest] = rest
8
9 e :: [Int] Int -> [Int]
10 e [] a = [a]
11 e [b] a = [a] ++ [b]
12
13 add :: [Int] -> [Int]
14 add [] = []
15 add [a] = [a]
16 add [a:b:rest] = [b+a:rest]
17
18 sub :: [Int] -> [Int]
19 sub [] = []
20 sub [a] = [a]
21 sub [a:b:rest] = [b-a:rest]
22
23 mul :: [Int] -> [Int]
24 mul [] = []
25 mul [a] = [a]
26 mul [a:b:rest] = [b*a:rest]
27
28 div :: [Int] -> [Int]
29 div [] = []
30 div [a] = [a]
31 div [a:b:rest] = [b/a:rest]
32
33 modc :: [Int] -> [Int]
34 modc[] = []
35 modc[a] = [a]
36 modc[a:b:rest] = [modulo b a:rest]
37
38 dup :: [Int] -> [Int]
39 dup[] = []
40 dup[a:rest] = [a:a:rest]
41
42 notc :: [Int] -> [Int]
43 notc[] = []
44 notc[0:rest] = [1:rest]
45 notc[_:rest] = [0:rest]
46
47 gre :: [Int] -> [Int]
48 gre[] = []
49 gre[a] = [a]
50 gre[a:b:rest]
51 |a >= b = [0:rest]
52 |otherwise = [1:rest]
53
54 roll :: [Int] -> [Int]
55 roll [] = []
56 roll [a] = [a]
57 roll [a:b:rest]
58 |modulo a b == 0 = rest
59 |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])
64
65 pointer :: [Int] -> [Int]
66 pointer [] = []
67 pointer [a:rest] = rest
68
69 //outnum_s :: stack_output stack -> stack_output
70 outnum_s :: [Int] [Int] -> [Int]
71 outnum_s _ [] = []
72 outnum_s _ [a:rest] = rest
73
74 outnum_so :: [Int] [Int] -> [Int]
75 outnum_so so [] = so
76 outnum_so so [a:rest] = add_to_s a so
77
78 //innum_s :: stack_input stack -> stack
79 innum_s :: [Int] [Int] -> [Int]
80 innum_s [] _ = []
81 innum_s [a:rest] s = add_to_s a s
82
83 innum_si :: [Int] [Int] -> [Int]
84 innum_si [] s = []
85 innum_si [a:rest] s = rest
86
87 //help functions
88 roll1 :: [Int] -> [Int]
89 roll1 [1:rest] = rest
90 roll1 [b:c:d:rest] = [d] ++ roll1[b-1:c:rest]
91
92 modulo :: Int Int -> Int
93 modulo a b
94 |a<0 = modulo (a+b) b
95 |a<b = a
96 |otherwise = modulo (a-b) b
97
98 add_to_s :: a [a] -> [a]
99 add_to_s a [] = [a]
100 add_to_s a b = b ++ [a]
101
102 x = 5
103 y = 1
104 stack = []
105 so = []
106 si = []
107
108 Start = start51
109
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)))))))))))))))))
113
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)))))))))))))))))