fork(2) download
  1. #define A(c)for(i=0;i<64;++i)for(m=j=0;j<64;++j)if(x=i/8-j/8,y=i%8-j%8,t=abs(x)-abs(y)?y?x?0:(y>0)+1:(x>0)+1<<2:16<<(x>0)+(y>0)*2,j-i&&b[i]*b[j]*t*!(m&t))c;
  2. i,j,m,t,y,x;f(*b,*r){*r=0;A((b[i]++,m|=t))A(*r|=b[i]^b[j])}
  3.  
  4. int
  5. main(void)
  6. {
  7. struct {
  8. int expected;
  9. int board[65];
  10. } tests[] = {
  11. 0, L"...................Q.....................Q.Q..Q..Q.............Q",
  12. 0, L".........Q.Q.Q..................................................",
  13. 1, L"................................................................",
  14. 1, L"....................................Q...........................",
  15. 1, L"...........Q.....................Q..............................",
  16. 1, L"..................QQ............................................",
  17. 1, L".................Q.Q.....................Q.Q....................",
  18. 1, L"Q......Q.........Q....Q.................................Q......Q",
  19. 1, L"Q......Q..Q..Q...Q..Q.Q...Q..........Q...Q.Q..Q...Q..Q..Q......Q",
  20. };
  21. for (int i=0; i<sizeof tests/sizeof*tests; ++i) {
  22. for (int j=0; j<64; ++j)
  23. tests[i].board[j] -= '.';
  24. int result;
  25. f(tests[i].board, &result);
  26. printf("result: %d, expected: %d\n", !result, tests[i].expected);
  27. }
  28. }
Success #stdin #stdout 0s 5432KB
stdin
Standard input is empty
stdout
result: 0, expected: 0
result: 0, expected: 0
result: 1, expected: 1
result: 1, expected: 1
result: 1, expected: 1
result: 1, expected: 1
result: 1, expected: 1
result: 1, expected: 1
result: 1, expected: 1