Computer Chess Club Archives


Search

Terms

Messages

Subject: As far as I'm concerned, using SED is definitely cheating.

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.