1 public class TestRunner {
5 public TestRunner(int[] args) {
9 private Vector algb2(int x,
18 result = new Vector();
20 // algb2 k0j1 k1j1 ((y,k0j):ys)
21 int y = ((Integer)ys.elementAt(0)).intValue();
22 int yt = ((Integer)yst.elementAt(0)).intValue();
23 Vector ys2 = new Vector();
24 for(int i = 1; i < ys.size(); i++) {
25 ys2.addElement(ys.elementAt(i));
27 Vector yst2 = new Vector();
28 for(int i = 1; i < yst.size(); i++) {
29 yst2.addElement(yst.elementAt(i));
32 // = let kjcurr = if x == y then k0j1+1 else max k1j1 k0j
33 // in (y,kjcurr) : algb2 k0j kjcurr ys
38 k = (q > yt) ? q : yt;
40 result = this.algb2(x, yt, k, ys2, yst2, yst1);
41 result.insertElementAt(new Integer(y), 0);
42 yst1.insertElementAt(new Integer(k), 0);
47 private Vector algb1(Vector xs,
52 // algb1 [] ys' = map snd ys'
56 // = algb1 xs (algb2 0 0 ys')
57 int x = ((Integer)xs.elementAt(0)).intValue();
58 Vector xs1 = new Vector();
59 for(int i = 1; i < xs.size(); i++) {
60 xs1.addElement(xs.elementAt(i));
63 Vector yst1 = new Vector();
64 Vector ys1 = this.algb2(x, 0, 0, ys, yst, yst1);
66 result = this.algb1(xs1, ys1, yst1);
71 private Vector algb(Vector xs,
74 // = 0 : algb1 xs [ (y,0) | y <- ys ]
75 Vector yst = new Vector();
76 for(int i = 0; i < ys.size(); i++) {
77 yst.addElement(new Integer(0));
79 Vector result = this.algb1(xs, ys, yst);
80 result.insertElementAt(new Integer(0), 0);
84 private int findk(int k,
91 // findk k km m [] = km
94 // findk k km m ((x,y):xys)
95 int x = ((Integer)v.elementAt(0)).intValue();
96 int y = ((Integer)vt.elementAt(0)).intValue();
97 Vector v1 = new Vector();
98 for(int i = 1; i < v.size(); i++) {
99 v1.addElement(v.elementAt(i));
101 Vector vt1 = new Vector();
102 for(int i = 1; i < vt.size(); i++) {
103 vt1.addElement(vt.elementAt(i));
107 // | x+y >= m = findk (k+1) k (x+y) xys
108 result = this.findk(k+1, k, x+y, v1, vt1);
110 // | otherwise = findk (k+1) km m xys
111 result = this.findk(k+1, km, m, v1, vt1);
117 private Vector algc(int m,
122 Vector result = null;
124 // algc m n xs [] = id
126 } else if(xs.size() == 1) {
127 // algc m n [x] ys = if x `elem` ys then (x:) else id
130 int x = ((Integer)xs.elementAt(0)).intValue();
132 boolean iscontains = false;
133 for(int i = 0; i < ys.size(); i++) {
134 if(((Integer)ys.elementAt(i)).intValue() == x) {
136 i = ys.size(); // break;
141 r.insertElementAt(new Integer(x), 0);
145 // = algc m2 k xs1 (take k ys) . algc (m-m2) (n-k) xs2 (drop k ys)
151 Vector xs1 = new Vector();
153 for(i = 0; i < m2; i++) {
154 xs1.addElement(xs.elementAt(i));
158 Vector xs2 = new Vector();
159 for(; i < xs.size(); i++) {
160 xs2.addElement(xs.elementAt(i));
164 Vector l1 = this.algb(xs1, ys);
166 // l2 = reverse (algb (reverse xs2) (reverse ys))
167 Vector rxs2 = new Vector();
168 for(i = xs2.size(); i > 0; i--) {
169 rxs2.addElement(xs2.elementAt(i - 1));
171 Vector rys = new Vector();
172 for(i = ys.size(); i > 0; i--) {
173 rys.addElement(ys.elementAt(i - 1));
175 Vector rl2 = algb(rxs2, rys);
176 Vector l2 = new Vector();
177 for(i = rl2.size(); i > 0; i--) {
178 l2.addElement(rl2.elementAt(i - 1));
181 // k = findk 0 0 (-1) (zip l1 l2)
182 int k = this.findk(0, 0, (-1), l1, l2);
185 // = algc m2 k xs1 (take k ys) . algc (m-m2) (n-k) xs2 (drop k ys)
186 Vector ysk = new Vector();
188 for(i = 0; i < k; i++) {
189 ysk.addElement(ys.elementAt(i));
191 Vector ysd = new Vector();
193 for(; i < ys.size(); i++) {
194 ysd.addElement(ys.elementAt(i));
196 Vector interresult = this.algc(m-m2, n-k, xs2, ysd, r);
197 result = this.algc(m2, k, xs1, ysk, interresult);
203 Vector xs = new Vector();
204 Vector ys = new Vector();
206 int x1 = this.testargs[0];
207 int x2 = this.testargs[1];
208 int xfinal = this.testargs[2];
210 int y1 = this.testargs[3];
211 int y2 = this.testargs[4];
212 int yfinal = this.testargs[5];
214 xs.addElement(new Integer(x1));
215 for(int i = x2; i <= xfinal; ) {
216 xs.addElement(new Integer(i));
219 ys.addElement(new Integer(y1));
220 for(int i = y2; i <= yfinal; ) {
221 ys.addElement(new Integer(i));
225 Vector r = new Vector();
227 Vector result = this.algc(xs.size(), ys.size(), xs, ys, r);
228 for(int i = 0; i < result.size(); i++) {
229 int tmp = ((Integer)result.elementAt(i)).intValue();
232 public static void main(String argv[]){
234 int[] args = new int[6];
241 for(int i = 0; i < threadnum; ++i) {
242 TestRunner tr = new TestRunner(args);