Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
/**************************************************************************\
| Toledo Nanochess (c) Copyright 2009 Oscar Toledo G. All rights reserved |
| 1257 non-blank characters. Evolution from my winning IOCCC 2005 entry. |
| o Use D2D4 algebraic style for movements. biyubi@gmail.com Nov/20/2009 |
| o On promotion add a number for final piece (3=N, 4=B, 5=R, 6=Q) |
| o Press Enter alone for computer to play. |
| o Full legal chess moves. http://www.nanochess.org |
| o Remove these comments to get 1326 bytes source code (*NIX end-of-line) |
\**************************************************************************/
/**************************************************************************\
| Partial deobfuscation done by Maxthon T. Chan <xcvista@me.com> |
| Deobfuscated using LLVM's clang and clang-format. |
| Command line (Removes the copyright notice): |
| wget http://www.nanochess.org/toledo_nanochess.c -O - | clang -E -x c \ |
| - -o - | sed /#/d | clang-format - > toledo-nanochess-defused.c |
\**************************************************************************/
char *l = "ustvrtsuqqqqqqqqyyyyyyyy}{|~z|{}"
" 76Lsabcddcba .pknbrq PKNBRQ ?A6J57IKJT576,+-48HLSU";
B, i, y, u, b, I[411], *G = I, x = 10, z = 15, M = 1e4;
X(w, c, h, e, S, s) {
int t, o, L, E, d, O = e, N = -M * M, K = 78 - h << x, p, *g, n, *m, A, q, r,
C, J, a = y ? -x : x;
y ^= 8;
G++;
d = w || s && s >= h && X(0, 0, 0, 21, 0, 0) > M;
do {
;
if (o = I[p = O]) {
q = o & z ^ y;
if (q < 7) {
A = q-- & 2 ? 8 : 4;
C = o - 9 & z ? q["& .$ "] : 42;
do {
r = I[p += C[l] - 64];
if (!w | p == w) {
g = q | p + a - S ? 0 : I + S;
if (!r & (q | A < 3 || g) || (r + 1 & z ^ y) > 9 && q | A > 2) {
;
if (m = !(r - 2 & 7))
return --G, y ^= 8, G[1] = O, K;
J = n = o & z;
E = I[p - a] & z;
t = q | E - 7 ? n : (n += 2, 6 ^ y);
while (n <= t) {
L = r ? l[r & 7] * 9 - 189 - h - q : 0;
if (s)
L += (1 - q ? l[p / x + 5] - l[O / x + 5] +
l[p % x + 6] * -~!q - l[O % x + 6] +
o / 16 * 8
: !!m * 9) +
(q ? 0 : !(I[p - 1] ^ n) + !(I[p + 1] ^ n) +
l[n & 7] * 9 - 386 + !!g * 99 + (A < 2)) +
!(E ^ y ^ 9);
if (s > h || 1 < s & s == h && L > z | d) {
p[I] = n, O[I] = m ? *g = *m, *m = 0 : g ? *g = 0 : 0;
L -= X(s > h | d ? 0 : p, L - N, h + 1, G[1],
J = q | A > 1 ? 0 : p, s);
if (!(h || s - 1 | B - O | i - n | p - b | L < -M))
return --G, y ^= 8, y ^= 8, u = J;
J = q - 1 | A < 7 || m || !s | d | r | o < z ||
X(0, 0, 0, 21, 0, 0) > M;
O[I] = o;
p[I] = r;
m ? *m = *g, *g = 0 : g ? *g = 9 ^ y : 0;
}
;
if (L > N) {
*G = O;
if (s > 1) {
;
if (h && c - L < 0)
return --G, y ^= 8, L;
if (!h)
i = n, B = O, b = p;
}
N = L;
}
n += J || (g = I + p, m = p < O ? g - 3 : g + 2,
*m < z | m[O - p] || I[p += p - O]);
}
}
}
} while (!r &q > 2 || (p = O, q | A > 2 | o > z & !r && ++C * --A));
}
}
} while (++O > 98 ? O = 20 : e - O);
return --G, y ^= 8, N + M * M && N > -K + 1924 | d ? N : 0;
}
main() {
while (++B < 121)
*G++ = B / x % x < 2 | B % x < 2 ? 7 : B / x & 4 ? 0 : *l++ & 31;
while (B = 19) {
while (B++ < 99)
putchar(B % x ? l[B[I] | 16] : x);
if (x - (B = getchar() & z)) {
i = I[B += (x - getchar() & z) * x] & z;
b = getchar() & z;
b += (x - getchar() & z) * x;
while (x - (*G = getchar() & z))
i = *G ^ 8 ^ y;
} else
X(0, 0, 0, 21, u, 5);
X(0, 0, 0, 21, u, 1);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.