Last active
December 23, 2015 04:49
-
-
Save xcvista/6582944 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/**************************************************************************\ | |
| 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