Advertisement
Guest User

Untitled

a guest
Jul 20th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.52 KB | None | 0 0
  1. public final class QueenTemplate {
  2.  
  3. private QueenTemplate() {
  4. }
  5.  
  6. public static void main(String[] args) throws Exception{
  7. int n = 14;
  8.  
  9. PrintStream out = new PrintStream(new FileOutputStream(new File("QueenUnrolled.java")));
  10. out.print(
  11. "public class QueenUnrolled {\n" +
  12. " public static void main(String[] args) {\n" +
  13. " qq();\n" +
  14. " qq();\n" +
  15. " qq();\n" +
  16. " qq();\n" +
  17. " qq();\n" +
  18. " }\n" +
  19. '\n' +
  20. " private static void qq() {\n" +
  21. " long start = System.currentTimeMillis();\n" +
  22. " long res = calcQueens();\n" +
  23. " System.out.println(\"res = \" + res+\", \"+(System.currentTimeMillis()-start));\n" +
  24. " }\n" +
  25. '\n' +
  26. " private static long calcQueens() {\n" +
  27. " return queens_0(new int["+n+"]);\n" +
  28. " }\n");
  29. printSource(n, out);
  30. out.print("}\n");
  31. out.close();
  32. }
  33.  
  34. private static void printSource(int n, PrintStream out) {
  35. for(int m = 0; m < n; m++) {
  36. for(int k = 0; k < n; k++) {
  37. out.print(getGood(n, m,k));
  38. }
  39. }
  40.  
  41. for(int m = 0; m < n; m++) {
  42. String val = getQueen(n, m);
  43. out.print(val);
  44. }
  45. }
  46.  
  47. private static String getQueen(int n, int m) {
  48. StringBuilder sb = new StringBuilder();
  49. sb.append(" private static long queens_").append(m).append("(int[] qs) {\n");
  50. sb.append(" long result = 0;\n");
  51. for(int k = 0; k < n; k++) {
  52. sb.append(" if(good_").append(m).append('_').append(k).append("(qs)) {\n");
  53. if(m == n-1) {
  54. sb.append(" result += 1;\n");
  55. } else {
  56. sb.append(" qs[").append(m).append("] = ").append(1 << k).append(";\n");
  57. sb.append(" result += queens_").append(m + 1).append("(qs);\n");
  58. }
  59. sb.append(" }\n");
  60. }
  61. sb.append(" return result;\n");
  62. sb.append(" }\n\n");
  63. return sb.toString();
  64. }
  65.  
  66. private static String getGood(int n, int m, int k) {
  67. StringBuilder sb = new StringBuilder();
  68. sb.append(" public static boolean good_").append(m).append('_').append(k).append("(int[] qs) {\n");
  69. if(m == 0) {
  70. sb.append(" return true;\n");
  71. } else {
  72. sb.append(" return ");
  73. boolean first = true;
  74. for(int i = 0; i < m; i++) {
  75. int mask = 0;
  76. if(k - i + m >= 0 && k - i + m < n){
  77. mask+= 1<<(k - i + m);
  78. }
  79. if(k + i - m >= 0 && k + i - m < n){
  80. mask+= 1<<(k + i - m);
  81. }
  82. if(k >= 0 && k < n){
  83. mask+= 1<<k;
  84. }
  85. if(mask!=0) {
  86. if(!first) sb.append(" && ");
  87. first = false;
  88. sb.append("(qs[").append(i).append("] & ").append(mask).append(") == 0 ");
  89. }
  90. }
  91. sb.append(";\n");
  92. }
  93. sb.append(" }\n\n");
  94. return sb.toString();
  95. }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement