I am trying to find a way to check whether two cells lying within same row or column or box or band or stack or not within 9x9 grid (as Pascal language has functions to manipulate union and intersection between arrays; and I am unaware of the same functions equivalent in either C or C++ languages).
I propose to add another 32 bit integer value in each cell's 20 peers array that will represent cell's band, stack, row, column and box respectively as follows:
Hidden Text: Show
- Code: Select all
Cell Row Col Box Bnd Stk PBd PSk PRow PCol PBox Binary Peer
00 1 1 1 0 0 00 00 000000001 000000001 000000001 0000000000001000000001000000001 262657
01 1 2 1 0 0 00 00 000000001 000000010 000000001 0000000000001000000010000000001 263169
02 1 3 1 0 0 00 00 000000001 000000100 000000001 0000000000001000000100000000001 264193
03 1 4 2 0 1 00 01 000000001 000001000 000000010 0001000000001000001000000000010 134483970
04 1 5 2 0 1 00 01 000000001 000010000 000000010 0001000000001000010000000000010 134488066
05 1 6 2 0 1 00 01 000000001 000100000 000000010 0001000000001000100000000000010 134496258
06 1 7 3 0 2 00 10 000000001 001000000 000000100 0010000000001001000000000000100 268730372
07 1 8 3 0 2 00 10 000000001 010000000 000000100 0010000000001010000000000000100 268763140
08 1 9 3 0 2 00 10 000000001 100000000 000000100 0010000000001100000000000000100 268828676
09 2 1 1 0 0 00 00 000000010 000000001 000000001 0000000000010000000001000000001 524801
10 2 2 1 0 0 00 00 000000010 000000010 000000001 0000000000010000000010000000001 525313
11 2 3 1 0 0 00 00 000000010 000000100 000000001 0000000000010000000100000000001 526337
12 2 4 2 0 1 00 01 000000010 000001000 000000010 0001000000010000001000000000010 134746114
13 2 5 2 0 1 00 01 000000010 000010000 000000010 0001000000010000010000000000010 134750210
14 2 6 2 0 1 00 01 000000010 000100000 000000010 0001000000010000100000000000010 134758402
15 2 7 3 0 2 00 10 000000010 001000000 000000100 0010000000010001000000000000100 268992516
16 2 8 3 0 2 00 10 000000010 010000000 000000100 0010000000010010000000000000100 269025284
17 2 9 3 0 2 00 10 000000010 100000000 000000100 0010000000010100000000000000100 269090820
18 3 1 1 0 0 00 00 000000100 000000001 000000001 0000000000100000000001000000001 1049089
19 3 2 1 0 0 00 00 000000100 000000010 000000001 0000000000100000000010000000001 1049601
20 3 3 1 0 0 00 00 000000100 000000100 000000001 0000000000100000000100000000001 1050625
21 3 4 2 0 1 00 01 000000100 000001000 000000010 0001000000100000001000000000010 135270402
22 3 5 2 0 1 00 01 000000100 000010000 000000010 0001000000100000010000000000010 135274498
23 3 6 2 0 1 00 01 000000100 000100000 000000010 0001000000100000100000000000010 135282690
24 3 7 3 0 2 00 10 000000100 001000000 000000100 0010000000100001000000000000100 269516804
25 3 8 3 0 2 00 10 000000100 010000000 000000100 0010000000100010000000000000100 269549572
26 3 9 3 0 2 00 10 000000100 100000000 000000100 0010000000100100000000000000100 269615108
27 4 1 4 1 0 01 00 000001000 000000001 000001000 0100000001000000000001000001000 538968584
28 4 2 4 1 0 01 00 000001000 000000010 000001000 0100000001000000000010000001000 538969096
29 4 3 4 1 0 01 00 000001000 000000100 000001000 0100000001000000000100000001000 538970120
30 4 4 5 1 1 01 01 000001000 000001000 000010000 0101000001000000001000000010000 673189904
31 4 5 5 1 1 01 01 000001000 000010000 000010000 0101000001000000010000000010000 673194000
32 4 6 5 1 1 01 01 000001000 000100000 000010000 0101000001000000100000000010000 673202192
33 4 7 6 1 2 01 10 000001000 001000000 000100000 0110000001000001000000000100000 807436320
34 4 8 6 1 2 01 10 000001000 010000000 000100000 0110000001000010000000000100000 807469088
35 4 9 6 1 2 01 10 000001000 100000000 000100000 0110000001000100000000000100000 807534624
36 5 1 4 1 0 01 00 000010000 000000001 000001000 0100000010000000000001000001000 541065736
37 5 2 4 1 0 01 00 000010000 000000010 000001000 0100000010000000000010000001000 541066248
38 5 3 4 1 0 01 00 000010000 000000100 000001000 0100000010000000000100000001000 541067272
39 5 4 5 1 1 01 01 000010000 000001000 000010000 0101000010000000001000000010000 675287056
40 5 5 5 1 1 01 01 000010000 000010000 000010000 0101000010000000010000000010000 675291152
41 5 6 5 1 1 01 01 000010000 000100000 000010000 0101000010000000100000000010000 675299344
42 5 7 6 1 2 01 10 000010000 001000000 000100000 0110000010000001000000000100000 809533472
43 5 8 6 1 2 01 10 000010000 010000000 000100000 0110000010000010000000000100000 809566240
44 5 9 6 1 2 01 10 000010000 100000000 000100000 0110000010000100000000000100000 809631776
45 6 1 4 1 0 01 00 000100000 000000001 000001000 0100000100000000000001000001000 545260040
46 6 2 4 1 0 01 00 000100000 000000010 000001000 0100000100000000000010000001000 545260552
47 6 3 4 1 0 01 00 000100000 000000100 000001000 0100000100000000000100000001000 545261576
48 6 4 5 1 1 01 01 000100000 000001000 000010000 0101000100000000001000000010000 679481360
49 6 5 5 1 1 01 01 000100000 000010000 000010000 0101000100000000010000000010000 679485456
50 6 6 5 1 1 01 01 000100000 000100000 000010000 0101000100000000100000000010000 679493648
51 6 7 6 1 2 01 10 000100000 001000000 000100000 0110000100000001000000000100000 813727776
52 6 8 6 1 2 01 10 000100000 010000000 000100000 0110000100000010000000000100000 813760544
53 6 9 6 1 2 01 10 000100000 100000000 000100000 0110000100000100000000000100000 813826080
54 7 1 7 2 0 10 00 001000000 000000001 001000000 1000001000000000000001001000000 1090519616
55 7 2 7 2 0 10 00 001000000 000000010 001000000 1000001000000000000010001000000 1090520128
56 7 3 7 2 0 10 00 001000000 000000100 001000000 1000001000000000000100001000000 1090521152
57 7 4 8 2 1 10 01 001000000 000001000 010000000 1001001000000000001000010000000 1224740992
58 7 5 8 2 1 10 01 001000000 000010000 010000000 1001001000000000010000010000000 1224745088
59 7 6 8 2 1 10 01 001000000 000100000 010000000 1001001000000000100000010000000 1224753280
60 7 7 9 2 2 10 10 001000000 001000000 100000000 1010001000000001000000100000000 1358987520
61 7 8 9 2 2 10 10 001000000 010000000 100000000 1010001000000010000000100000000 1359020288
62 7 9 9 2 2 10 10 001000000 100000000 100000000 1010001000000100000000100000000 1359085824
63 8 1 7 2 0 10 00 010000000 000000001 001000000 1000010000000000000001001000000 1107296832
64 8 2 7 2 0 10 00 010000000 000000010 001000000 1000010000000000000010001000000 1107297344
65 8 3 7 2 0 10 00 010000000 000000100 001000000 1000010000000000000100001000000 1107298368
66 8 4 8 2 1 10 01 010000000 000001000 010000000 1001010000000000001000010000000 1241518208
67 8 5 8 2 1 10 01 010000000 000010000 010000000 1001010000000000010000010000000 1241522304
68 8 6 8 2 1 10 01 010000000 000100000 010000000 1001010000000000100000010000000 1241530496
69 8 7 9 2 2 10 10 010000000 001000000 100000000 1010010000000001000000100000000 1375764736
70 8 8 9 2 2 10 10 010000000 010000000 100000000 1010010000000010000000100000000 1375797504
71 8 9 9 2 2 10 10 010000000 100000000 100000000 1010010000000100000000100000000 1375863040
72 9 1 7 2 0 10 00 100000000 000000001 001000000 1000100000000000000001001000000 1140851264
73 9 2 7 2 0 10 00 100000000 000000010 001000000 1000100000000000000010001000000 1140851776
74 9 3 7 2 0 10 00 100000000 000000100 001000000 1000100000000000000100001000000 1140852800
75 9 4 8 2 1 10 01 100000000 000001000 010000000 1001100000000000001000010000000 1275072640
76 9 5 8 2 1 10 01 100000000 000010000 010000000 1001100000000000010000010000000 1275076736
77 9 6 8 2 1 10 01 100000000 000100000 010000000 1001100000000000100000010000000 1275084928
78 9 7 9 2 2 10 10 100000000 001000000 100000000 1010100000000001000000100000000 1409319168
79 9 8 9 2 2 10 10 100000000 010000000 100000000 1010100000000010000000100000000 1409351936
80 9 9 9 2 2 10 10 100000000 100000000 100000000 1010100000000100000000100000000 1409417472
How to check two cells lying either same band, stack, row, column and/or box, bit wise checking as follows:
Hidden Text: Show
- Code: Select all
IF cell1[peer] & constant = cell2[peer] & constant THEN
same
ELSE
different
Where constant is as follows:
Band Stack Row Col Box
1610612736 402653184 133955584 261632 511
IF cell1[peer] & (133955584 | 511) = cell2[peer] & (133955584 | 511) THEN
same row and box, i.e., mini-row
ELSE IF cell1[peer] & 133955584 = cell2[peer] & 133955584 THEN
same row but not box
ELSE IF cell1[peer] & 511 = cell2[peer] & 511 THEN
same box but not row
ELSE
neither same row nor box
R. Jamil