3 public class TestRunner extends Thread {
7 public TestRunner(int[] args) {
11 private Vector algb2(int x,
20 result = new Vector();
22 // algb2 k0j1 k1j1 ((y,k0j):ys)
23 int y = ((Integer)ys.elementAt(0)).intValue();
24 int yt = ((Integer)yst.elementAt(0)).intValue();
25 Vector ys2 = new Vector();
26 for(int i = 1; i < ys.size(); i++) {
27 ys2.addElement(ys.elementAt(i));
29 Vector yst2 = new Vector();
30 for(int i = 1; i < yst.size(); i++) {
31 yst2.addElement(yst.elementAt(i));
34 // = let kjcurr = if x == y then k0j1+1 else max k1j1 k0j
35 // in (y,kjcurr) : algb2 k0j kjcurr ys
40 k = (q > yt) ? q : yt;
42 result = this.algb2(x, yt, k, ys2, yst2, yst1);
43 result.insertElementAt(new Integer(y), 0);
44 yst1.insertElementAt(new Integer(k), 0);
49 private Vector algb1(Vector xs,
54 // algb1 [] ys' = map snd ys'
58 // = algb1 xs (algb2 0 0 ys')
59 int x = ((Integer)xs.elementAt(0)).intValue();
60 Vector xs1 = new Vector();
61 for(int i = 1; i < xs.size(); i++) {
62 xs1.addElement(xs.elementAt(i));
65 Vector yst1 = new Vector();
66 Vector ys1 = this.algb2(x, 0, 0, ys, yst, yst1);
68 result = this.algb1(xs1, ys1, yst1);
73 private Vector algb(Vector xs,
76 // = 0 : algb1 xs [ (y,0) | y <- ys ]
77 Vector yst = new Vector();
78 for(int i = 0; i < ys.size(); i++) {
79 yst.addElement(new Integer(0));
81 Vector result = this.algb1(xs, ys, yst);
82 result.insertElementAt(new Integer(0), 0);
86 private int findk(int k,
93 // findk k km m [] = km
96 // findk k km m ((x,y):xys)
97 int x = ((Integer)v.elementAt(0)).intValue();
98 int y = ((Integer)vt.elementAt(0)).intValue();
99 Vector v1 = new Vector();
100 for(int i = 1; i < v.size(); i++) {
101 v1.addElement(v.elementAt(i));
103 Vector vt1 = new Vector();
104 for(int i = 1; i < vt.size(); i++) {
105 vt1.addElement(vt.elementAt(i));
109 // | x+y >= m = findk (k+1) k (x+y) xys
110 result = this.findk(k+1, k, x+y, v1, vt1);
112 // | otherwise = findk (k+1) km m xys
113 result = this.findk(k+1, km, m, v1, vt1);
119 private Vector algc(int m,
124 Vector result = null;
126 // algc m n xs [] = id
128 } else if(xs.size() == 1) {
129 // algc m n [x] ys = if x `elem` ys then (x:) else id
132 int x = ((Integer)xs.elementAt(0)).intValue();
134 boolean iscontains = false;
135 for(int i = 0; i < ys.size(); i++) {
136 if(((Integer)ys.elementAt(i)).intValue() == x) {
138 i = ys.size(); // break;
143 r.insertElementAt(new Integer(x), 0);
147 // = algc m2 k xs1 (take k ys) . algc (m-m2) (n-k) xs2 (drop k ys)
153 Vector xs1 = new Vector();
155 for(i = 0; i < m2; i++) {
156 xs1.addElement(xs.elementAt(i));
160 Vector xs2 = new Vector();
161 for(; i < xs.size(); i++) {
162 xs2.addElement(xs.elementAt(i));
166 Vector l1 = this.algb(xs1, ys);
168 // l2 = reverse (algb (reverse xs2) (reverse ys))
169 Vector rxs2 = new Vector();
170 for(i = xs2.size(); i > 0; i--) {
171 rxs2.addElement(xs2.elementAt(i - 1));
173 Vector rys = new Vector();
174 for(i = ys.size(); i > 0; i--) {
175 rys.addElement(ys.elementAt(i - 1));
177 Vector rl2 = algb(rxs2, rys);
178 Vector l2 = new Vector();
179 for(i = rl2.size(); i > 0; i--) {
180 l2.addElement(rl2.elementAt(i - 1));
183 // k = findk 0 0 (-1) (zip l1 l2)
184 int k = this.findk(0, 0, (-1), l1, l2);
187 // = algc m2 k xs1 (take k ys) . algc (m-m2) (n-k) xs2 (drop k ys)
188 Vector ysk = new Vector();
190 for(i = 0; i < k; i++) {
191 ysk.addElement(ys.elementAt(i));
193 Vector ysd = new Vector();
195 for(; i < ys.size(); i++) {
196 ysd.addElement(ys.elementAt(i));
198 Vector interresult = this.algc(m-m2, n-k, xs2, ysd, r);
199 result = this.algc(m2, k, xs1, ysk, interresult);
205 Vector xs = new Vector();
206 Vector ys = new Vector();
208 int x1 = this.testargs[0];
209 int x2 = this.testargs[1];
210 int xfinal = this.testargs[2];
212 int y1 = this.testargs[3];
213 int y2 = this.testargs[4];
214 int yfinal = this.testargs[5];
216 xs.addElement(new Integer(x1));
217 for(int i = x2; i <= xfinal; ) {
218 xs.addElement(new Integer(i));
221 ys.addElement(new Integer(y1));
222 for(int i = y2; i <= yfinal; ) {
223 ys.addElement(new Integer(i));
227 Vector r = new Vector();
229 Vector result = this.algc(xs.size(), ys.size(), xs, ys, r);
230 for(int i = 0; i < result.size(); i++) {
231 int tmp = ((Integer)result.elementAt(i)).intValue();
234 public static void main(String argv[]){
236 int[] args = new int[6];
243 for(int i = 0; i < threadnum; ++i) {
244 TestRunner tr = new TestRunner(args);