Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Warning! Long demystified chess program (explosion of Eugene's posting)

Author: Bas Hamstra

Date: 11:38:27 06/26/99

Go up one level in this thread


Good work :)

Unfortunately now it's become a gigantic thing. 270 lines!


On June 25, 1999 at 21:17:33, Dann Corbit wrote:

>#include <stdio.h>
>#include <stdlib.h>
>static int v, w, Y = -1, W, J, p, F, o = 9999, M, N, K, X, YY, ZZ, P[9999], s
>();
>
>typedef int (*L) (); /* define type for function returning int */
>static L q[9999]; /* array of integer functions */
>
>int QL (int W, int J, L D);
>
>int tj (void)
>{
>  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;
>}
>int k (void)
>{
>  ZZ = 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];
>}
>int z (void)
>{
>  ZZ = 5;
>  return v * w || tj () - J;
>}
>int e (void)
>{
>  ZZ = -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 (void)
>{
>  int PZ = 0x7fff;
>  return (double) (rand () & PZ) / (double) PZ;
>}
>int l (void)
>{
>  ZZ = K + 1;
>  return (v * w && (v < 0 ? -v : v) - (w < 0 ? -w : w)) || tj () - J;
>}
>double
>UC (void)
>{
>  double i = 0, d;
>  while ((i += d = VR ()) < 1.0);
>  return d;
>}
>int c (void)
>{
>  ZZ = -11;
>  return (v < 0 ? -v : v) - (w < 0 ? -w : w) || tj () - J;
>}
>int I (int ur, int n, int 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));
>}
>int TT (int W)
>{
>  v = w = 0;
>  return q[W] () + K;
>}
>int s (void)
>{
>  int j = -1, i;
>  Y = -Y;
>  for (i = 0; i < M; ++i)
>    {
>      if (j < 0 && P[i] == -Y && TT (i) && ZZ == -2)
>        {
>          j = i;
>          i = -1;
>        }
>      else if (j >= 0 && !I (i, j, 0))
>        return Y = -Y;
>    }
>  return !(Y = -Y);
>}
>int bb (void)
>{
>  ZZ = 1;
>  return (v * w < 0 ? -v * w : v * w) - 2;
>}
>int uv (void)
>{
>  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);
>    }
>  return 0;
>}
>int y (void)
>{
>  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 ", ZZ + 93 + Y * 16);
>      else
>        printf ("- ");
>    }
>  printf ("\n    ");
>  do
>    printf ("%2d", i++ & N);
>  while (i & N);
>  Y = G;
>  printf ("\n");
>  return 0;
>}
>int O (int W, int 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;
>  return 0;
>}
>int QL (int W, int J, 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;
>}
>int C (void)
>{
>  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;
>}
>int PX (void)
>{
>  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;
>}
>int RZ (void)
>{
>  int i, j, T = 0;
>  for (;;)
>    {
>      y ();
>      o = 9999;
>      do
>        {
>          printf ("\n%d %d %d %s ", X, T, C (), s ()? "!" : ">");
>          fflush(stdout);
>        }
>      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))
>        {
>          puts("Rats!");
>          return 0;
>        }
>      O (i, j);
>      Y = -Y;
>      if (T > M * M)
>        puts("\nHar har.");
>    }
>  return 0;
>}
>#include <time.h>
>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.