Author: Dann Corbit
Date: 18:17:33 06/25/99
Go up one level in this thread
#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.