Advertisement
Guest User

Untitled

a guest
Jul 19th, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.80 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. typedef unsigned long long uint64;
  4.  
  5. uint64 notAFile = 0xFEFEFEFEFEFEFEFE;
  6. uint64 notHFile = 0x7F7F7F7F7F7F7F7F;
  7. uint64 not1Rank = 0xFFFFFFFFFFFFFF00;
  8. uint64 not8Rank = 0x00FFFFFFFFFFFFFF;
  9.  
  10. uint64 notABFile = 0xFCFCFCFCFCFCFCFC;
  11. uint64 notGHFile = 0x3F3F3F3F3F3F3F3F;
  12. uint64 not12Rank = 0xFFFFFFFFFFFF0000;
  13. uint64 not78Rank = 0x0000FFFFFFFFFFFF;
  14.  
  15. uint64 kpat(int square) {
  16. uint64 squareMask = (1ULL << square), result = 0ULL;
  17. if (squareMask & notAFile)
  18. result |= (1ULL << (square - 1));
  19. if (squareMask & notHFile)
  20. result |= (1ULL << (square + 1));
  21. if (squareMask & not1Rank)
  22. result |= (1ULL << (square - 8));
  23. if (squareMask & not8Rank)
  24. result |= (1ULL << (square + 8));
  25.  
  26. if (squareMask & notAFile & not1Rank)
  27. result |= (1ULL << (square - 9));
  28. if (squareMask & notHFile & not1Rank)
  29. result |= (1ULL << (square - 7));
  30. if (squareMask & notAFile & not8Rank)
  31. result |= (1ULL << (square + 7));
  32. if (squareMask & notHFile & not8Rank)
  33. result |= (1ULL << (square + 9));
  34.  
  35. return result;
  36. }
  37.  
  38. uint64 npat(int square) {
  39. uint64 squareMask = (1ULL << square), result = 0ULL;
  40.  
  41. if (squareMask & notABFile & not1Rank)
  42. result |= (1ULL << (square - 10));
  43. if (squareMask & notAFile & not12Rank)
  44. result |= (1ULL << (square - 17));
  45. if (squareMask & notABFile & not8Rank)
  46. result |= (1ULL << (square + 6));
  47. if (squareMask & notAFile & not78Rank)
  48. result |= (1ULL << (square + 15));
  49.  
  50. if (squareMask & notGHFile & not1Rank)
  51. result |= (1ULL << (square - 6));
  52. if (squareMask & notHFile & not12Rank)
  53. result |= (1ULL << (square - 15));
  54. if (squareMask & notGHFile & not8Rank)
  55. result |= (1ULL << (square + 10));
  56. if (squareMask & notHFile & not78Rank)
  57. result |= (1ULL << (square + 17));
  58.  
  59. return result;
  60. }
  61.  
  62. uint64 pmpat(int square, int white) {
  63. if ((square >> 3) == 0 || (square >> 3) == 7)
  64. return 0ULL;
  65. int starting = (square >> 3) == (white ? 1 : 6);
  66. if (starting) {
  67. return white ? ((1ULL << (square + 8)) | (1ULL << (square + 16)))
  68. : ((1ULL << (square - 8)) | (1ULL << (square - 16)));
  69. } else {
  70. return white ? (1ULL << (square + 8)) : (1ULL << (square - 8));
  71. }
  72. }
  73.  
  74. uint64 pcpat(int square, int white) {
  75. if ((square >> 3) == 0 || (square >> 3) == 7)
  76. return 0ULL;
  77. uint64 squareMask = (1ULL << square), result = 0ULL;
  78. if (white) {
  79. if (squareMask & notAFile)
  80. result |= (1ULL << (square + 7));
  81. if (squareMask & notHFile)
  82. result |= (1ULL << (square + 9));
  83. } else {
  84. if (squareMask & notAFile)
  85. result |= (1ULL << (square - 9));
  86. if (squareMask & notHFile)
  87. result |= (1ULL << (square - 7));
  88. }
  89. }
  90.  
  91. int main() {
  92. int square;
  93.  
  94. FILE *knp = fopen("knp.scala", "w");
  95.  
  96. fprintf(knp, "val KingPatterns: Array[BitBoard] = Array(\n");
  97. for (square = 0; square < 64; square++)
  98. fprintf(knp, " 0x%016llxL,\n", kpat(square));
  99. fprintf(knp, ")\n\n");
  100.  
  101. fprintf(knp, "val KnightPatterns: Array[BitBoard] = Array(\n");
  102. for (square = 0; square < 64; square++)
  103. fprintf(knp, " 0x%016llxL,\n", npat(square));
  104. fprintf(knp, ")\n\n");
  105.  
  106. fprintf(knp, "val WhitePawnMovePatterns: Array[BitBoard] = Array(\n");
  107. for (square = 0; square < 64; square++)
  108. fprintf(knp, " 0x%016llxL,\n", pmpat(square, 1));
  109. fprintf(knp, ")\n\n");
  110.  
  111. fprintf(knp, "val BlackPawnMovePatterns: Array[BitBoard] = Array(\n");
  112. for (square = 0; square < 64; square++)
  113. fprintf(knp, " 0x%016llxL,\n", pmpat(square, 0));
  114. fprintf(knp, ")\n\n");
  115.  
  116. fprintf(knp, "val WhitePawnCapturePatterns: Array[BitBoard] = Array(\n");
  117. for (square = 0; square < 64; square++)
  118. fprintf(knp, " 0x%016llxL,\n", pcpat(square, 1));
  119. fprintf(knp, ")\n\n");
  120.  
  121. fprintf(knp, "val BlackPawnCapturePatterns: Array[BitBoard] = Array(\n");
  122. for (square = 0; square < 64; square++)
  123. fprintf(knp, " 0x%016llxL,\n", pcpat(square, 0));
  124. fprintf(knp, ")\n\n");
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement