int[int] m; file_to_map("mt_rand 1 to 170 first 1000000 seeds.txt",m); int c; boolean b; void butt(int d, int[int] x ,int r){ //clear(m); print("seeds where mt_rand 1 to 170 is "+r+":"); for i from 1 to (500000){ if((m[i]) == r){ c = 0; b = true; for j from 0 to (count(x)-1){ b = b && (m[i+c] == m[i+c+x[j]]); c += x[j]; } if(b){ print(i+" = "+d+" * " + (i/d) + " + " + (i%d) ); //abort("we did it"); } } } print("===================="); /* print("seeds where glibc rand 0 to 2147483647 is "+r+":"); file_to_map("glibc rand 0 to 2147483647 first 1000000 seeds mod 170 plus 1.txt",m); for i from 1 to (500000){ if((m[i]) == r){ c = 0; b = true; for j from 0 to (count(x)-1){ b = b && (m[i+c] == m[i+c+x[j]]); c += x[j]; } if(b){ print(i+" = "+d+" * " + (i/d) + " + " + (i%d) ); abort("we did it"); } } } print("===================="); */ /* print("seeds where mt_rand mod 170 is "+r+":"); clear(m); file_to_map("mt_rand mod 170.txt",m); for i from 1 to (500000){ if((m[i]+1) == r){ c = 0; b = true; for j from 0 to (count(x)-1){ b = b && (m[i+c] == m[i+c+x[j]]); c += x[j]; } if(b){ print(i+" = "+d+" * " + (i/d) + " + " + (i%d) ); abort("we did it."); } } } print("===================="); */ } //152 = 19*2^3 //245 = 5*7*7 int[int] but = {152*3,245*3,451*3}; /*these have precisely the first enchantment for class 1 path 1. 532 804245262 777 697647321 1331 718230343 3066 401867098 4667 933430014 6959 195097050 8180 121809700 with differences: 245 554 1735 1601 2292 1221 */ /*these have precisely the second enchantment for class 1 path 1. 94 606216746 1275 121934420 2839 122462796 3519 767266958 4191 851515177 4472 218609014 6041 452627138 9839 880434260 with differences: 1181 1564 680 672 281 1569 3798 */ /* items with precisely first modifier for class 2 sign 1 191 1779 3508 4442 7541 9576 */ /* items with precisely first modifier for class 3 sign 1 696 1933 2835 2959 3314 4180 4265 */ /* items with precisely first modifier for class 1 sign 2 3093 4751 4958 5956 6929 7752 */ /* items with precisely first modifier for class 3 sign 4 149 2892 4590 4681 */ for ii from 50 to 50{ //but = {152*ii,245*ii,451*ii,103*ii}; //but = {245*ii,554*ii,1735*ii,1601*ii,2292*ii,1221*ii}; //but = {1181*ii,1564*ii,680*ii,672*ii,281*ii,1569*ii,3798*ii}; //but = {245*ii,554*ii,1735*ii,1601*ii,2292*ii,1221*ii}; //but = {(1779-191)*ii,(3508-1779)*ii,(4442-3508)*ii,(7541-4442)*ii,(9576-7541)*ii}; //but = {(1933-696)*ii,(2835-1933)*ii,(2959-2835)*ii,(3314-2959)*ii,(4180-3314)*ii,(4265-4180)*ii}; //but = {(4751-3093)*ii,(4958-4751)*ii,(5956-4958)*ii,(6929-5956)*ii,(7752-6929)*ii}; but = {(2892-149)*ii,(4590-2892)*ii,(4681-4590)*ii}; print(ii); for i from 1 to 170{ //butt(532,but,i); //butt(3093,but,i); butt(149,but,i); } } //success for but = {1520,2450,4510}: //seeds where glibc rand 0 to 2147483647 is 3: //13841 = 380 * 36 + 161 //thus seeds for items 380, 532, 777, and 1228 are 13841, 15361, 17811, and 22321 respectively for seal clubber under mongoose? //this is likely a false positive; the pattern doesn't hold for the next item in the sequence. //I think the reason is that some of the items had multiple modifiers. we'll exclude those in future tests. //success for but = {12250,27700,86750,80050,114600,61050}: //seeds where mt_rand 1 to 170 is 168: //138955 = 532 * 261 + 103 /*thus seeds for items 532 777 1331 3066 4667 6959 8180 are 138955 151205 178905 265655 345705 460305 521355 respectively. */ //horrifyingly, that suggests 18 + 50*itemID + 112337 as the argument for mt_srand(). //but = {1181*ii,1564*ii,680*ii,672*ii,281*ii,1569*ii,3798*ii} produces this, too: //seeds where mt_rand 1 to 170 is 167: //117055 = 94 * 1245 + 25 //which has an identical seeding function, thus we really did it.