Force iteration to start at 1 in analyze mode
[bonanza.git] / phash.c
1 #include "shogi.h"\r
2 \r
3 static unsigned short tab[] = {\r
4 5866,14081,15663,4534,14969,3034,8274,7570,\r
5 14571,15428,2921,37,2534,4727,660,249,\r
6 8308,3662,15794,10079,13857,13019,6070,9141,\r
7 3942,14629,6891,11561,12156,4793,11132,12989,\r
8 10044,16304,9389,2228,5053,3789,5988,4479,\r
9 8719,13901,15524,3098,7570,12949,1074,0,\r
10 10079,16233,7531,14642,13600,8087,0,11690,\r
11 8579,15413,6522,1076,2677,6914,10881,13803,\r
12 13806,15789,14642,2135,15427,14023,14079,7708,\r
13 3602,0,4976,10910,4821,4543,5455,9368,\r
14 4201,9970,10647,15130,10079,15020,5558,15902,\r
15 7858,2962,10386,2155,14641,12308,8021,8170,\r
16 2490,10528,15427,14629,10528,15136,999,1883,\r
17 14912,10788,6360,3677,14960,12257,2294,12614,\r
18 8698,12433,9867,12663,16016,11332,8568,8348,\r
19 0,3228,8594,11249,6674,3098,9297,10077,\r
20 10340,5803,5420,6070,660,5676,1,9497,\r
21 8700,14264,5846,12433,16282,12561,12032,13732,\r
22 8239,10731,7236,10286,2678,7321,13368,6594,\r
23 9047,5291,8293,2809,3268,6485,10509,2277,\r
24 10471,595,8887,15919,14413,15881,8827,13726,\r
25 13975,14092,7634,1652,8753,6801,6568,15853,\r
26 1022,5664,0,9303,15719,6128,6674,7433,\r
27 157,9360,6555,12432,9593,9660,14081,13927,\r
28 8702,13702,8663,5629,3691,16298,1573,902,\r
29 1272,2376,1084,14447,14666,1692,15316,15129,\r
30 3833,920,8348,15839,15902,15635,10340,6603,\r
31 1764,9634,3833,2470,4704,9646,385,13200,\r
32 3009,1562,6846,6598,15861,8924,11762,3766,\r
33 9095,431,6599,1987,15902,11064,4972,12175,\r
34 14642,13857,6130,5833,13857,12112,8170,9867,\r
35 2569,9648,1883,10205,12365,6801,5222,14506,\r
36 1819,5142,2172,5291,15542,12112,2092,5560,\r
37 4538,5461,15059,11773,15884,2099,6876,11914,\r
38 3833,4972,8164,6240,12487,1341,10731,11762,\r
39 14548,4471,5044,7576,2392,16129,8175,7559,\r
40 12559,15861,6396,2926,7618,8417,15759,0,\r
41 9095,3510,7247,1712,16345,2209,8055,0,\r
42 319,12209,13144,15159,8238,7822,5014,10077,\r
43 2284,7177,6555,15861,14479,2510,8170,11806,\r
44 12149,12440,14185,11762,11552,8260,11864,11728,\r
45 15046,11561,4707,13420,3615,2233,2277,10668,\r
46 2228,8016,1813,2677,5240,6594,6636,9911,\r
47 1737,4396,12500,9682,7176,2027,12500,5244,\r
48 12112,1768,14571,12663,6729,3662,8170,15641,\r
49 15316,9648,5373,5475,6522,14571,3662,15902,\r
50 1652,9648,2228,8348,902,5988,9150,13250,\r
51 13411,4675,431,5507,10616,13987,15316,1378,\r
52 13832,13356,10087,9543,9093,8065,10497,8228,\r
53 11762,616,12968,5411,9648,12487,9463,15597,\r
54 11292,13985,14482,14600,1705,4678,12020,8828,\r
55 6210,9481,14980,5738,5990,14447,1569,8618,\r
56 2273,8543,1819,16158,12447,12470,10160,4725,\r
57 10778,1412,8040,4300,9550,568,7394,592,\r
58 9481,15680,3476,16128,7660,1214,359,6181,\r
59 8618,4067,14699,13368,514,11355,8914,3801,\r
60 14520,8885,10434,8274,7709,4312,7243,12633,\r
61 4867,5981,4538,2490,3034,5558,6801,7512,\r
62 14971,4315,4905,11682,8845,3732,1475,11661,\r
63 10189,1741,11667,5605,2656,9573,10898,2796,\r
64 1817,15216,11152,470,5988,6164,4972,10386,\r
65 13128,7247,3268,6729,4300,13101,8568,12663,\r
66 13849,3600,9718,11203,10528,13732,5251,14148,\r
67 8568,13128,10205,11332,1712,12821,9557,12753,\r
68 10505,5276,109,10394,10122,9809,3513,16093,\r
69 2490,9943,14798,15084,4598,5174,15648,13109,\r
70 0,6971,15426,14500,14571,6831,2623,6801,\r
71 6522,15388,3228,11053,0,2902,4285,13853,\r
72 14830,5373,15137,10087,3268,2569,6284,2902,\r
73 1483,3838,12159,4764,15130,6846,6957,12499,\r
74 4604,2739,14629,996,4867,13420,7791,5263,\r
75 8119,10088,4128,7950,11875,16244,1147,3473,\r
76 3268,15869,12821,11152,9922,1987,8238,15271,\r
77 852,6921,4155,7857,11187,2275,14224,15725,\r
78 9967,4479,6522,11152,2457,5962,13732,10088,\r
79 11226,11359,5053,13420,3727,12487,3823,13412,\r
80 13732,5962,11005,11173,8719,4354,6821,11421,\r
81 15640,4769,14868,9369,215,8176,2363,1930,\r
82 4124,11338,5373,2135,5253,10648,6220,5853,\r
83 2741,12020,14070,14571,7476,9011,11415,1306,\r
84 5318,13418,7293,15364,8898,3402,11976,9325,\r
85 1562,7366,3395,10762,7144,2336,13458,4538,\r
86 1159,1987,11652,12964,13513,541,13792,9741,\r
87 10840,16129,10917,4534,13600,5462,2357,3890,\r
88 6299,11315,13376,13820,13369,4450,14282,3510,\r
89 10008,2381,9301,10165,4832,13042,3789,11751,\r
90 8021,14286,9341,436,9171,8623,12745,12738,\r
91 567,13996,3654,9495,844,8260,15108,2851,\r
92 10351,2756,8572,3694,8851,5833,4280,12168,\r
93 9550,9095,1652,6594,2534,3662,12009,6827,\r
94 7447,2228,6555,15919,2294,6522,6674,0,\r
95 13128,15478,3098,14571,1573,13117,16336,3422,\r
96 12751,4635,9808,13171,11875,14148,14759,15680,\r
97 610,780,14127,15067,12717,11768,2223,4745,\r
98 2111,4363,6821,12230,13200,16093,410,15205,\r
99 3838,15020,12230,3473,7951,2926,981,13414,\r
100 3034,9835,3875,7247,15776,11053,10533,6393,\r
101 6729,1712,12233,10088,5152,1378,6043,3871,\r
102 6043,12487,15527,11769,12308,5962,11864,10804,\r
103 3268,14005,13662,10647,4972,15137,14485,7784,\r
104 7275,410,6555,2470,7074,359,12751,12054,\r
105 8851,2993,9487,13270,9267,2370,8119,14112,\r
106 6639,157,10245,16121,9967,14912,10307,8011,\r
107 12094,2470,10322,3570,6154,1453,15084,14801,\r
108 3823,7259,780,4972,13047,14500,2569,5833,\r
109 56,14601,2690,5036,788,46,2738,9922,\r
110 11332,10619,8011,13128,3268,431,13412,8851,\r
111 14748,5036,12185,13042,10030,11716,100,16205,\r
112 7951,5738,8417,10757,6463,7114,1183,14798,\r
113 10205,9721,15359,10074,8727,4587,11875,14615,\r
114 10340,9171,9171,4686,7731,4269,13042,8574,\r
115 16298,7024,10309,2858,4904,7223,8238,7512,\r
116 4556,3532,15222,2161,1162,6476,3221,10290,\r
117 11229,15137,14921,1319,4925,1991,7817,7427,\r
118 15089,9366,920,3875,4641,11787,14255,4915,\r
119 7588,15555,13106,16014,12882,10324,341,1331,\r
120 10685,7950,12292,10230,15336,7431,7576,6158,\r
121 5058,12149,2777,13434,5263,15769,9877,2704,\r
122 10300,867,1443,5285,2155,4474,935,12586,\r
123 12601,158,16191,8119,3726,3554,10398,13418,\r
124 8170,4867,14642,15478,1712,10136,6674,0,\r
125 46,9867,3766,12433,6057,3972,2156,852,\r
126 2144,9856,14761,11491,46,363,10561,4484,\r
127 999,9557,2902,7323,15084,8274,16087,6679,\r
128 6867,6971,2914,586,6240,5988,10386,8304,\r
129 3662,10088,5988,12821,7409,8308,15931,14376,\r
130 14700,15998,4484,1766,15794,3833,2464,4342,\r
131 1358,319,10099,15776,15839,1530,8538,7800,\r
132 3641,5569,7469,2104,8314,8976,5962,11857,\r
133 10330,8293,12356,1399,1991,5415,10497,15478,\r
134 15931,8308,11608,10167,4185,9369,1658,6193,\r
135 5962,5132,12322,319,7802,4707,3034,11308,\r
136 9559,10788,2228,8339,13513,5222,1712,3098,\r
137 1987,2719,1548,15427,13361,13736,5139,1255,\r
138 11064,8011,985,6135,788,2761,6522,5362,\r
139 13128,3476,6164,12032,2902,15881,11053,14538,\r
140 12964,14730,3751,12890,396,1132,6164,7938,\r
141 3165,7677,12218,7007,4824,6266,4198,9127,\r
142 12821,6463,199,6522,5462,1084,7232,15717,\r
143 3354,2788,6294,11857,14174,2235,6135,7808,\r
144 15931,10377,1168,9162,7176,3595,10046,1960,\r
145 3726,1723,6779,10955,11201,4721,661,7247,\r
146 5988,11291,9095,8555,7017,5975,14500,15822,\r
147 10887,7999,9648,15908,2938,8293,14629,4233,\r
148 8419,5141,12427,9360,2948,9321,13473,1134,\r
149 87,4180,2284,8822,3893,15653,15668,12175,\r
150 7951,12668,13119,7839,4793,4686,914,9481,\r
151 11912,13196,4235,15293,5704,9063,1605,15640,\r
152 13270,1192,9967,8698,5576,3059,4067,11809,\r
153 5420,7691,16087,764,12487,2273,14224,13412,\r
154 5373,12663,788,12433,8870,15902,14019,3966,\r
155 1104,11153,13117,8913,46,9922,15240,8260,\r
156 9874,1712,9096,7708,4544,15601,0,10529,\r
157 7419,9404,653,4067,10717,4901,10009,7229,\r
158 9867,7620,1412,14284,9931,8845,13975,8238,\r
159 10941,10205,678,11308,14985,12099,3268,11120,\r
160 14148,7900,5934,10099,12903,6274,9648,2851,\r
161 972,5149,9506,12102,723,15873,14497,5447,\r
162 13505,13658,13128,4699,11152,0,0,7808,\r
163 2623,6674,9557,7920,10004,14081,0,15478,\r
164 12498,7162,13662,14438,6939,10841,6599,7074,\r
165 2129,9303,3614,5121,13626,14806,13096,5275,\r
166 12032,11431,12265,242,12651,6465,11153,15635,\r
167 6154,7864,3263,7708,13216,9466,4929,4763,\r
168 16121,12949,6801,14244,6289,3766,8913,3228,\r
169 10099,4198,11895,286,13119,10778,12230,7238,\r
170 3614,14081,7323,4050,6846,14629,13420,9427,\r
171 5460,5130,10528,15705,6369,8361,1212,8866,\r
172 12821,15427,7323,2777,9648,8744,5386,8241,\r
173 11875,14112,14770,15369,9813,6750,13732,6594,\r
174 2464,11682,2031,15129,3532,12112,4831,4354,\r
175 2275,10376,11226,11611,8313,9590,14500,8598,\r
176 13403,4316,15388,13458,961,208,5995,1225,\r
177 6455,5932,11987,2902,13128,1224,1003,7409,\r
178 3028,650,13436,8485,6653,911,9425,11421,\r
179 9554,10993,15293,514,6670,14578,4972,9874,\r
180 8483,2534,14969,1934,14154,8926,11830,8784,\r
181 2987,9634,6670,13501,13957,4260,5761,15347,\r
182 7991,13414,7159,7233,14206,11665,6715,11079,\r
183 3545,5185,15639,14307,9338,8971,15994,5645,\r
184 3098,14081,788,8170,10188,8016,5988,15919,\r
185 12788,14960,10214,12606,11152,2470,13420,2927,\r
186 5240,7370,9648,10099,2039,4846,10610,11823,\r
187 13270,14761,5962,7512,10079,4867,8260,2135,\r
188 1052,10823,5729,10395,14361,13382,12200,8162,\r
189 5117,7531,13361,14520,10602,8685,3654,9777,\r
190 16263,6135,6389,11745,10383,8550,12618,10340,\r
191 4128,15459,7062,5135,9047,9346,5897,15479,\r
192 7268,5576,0,14937,12736,5545,10079,6507,\r
193 3238,3204,9865,5843,12487,198,8251,13195,\r
194 158,8913,6598,4373,15991,13857,3615,11106,\r
195 3244,10654,6394,6183,11633,3098,12257,15427,\r
196 1768,7209,11987,963,13857,7247,16046,7239,\r
197 13200,11773,2914,12927,11669,13011,1905,9089,\r
198 16176,3743,158,5222,12717,5825,16087,9519,\r
199 9227,15563,1712,8511,11005,4867,13200,13106,\r
200 10788,3606,8680,3447,5833,3709,4526,10847,\r
201 2871,6000,2204,15769,2969,7617,15976,7618,\r
202 4067,10757,15316,6476,10509,8772,9095,0,\r
203 8996,410,14742,7239,10532,9406,7419,15903,\r
204 5437,5560,12608,9141,3986,14358,7409,3992,\r
205 3221,6170,11821,508,6434,1442,4260,3813,\r
206 8308,6456,3534,431,4538,3406,12435,5643,\r
207 7144,8870,9186,3775,1817,9905,7951,4336,\r
208 2273,12264,6513,2993,16270,5541,5077,6263,\r
209 1259,2559,1675,16218,1790,12804,15098,4445,\r
210 10336,15216,12144,8618,4573,13679,15000,10189,\r
211 2209,4583,5353,13784,2623,7720,5833,11064,\r
212 10088,10077,10610,6786,10939,10867,1768,8119,\r
213 7394,12056,3789,1074,15413,10527,7247,12487,\r
214 8568,10136,2228,13412,4840,1652,6740,11322,\r
215 5037,2910,5174,10340,2135,8011,11895,11895,\r
216 109,11957,14336,13234,8225,14343,9063,9819,\r
217 13517,11635,13549,14936,988,3809,5833,7857,\r
218 13462,297,7668,14482,4316,10848,2569,13931,\r
219 5593,12056,11103,14170,448,902,1768,11552,\r
220 6043,0,0,8646,10391,0,15316,3737,\r
221 10594,11026,13280,14667,5713,4057,2787,4191,\r
222 3838,7247,8772,14185,15641,8772,0,14081,\r
223 0,9429,17,613,7428,15131,15651,14350,\r
224 4365,15856,9521,3228,7950,3395,0,6594,\r
225 11078,14975,6889,10768,4288,6707,7175,2235,\r
226 10896,911,7707,7592,12916,15570,15644,6997,\r
227 12523,14757,11895,7109,16279,12969,11690,0,\r
228 8854,16304,8568,11334,15641,15478,2275,6193,\r
229 7323,5230,9835,12821,1652,12477,5044,359,\r
230 12487,13881,10731,8246,14642,14885,6555,15919,\r
231 13857,1982,7646,12528,12009,7310,12310,3193,\r
232 359,1483,5322,10476,46,3751,3766,6729,\r
233 4512,13853,5558,12736,1733,2718,9956,7857,\r
234 6519,2187,12964,12949,750,8877,15136,3742,\r
235 4495,13851,3811,906,11592,9943,920,10806,\r
236 10442,12561,5035,988,15861,8024,10272,16372,\r
237 13353,15946,7330,4834,9414,8267,1668,12498,\r
238 4530,9162,8648,3883,9451,3900,2028,12427,\r
239 11203,3071,5645,10228,11875,8198,4563,215,\r
240 3614,5717,11332,1617,11382,13987,12626,11857,\r
241 12156,6513,13496,6997,16158,9093,6725,13737,\r
242 5890,10008,14447,5475,12215,141,16192,10200,\r
243 4450,6688,11090,16109,12256,9027,15355,3422,\r
244 10079,14571,13101,9967,12296,3460,8348,15413,\r
245 5222,11762,3823,13412,6729,6599,10528,9922,\r
246 11152,9171,5362,5373,750,8969,1652,6220,\r
247 5373,2569,3742,15119,10340,999,10088,10731,\r
248 1028,3228,7369,15256,11822,12904,8121,11641,\r
249 11158,5016,10725,8412,1183,9674,11806,12112,\r
250 2623,15516,4226,10021,13316,12075,792,4972,\r
251 8506,8921,6133,14718,567,4349,13420,5953,\r
252 2265,11902,10019,16265,16312,0,9922,3009,\r
253 8170,3473,10757,3567,2825,6915,5174,4299,\r
254 0,8274,6292,295,6522,1475,359,4538,\r
255 5358,5174,3008,6317,12688,4165,752,12052,\r
256 10008,3912,7431,13364,9894,13524,284,16013,\r
257 9820,11295,1144,2845,3538,10678,13806,1469,\r
258 14210,7870,3766,10528,13642,10823,4200,8031,\r
259 4671,14093,5541,1214,4115,3286,8217,8018 };\r
260 \r
261 \r
262 unsigned int phash( unsigned int move, int turn )\r
263 {\r
264   unsigned int a, b;\r
265   \r
266   move |= ( (unsigned int)turn << 31 );\r
267   move += 0x69fe378e;\r
268   move ^= ( move >> 16 );\r
269   move += ( move << 8 );\r
270   move ^= ( move >> 4 );\r
271   b     = ( move >> 7 ) & 0x7ff;\r
272   a     = move >> 18;\r
273   \r
274   return a ^ tab[b];\r
275 }\r