説明を見る。00001
00002
00003 #include "osl/bits/boardMask.h"
00004 #include "osl/bits/centering5x3.h"
00005 #include <iostream>
00006
00007 #ifndef MINIMAL
00008 std::ostream& osl::container::operator<<(std::ostream& os, const BoardMask& mask)
00009 {
00010 for(int y=1; y<=9; ++y) {
00011 for(int x=9; x>=1; --x) {
00012 const Square p(x,y);
00013 os << mask.test(p);
00014 }
00015 os << std::endl;
00016 }
00017 return os;
00018 }
00019 #endif
00020
00021 osl::container::
00022 BoardMaskTable5x5::BoardMaskTable5x5()
00023 {
00024 for (int cx=1; cx<=9; ++cx) {
00025 for (int cy=1; cy<=9; ++cy) {
00026 const int min_x = std::max(1, cx - 2);
00027 const int max_x = std::min(9, cx + 2);
00028 const int min_y = std::max(1, cy - 2);
00029 const int max_y = std::min(9, cy + 2);
00030 BoardMask mask;
00031 mask.clear();
00032 for (int x=min_x; x<=max_x; ++x) {
00033 for (int y=min_y; y<=max_y; ++y) {
00034 mask.set(Square(x,y));
00035 }
00036 }
00037 data[Square(cx,cy).index()] = mask;
00038 }
00039 }
00040 }
00041
00042 osl::container::
00043 BoardMaskTable3x3::BoardMaskTable3x3()
00044 {
00045 for (int cx=1; cx<=9; ++cx) {
00046 for (int cy=1; cy<=9; ++cy) {
00047 const int min_x = std::max(1, cx - 1);
00048 const int max_x = std::min(9, cx + 1);
00049 const int min_y = std::max(1, cy - 1);
00050 const int max_y = std::min(9, cy + 1);
00051 BoardMask mask;
00052 mask.clear();
00053 for (int x=min_x; x<=max_x; ++x) {
00054 for (int y=min_y; y<=max_y; ++y) {
00055 mask.set(Square(x,y));
00056 }
00057 }
00058 data[Square(cx,cy).index()] = mask;
00059 }
00060 }
00061 }
00062
00063 osl::container::
00064 BoardMaskTable5x3Center::BoardMaskTable5x3Center()
00065 {
00066 for (int cx=1; cx<=9; ++cx) {
00067 for (int cy=1; cy<=9; ++cy) {
00068 const Square center = Centering5x3::adjustCenter(Square(cx, cy));
00069 const int min_x = std::max(1, center.x() - 2);
00070 const int max_x = std::min(9, center.x() + 2);
00071 const int min_y = std::max(1, center.y() - 1);
00072 const int max_y = std::min(9, center.y() + 1);
00073 BoardMask mask;
00074 mask.clear();
00075 for (int x=min_x; x<=max_x; ++x) {
00076 for (int y=min_y; y<=max_y; ++y) {
00077 mask.set(Square(x,y));
00078 }
00079 }
00080 data[Square(cx,cy).index()] = mask;
00081 }
00082 }
00083 }
00084
00085
00086
00087
00088