読者です 読者をやめる 読者になる 読者になる

ビット演算でエイトクイーン

Programming C

ビット演算で華麗に決めてやろうと思ったけど無理だった。

どうみても改善の余地あり。

long long o[]={0x101010101010101LL,0x202020202020202LL,0x404040404040404LL,0x808080808080808LL,0x1010101010101010LL,0x2020202020202020LL,0x4040404040404040LL,0x8080808080808080LL,
0x201000000000000LL,0x402010000000000LL,0x804020100000000LL,0x1008040201000000LL,0x2010080402010000LL,0x4020100804020100LL,0x8040201008040201LL,0x80402010080402LL,0x804020100804LL,0x8040201008LL,0x80402010LL,0x804020LL,0x8040LL,
0x4080000000000000LL,0x2040800000000000LL,0x1020408000000000LL,0x810204080000000LL,0x408102040800000LL,0x204081020408000LL,0x102040810204080LL,0x1020408102040,0x10204081020LL,0x102040810LL,0x1020408LL,0x10204LL,0x102LL
};
main(i,j,s,f){s=0;for(i=0;i<1<<24;++i){long long t=0,u=0;f=1;for(j=0;j<8;++j)t|=1LL<<(i>>j*3&7)+j*8;for(j=0;j<34;++j){u=t&o[j];f&=(u&-u)==u;}f&&s++;}printf("%d\n",s);return 0;}