public static double crank(List<Double> w)
	{
		double s;
		
		int j=1,ji,jt;
		double t,rank;

		int n=w.size();
		s=0.0f;
		while (j < n) 
		{
			if ( ! w.get(j).equals(w.get(j-1)))
			{
				w.set(j-1,j + 0.0);
				++j;
			} 
			else 
			{
				for (jt=j+1;jt<=n && w.get(jt-1).equals(w.get(j-1));jt++);
				rank=0.5f*(j+jt-1);
				for (ji=j;ji<=(jt-1);ji++)
					w.set(ji-1,rank);
				t=jt-j;
				s += (t*t*t-t);
				j=jt;
			}
		}
		if (j == n) w.set(n-1,n + 0.0);
		
		return s;
	}