Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- typedef unsigned long long uint64;
- uint64 notAFile = 0xFEFEFEFEFEFEFEFE;
- uint64 notHFile = 0x7F7F7F7F7F7F7F7F;
- uint64 not1Rank = 0xFFFFFFFFFFFFFF00;
- uint64 not8Rank = 0x00FFFFFFFFFFFFFF;
- uint64 notABFile = 0xFCFCFCFCFCFCFCFC;
- uint64 notGHFile = 0x3F3F3F3F3F3F3F3F;
- uint64 not12Rank = 0xFFFFFFFFFFFF0000;
- uint64 not78Rank = 0x0000FFFFFFFFFFFF;
- uint64 kpat(int square) {
- uint64 squareMask = (1ULL << square), result = 0ULL;
- if (squareMask & notAFile)
- result |= (1ULL << (square - 1));
- if (squareMask & notHFile)
- result |= (1ULL << (square + 1));
- if (squareMask & not1Rank)
- result |= (1ULL << (square - 8));
- if (squareMask & not8Rank)
- result |= (1ULL << (square + 8));
- if (squareMask & notAFile & not1Rank)
- result |= (1ULL << (square - 9));
- if (squareMask & notHFile & not1Rank)
- result |= (1ULL << (square - 7));
- if (squareMask & notAFile & not8Rank)
- result |= (1ULL << (square + 7));
- if (squareMask & notHFile & not8Rank)
- result |= (1ULL << (square + 9));
- return result;
- }
- uint64 npat(int square) {
- uint64 squareMask = (1ULL << square), result = 0ULL;
- if (squareMask & notABFile & not1Rank)
- result |= (1ULL << (square - 10));
- if (squareMask & notAFile & not12Rank)
- result |= (1ULL << (square - 17));
- if (squareMask & notABFile & not8Rank)
- result |= (1ULL << (square + 6));
- if (squareMask & notAFile & not78Rank)
- result |= (1ULL << (square + 15));
- if (squareMask & notGHFile & not1Rank)
- result |= (1ULL << (square - 6));
- if (squareMask & notHFile & not12Rank)
- result |= (1ULL << (square - 15));
- if (squareMask & notGHFile & not8Rank)
- result |= (1ULL << (square + 10));
- if (squareMask & notHFile & not78Rank)
- result |= (1ULL << (square + 17));
- return result;
- }
- uint64 pmpat(int square, int white) {
- if ((square >> 3) == 0 || (square >> 3) == 7)
- return 0ULL;
- int starting = (square >> 3) == (white ? 1 : 6);
- if (starting) {
- return white ? ((1ULL << (square + 8)) | (1ULL << (square + 16)))
- : ((1ULL << (square - 8)) | (1ULL << (square - 16)));
- } else {
- return white ? (1ULL << (square + 8)) : (1ULL << (square - 8));
- }
- }
- uint64 pcpat(int square, int white) {
- if ((square >> 3) == 0 || (square >> 3) == 7)
- return 0ULL;
- uint64 squareMask = (1ULL << square), result = 0ULL;
- if (white) {
- if (squareMask & notAFile)
- result |= (1ULL << (square + 7));
- if (squareMask & notHFile)
- result |= (1ULL << (square + 9));
- } else {
- if (squareMask & notAFile)
- result |= (1ULL << (square - 9));
- if (squareMask & notHFile)
- result |= (1ULL << (square - 7));
- }
- }
- int main() {
- int square;
- FILE *knp = fopen("knp.scala", "w");
- fprintf(knp, "val KingPatterns: Array[BitBoard] = Array(\n");
- for (square = 0; square < 64; square++)
- fprintf(knp, " 0x%016llxL,\n", kpat(square));
- fprintf(knp, ")\n\n");
- fprintf(knp, "val KnightPatterns: Array[BitBoard] = Array(\n");
- for (square = 0; square < 64; square++)
- fprintf(knp, " 0x%016llxL,\n", npat(square));
- fprintf(knp, ")\n\n");
- fprintf(knp, "val WhitePawnMovePatterns: Array[BitBoard] = Array(\n");
- for (square = 0; square < 64; square++)
- fprintf(knp, " 0x%016llxL,\n", pmpat(square, 1));
- fprintf(knp, ")\n\n");
- fprintf(knp, "val BlackPawnMovePatterns: Array[BitBoard] = Array(\n");
- for (square = 0; square < 64; square++)
- fprintf(knp, " 0x%016llxL,\n", pmpat(square, 0));
- fprintf(knp, ")\n\n");
- fprintf(knp, "val WhitePawnCapturePatterns: Array[BitBoard] = Array(\n");
- for (square = 0; square < 64; square++)
- fprintf(knp, " 0x%016llxL,\n", pcpat(square, 1));
- fprintf(knp, ")\n\n");
- fprintf(knp, "val BlackPawnCapturePatterns: Array[BitBoard] = Array(\n");
- for (square = 0; square < 64; square++)
- fprintf(knp, " 0x%016llxL,\n", pcpat(square, 0));
- fprintf(knp, ")\n\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement