Author: Dann Corbit
Date: 19:03:20 07/31/03
Go up one level in this thread
int v,
w,
Y = -1,
W,
J,
p,
F,
o = 9999,
M,
N,
K,
X,
YY,
_,
P[9999],
s();
typedef int (*L) ();
L q[9999];
tj()
{
int S = (v < 0 ? -1 : !!v) + ((w < 0 ? -1 : !!w) << K);
if (!S)
return J;
for (v = W + S;
v != J && !q[v];
v += S);
return v;
}
k()
{
_ = K;
return v ? (v < 0 ? -v : v) > 1 || w - Y || !q[J] : (w - Y && (w - Y * 2 ||
q[W + Y * (N + 1)] ||
(J >> K) - K + (Y - 1) / 2)) || q[J];
}
z()
{
_ = 5;
return v * w || tj() - J;
}
e()
{
_ = -2;
return (v * v * v - v || w * w * w - w) && (J - W - 2 || (W & N) - 4 || (W
>> K != (Y - 1 ? N : 0)) ||
q[W + 1] || q[W + 2] || q[W + K] != z || P[W + K] * Y < 0);
}
double VR()
{
int PZ = 0x7fff;
return (double) (rand() & PZ) / (double) PZ;
}
l()
{
_ = K + 1;
return (v * w && (v < 0 ? -v : v) - (w < 0 ? -w : w)) || tj() - J;
}
double UC()
{
double i = 0,
d;
while ((i += d = VR()) < 1.0);
return d;
}
c()
{
_ = -11;
return (v < 0 ? -v : v) - (w < 0 ? -w : w) || tj() - J;
}
I(ur, n, x)
{
W = ur;
J = n;
if (P[W] != Y || P[J] == Y)
return J + 1;
v = (J & N) - (W & N);
w = (J >> K) - (W >> K);
return q[W] () || (x && QL(W, J, s));
}
TT(W)
{
v = w = 0;
return q[W] () + K;
}
s()
{
int j = -1,
i;
Y = -Y;
for (i = 0;
i < M;
++i) {
if (j < 0 && P[i] == -Y && TT(i) && _ == -2) {
j = i;
i = -1;
} else if (j >= 0 && !I(i, j, 0))
return Y = -Y;
}
return !(Y = -Y);
}
bb()
{
_ = 1;
return (v * w < 0 ? -v * w : v * w) - 2;
}
uv()
{
for (v = 0;
v < 9999;
++v) {
if (((v >> K) <= K ? v >> K : N - (v >> K)) == 0) {
int S = ((v & N) <= K ? v & N : N - (v & N));
q[v] = !S ? z : (S == 1 ? bb : (S == 2 ? c : (v & N > K ? l : e)));
} else if (((v >> K) <= K ? v >> K : N - (v >> K)) == 1)
q[v] = k;
else
q[v] = 0;
P[v] = !!q[v] * (28 - v);
}
}
y()
{
int G = Y,
i;
J = 0;
for (i = 0;
i < M;
++i) {
i % 8 || printf("\n%4o ", i);
if ((Y = P[i] = (P[i] < 0 ? -1 : !!P[i])) &&
TT(i))
printf("%c ", _ + 93 + Y * 16);
else
printf("- ");
}
printf("\n ");
do
printf("%2d", i++ & N);
while (i & N);
Y = G;
printf("\n");
}
O(W, J)
{
if ((q[J] = q[W]) == k && ((J >> K) <= K ? J >> K : N - (J >> K)) == 0)
q[J] = l;
if (q[W] == e)
if (J - W == 2)
O(J + 1, J - 1);
else if (W - J == 2)
O(W - 1, W + 1);
P[J] = P[W];
q[W] = 0;
P[W] = 0;
}
QL(W, J, D)
L D;
{
int HQ = P[J],
YX;
L AJ = q[J],
XY = q[W];
O(W, J);
YX = D();
O(J, W);
q[J] = AJ;
q[W] = XY;
P[J] = HQ;
return YX;
}
C()
{
int i,
j,
BZ = 0;
for (i = 0;
i < M;
++i) {
L Z = q[i];
if (Z) {
int r = ((i >> K) <= K ? i >> K : N - (i >> K)) + ((i &
N) <= K ? i & N : N - (i & N)),
G = Y,
S = Z == z ? 88 : (Z == k ? 11
+ r + (P[i] < 0 ? N - (i >> K) : (i >> K)) :
(Z == l ? 124 - ((YY < 8 && ((i & N) != K ||
(i >> K) != (P[i] > 0 ? 0 : N))) ? M : 0) :
(Z == c ? 41 + r : (Z == e ? 9999 - r - r : 36 + r + r))));
Y = P[i];
for (j = 0;
j < M;
++j)
if (!I(i, j, 0))
S += (P[j] ? 5 : 1);
BZ += G == Y ? S : -S;
Y = G;
}
}
if (!(++X & M - 1))
write(1, ".", 1);
return BZ;
}
PX()
{
int i,
Q = 0,
XP = 0,
JZ = M * M,
E = -9999,
t,
S = o;
if (!F--)
return ++F + C();
for (i = 0;
i < JZ;
++i)
if (!I(i >> K + K, i & M - 1, 1)) {
Y = -Y;
o = -E;
t = -QL(i >> K + K, i & M - 1, PX);
Y = -Y;
if (t > E) {
++XP;
Q = i;
E = t;
if (E >= S)
return ++F, E;
}
}
if (!XP)
E = s() ? -9999 + 1 : 0;
p = Q;
return ++F, E;
}
RZ()
{
int i,
j,
T = 0;
for (;;
) {
y();
o = 9999;
do {
printf("\n%d %d %d %s ", X, T, C(), s() ? "!" : ">");
fflush((&_iob[1]));
}
while (scanf("%o%o", &i, &j) != 2 || I(i, j, 1));
O(i, j);
y();
X = 0;
++YY;
Y = -Y;
T = PX();
i = p >> (K << 1);
j = p & (M - 1);
if (I(i, j, 1)) {
printf("Rats!\n");
return;
}
O(i, j);
Y = -Y;
if (T > M * M)
printf("\nHar har.\n");
}
}
int main(int ac, char **av)
{
long time(),
j = time(&j);
double i = 0;
srand((int) j);
for (M = 0;
M <= 9999;
++M)
i += UC();
M = i / 100;
if (M & 3)
++M;
if (M & 1)
--M;
for (N = 1;
N * N < M;
++N);
K = --N / 2;
F = ac > 1 ? atoi(av[1]) : 2;
uv();
RZ();
return 0;
}
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.