fork(1) download
  1. //元コード(MCP出力抜粋) http:// pastebin.com/N9VpfQqY
  2. //実行結果(ダイヤ赤石) http:// pastebin.com/cungQRLv
  3. //実行結果(鉄・金鉱石) http:// pastebin.com/WTTuZbCu
  4.  
  5. import java.util.*;
  6. import java.lang.*;
  7. import java.io.*;
  8.  
  9. class Ideone
  10. {
  11. static final int loopCount=10000;//10000*1000;
  12. static final int oreSize=7;
  13.  
  14. //Minecraftからメソッド名だけ流用
  15. private int numberOfBlocks;
  16. //Minecraftから流用、手抜きWorldに対応化
  17. public boolean generate_1_8_0(World worldIn, Random p_180709_2_, BlockPos p_180709_3_)
  18. {
  19. float var4 = p_180709_2_.nextFloat() * (float)Math.PI;
  20. double var5 = (double)((float)(p_180709_3_.getX() + 8) + MathHelper.sin(var4) * (float)this.numberOfBlocks / 8.0F);
  21. double var7 = (double)((float)(p_180709_3_.getX() + 8) - MathHelper.sin(var4) * (float)this.numberOfBlocks / 8.0F);
  22. double var9 = (double)((float)(p_180709_3_.getZ() + 8) + MathHelper.cos(var4) * (float)this.numberOfBlocks / 8.0F);
  23. double var11 = (double)((float)(p_180709_3_.getZ() + 8) - MathHelper.cos(var4) * (float)this.numberOfBlocks / 8.0F);
  24. double var13 = (double)(p_180709_3_.getY() + p_180709_2_.nextInt(3) - 2);
  25. double var15 = (double)(p_180709_3_.getY() + p_180709_2_.nextInt(3) - 2);
  26.  
  27. for (int var17 = 0; var17 < this.numberOfBlocks; ++var17)
  28. {
  29. float var18 = (float)var17 / (float)this.numberOfBlocks;
  30. double var19 = var5 + (var7 - var5) * (double)var18;
  31. double var21 = var13 + (var15 - var13) * (double)var18;
  32. double var23 = var9 + (var11 - var9) * (double)var18;
  33. double var25 = p_180709_2_.nextDouble() * (double)this.numberOfBlocks / 16.0D;
  34. double var27 = (double)(MathHelper.sin((float)Math.PI * var18) + 1.0F) * var25 + 1.0D;
  35. double var29 = (double)(MathHelper.sin((float)Math.PI * var18) + 1.0F) * var25 + 1.0D;
  36. int var31 = MathHelper.floor_double(var19 - var27 / 2.0D);
  37. int var32 = MathHelper.floor_double(var21 - var29 / 2.0D);
  38. int var33 = MathHelper.floor_double(var23 - var27 / 2.0D);
  39. int var34 = MathHelper.floor_double(var19 + var27 / 2.0D);
  40. int var35 = MathHelper.floor_double(var21 + var29 / 2.0D);
  41. int var36 = MathHelper.floor_double(var23 + var27 / 2.0D);
  42.  
  43. for (int var37 = var31; var37 <= var34; ++var37)
  44. {
  45. double var38 = ((double)var37 + 0.5D - var19) / (var27 / 2.0D);
  46.  
  47. if (var38 * var38 < 1.0D)
  48. {
  49. for (int var40 = var32; var40 <= var35; ++var40)
  50. {
  51. double var41 = ((double)var40 + 0.5D - var21) / (var29 / 2.0D);
  52.  
  53. if (var38 * var38 + var41 * var41 < 1.0D)
  54. {
  55. for (int var43 = var33; var43 <= var36; ++var43)
  56. {
  57. double var44 = ((double)var43 + 0.5D - var23) / (var27 / 2.0D);
  58.  
  59. if (var38 * var38 + var41 * var41 + var44 * var44 < 1.0D)
  60. {
  61. worldIn.set(var37, var40, var43);
  62. //BlockPos var46 = new BlockPos(var37, var40, var43);
  63. //
  64. //if (this.field_175919_c.apply(worldIn.getBlockState(var46)))
  65. //{
  66. // worldIn.setBlockState(var46, this.oreBlock, 2);
  67. //}
  68. }
  69. }
  70. }
  71. }
  72. }
  73. }
  74. }
  75.  
  76. return true;
  77. }
  78. //Minecraftから流用、手抜きWorldに対応化
  79. public boolean generate_1_7_10(World p_76484_1_, Random p_76484_2_, int p_76484_3_, int p_76484_4_, int p_76484_5_)
  80. {
  81. float var6 = p_76484_2_.nextFloat() * (float)Math.PI;
  82. double var7 = (double)((float)(p_76484_3_ + 8) + MathHelper.sin(var6) * (float)this.numberOfBlocks / 8.0F);
  83. double var9 = (double)((float)(p_76484_3_ + 8) - MathHelper.sin(var6) * (float)this.numberOfBlocks / 8.0F);
  84. double var11 = (double)((float)(p_76484_5_ + 8) + MathHelper.cos(var6) * (float)this.numberOfBlocks / 8.0F);
  85. double var13 = (double)((float)(p_76484_5_ + 8) - MathHelper.cos(var6) * (float)this.numberOfBlocks / 8.0F);
  86. double var15 = (double)(p_76484_4_ + p_76484_2_.nextInt(3) - 2);
  87. double var17 = (double)(p_76484_4_ + p_76484_2_.nextInt(3) - 2);
  88.  
  89. for (int var19 = 0; var19 <= this.numberOfBlocks; ++var19)
  90. {
  91. double var20 = var7 + (var9 - var7) * (double)var19 / (double)this.numberOfBlocks;
  92. double var22 = var15 + (var17 - var15) * (double)var19 / (double)this.numberOfBlocks;
  93. double var24 = var11 + (var13 - var11) * (double)var19 / (double)this.numberOfBlocks;
  94. double var26 = p_76484_2_.nextDouble() * (double)this.numberOfBlocks / 16.0D;
  95. double var28 = (double)(MathHelper.sin((float)var19 * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * var26 + 1.0D;
  96. double var30 = (double)(MathHelper.sin((float)var19 * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * var26 + 1.0D;
  97. int var32 = MathHelper.floor_double(var20 - var28 / 2.0D);
  98. int var33 = MathHelper.floor_double(var22 - var30 / 2.0D);
  99. int var34 = MathHelper.floor_double(var24 - var28 / 2.0D);
  100. int var35 = MathHelper.floor_double(var20 + var28 / 2.0D);
  101. int var36 = MathHelper.floor_double(var22 + var30 / 2.0D);
  102. int var37 = MathHelper.floor_double(var24 + var28 / 2.0D);
  103.  
  104. for (int var38 = var32; var38 <= var35; ++var38)
  105. {
  106. double var39 = ((double)var38 + 0.5D - var20) / (var28 / 2.0D);
  107.  
  108. if (var39 * var39 < 1.0D)
  109. {
  110. for (int var41 = var33; var41 <= var36; ++var41)
  111. {
  112. double var42 = ((double)var41 + 0.5D - var22) / (var30 / 2.0D);
  113.  
  114. if (var39 * var39 + var42 * var42 < 1.0D)
  115. {
  116. for (int var44 = var34; var44 <= var37; ++var44)
  117. {
  118. double var45 = ((double)var44 + 0.5D - var24) / (var28 / 2.0D);
  119.  
  120. if (var39 * var39 + var42 * var42 + var45 * var45 < 1.0D)
  121. //if (var39 * var39 + var42 * var42 + var45 * var45 < 1.0D && p_76484_1_.getBlock(var38, var41, var44) == this.field_150518_c)
  122. {
  123. p_76484_1_.set(var38, var41, var44);
  124. //p_76484_1_.setBlock(var38, var41, var44, this.field_150519_a, 0, 2);
  125. }
  126. }
  127. }
  128. }
  129. }
  130. }
  131. }
  132.  
  133. return true;
  134. }
  135. //Minecraftから一部のみ流用
  136. static class MathHelper{
  137. private static final float[] SIN_TABLE = new float[65536];
  138. public static float sin(float p_76126_0_)
  139. {
  140. return SIN_TABLE[(int)(p_76126_0_ * 10430.378F) & 65535];
  141. }
  142. public static float cos(float p_76134_0_)
  143. {
  144. return SIN_TABLE[(int)(p_76134_0_ * 10430.378F + 16384.0F) & 65535];
  145. }
  146. public static int floor_double(double p_76128_0_)
  147. {
  148. int var2 = (int)p_76128_0_;
  149. return p_76128_0_ < (double)var2 ? var2 - 1 : var2;
  150. }
  151. static
  152. {
  153. for (int var0 = 0; var0 < 65536; ++var0)
  154. {
  155. SIN_TABLE[var0] = (float)Math.sin((double)var0 * Math.PI * 2.0D / 65536.0D);
  156. }
  157. }
  158. }
  159. //クラス名、一部のメソッド名だけMinecraftから手抜き流用
  160. //Setコレクション対応、Tree(Sort)対応
  161. class BlockPos implements Comparable<BlockPos>{
  162. public int hash=0;
  163. public final int x,y,z;
  164. public BlockPos(int _x,int _y, int _z){
  165. x=_x;y=_y;z=_z;hash=0;
  166. }
  167. public int getX(){return this.x;}
  168. public int getY(){return this.y;}
  169. public int getZ(){return this.z;}
  170. public boolean eq(BlockPos p){
  171. return (this.x==p.x&&this.y==p.y&&this.z==p.z);
  172. }
  173. @Override public boolean equals(Object p){
  174. if(!(p instanceof BlockPos))return false;
  175. return eq((BlockPos)p);
  176. }
  177. @Override public int hashCode(){
  178. //ハッシュの衝突率がヤバかったのでStringのハッシュに丸投げ
  179. //return x*0x101+y*0x10001+z*0x1000001;
  180. if(hash!=0)return hash;
  181. return hash=this.toString().hashCode();
  182. }
  183. @Override public String toString(){
  184. String s;s="("+x+","+y+","+z+")";
  185. return s;
  186. }
  187. @Override public int compareTo(BlockPos o){
  188. if(x!=o.x)return x-o.x;
  189. if(y!=o.y)return y-o.y;
  190. if(z!=o.z)return z-o.z;
  191. return 0;
  192. }
  193. }
  194. //クラス名だけMinecraftから手抜き流用
  195. //Setコレクション対応
  196. class World{
  197. public int hash=0;
  198. public TreeSet<BlockPos> list;
  199. public TreeSet<BlockPos> worklist;
  200. public World(){
  201. list=new TreeSet<BlockPos>();
  202. worklist=new TreeSet<BlockPos>();
  203. hash=0;
  204. }
  205. public World(World p){
  206. list=new TreeSet<BlockPos>(p.list);
  207. worklist=new TreeSet<BlockPos>(p.worklist);
  208. hash=0;
  209. }
  210. public void cls(){
  211. list.clear();
  212. hash=0;
  213. }
  214. public void set(int x,int y,int z){
  215. list.add(new BlockPos(x,y,z));
  216. hash=0;
  217. }
  218. //各軸の最小値が0になるよう正規化
  219. public void fix(){
  220. int mx,my,mz;mx=my=mz=Integer.MAX_VALUE;
  221. Iterator<BlockPos> i=list.iterator();
  222. while(i.hasNext()){
  223. BlockPos p=(BlockPos)i.next();
  224. mx=Math.min(mx,p.x);
  225. my=Math.min(my,p.y);
  226. mz=Math.min(mz,p.z);
  227. }
  228. i=list.iterator();
  229. while(i.hasNext()){
  230. BlockPos p=(BlockPos)i.next();
  231. worklist.add(new BlockPos(p.x-mx,p.y-my,p.z-mz));
  232. }
  233. list.clear();
  234. TreeSet<BlockPos> tmp=list;
  235. list=worklist;
  236. worklist=tmp;
  237. hash=0;
  238. }
  239. //0~15の値から上下反転、前後反転、水平回転の組み合わせを求めてflip()する
  240. public World flip(int count){
  241. return flip((count&8)!=0,(count&4)!=0,count&3);
  242. }
  243. //現在の状態を新しいWorldインスタンスに複製し、上下反転、前後反転、水平回転を行ってからfix()したものを返す
  244. public World flip(boolean flipX,boolean flipY,int rotXZ){
  245. int nx,ny,nz;
  246. World r=new World();
  247. Iterator<BlockPos> i=list.iterator();
  248. while(i.hasNext()){
  249. BlockPos p=(BlockPos)i.next();
  250. nx=p.x*(flipX?-1:1);
  251. ny=p.y*(flipY?-1:1);
  252. nz=p.z;
  253. if((rotXZ&2)!=0){
  254. nx=-nx;
  255. nz=-nz;
  256. }
  257. if((rotXZ&1)!=0){
  258. int t=nz;
  259. nz=nx;
  260. nx=-t;
  261. }
  262. r.set(nx,ny,nz);
  263. }
  264. r.fix();
  265. return r;
  266. }
  267. //現在の状態を新しいWorldインスタンスに複製し、返す
  268. public World clone(){
  269. return new World(this);
  270. }
  271. //回転・反転対象な物を含めた形状比較
  272. //public boolean eq(World p){
  273. // return
  274. // list.equals(p.flip( 0).list)||
  275. // list.equals(p.flip( 1).list)||
  276. // list.equals(p.flip( 2).list)||
  277. // list.equals(p.flip( 3).list)||
  278. // list.equals(p.flip( 4).list)||
  279. // list.equals(p.flip( 5).list)||
  280. // list.equals(p.flip( 6).list)||
  281. // list.equals(p.flip( 7).list)||
  282. // list.equals(p.flip( 8).list)||
  283. // list.equals(p.flip( 9).list)||
  284. // list.equals(p.flip(10).list)||
  285. // list.equals(p.flip(11).list)||
  286. // list.equals(p.flip(12).list)||
  287. // list.equals(p.flip(13).list)||
  288. // list.equals(p.flip(14).list)||
  289. // list.equals(p.flip(15).list);
  290. //
  291. //}
  292. @Override public boolean equals(Object p){
  293. if(!(p instanceof World))return false;
  294. return list.equals(((World)p).list);
  295. }
  296. @Override public int hashCode(){
  297. //ハッシュの衝突率がヤバかったのでStringのハッシュに丸投げ
  298. //return list.hashCode();
  299. if(hash!=0)return hash;
  300. return hash=this.toString().hashCode();
  301. }
  302. @Override public String toString(){
  303. int mx,mz;mx=mz=Integer.MIN_VALUE;
  304. String s,sep="";
  305. Iterator<BlockPos> i=list.iterator();
  306. if(list.size()==0)mx=mz=0;
  307. s="count="+list.size()+" list=";
  308. while(i.hasNext()){
  309. BlockPos p=(BlockPos)i.next();
  310. s=s+sep+p.toString();
  311. mx=Math.max(mx,p.x+1);
  312. mz=Math.max(mz,p.z+1);
  313. sep="/";
  314. }
  315. s="width=["+Math.max(mx,mz)+"-"+Math.min(mx,mz)+"] "+s;
  316. return s;
  317. }
  318. }
  319. public static void main (String[] args) throws java.lang.Exception
  320. {
  321. try{
  322. Ideone i=new Ideone();
  323. i.main2();
  324. }catch(Exception e){
  325. e.printStackTrace(System.out);
  326. }
  327. }
  328. //本体
  329. public void main2() throws java.lang.Exception{
  330. Random r=new Random();
  331. BlockPos p=new BlockPos(100,100,100);
  332. World w;
  333. HashMap<World,Integer> list17=new HashMap<World,Integer>();
  334. HashMap<World,Integer> list18=new HashMap<World,Integer>();
  335. //テストする実装(1.7.10、1.8)の数だけループ
  336. for(int stage=0;stage<2;stage++){
  337. HashMap<World,Integer> list;
  338. w=new World();
  339. if(stage==0){
  340. //1.7.10用の処理、oreSizeはそのまま
  341. list=list17;
  342. this.numberOfBlocks=oreSize;
  343. }else{
  344. //1.8用の処理、oreSizeは+1
  345. list=list18;
  346. this.numberOfBlocks=oreSize+1;
  347. }
  348. //シミュレーションループ
  349. for(int i=0;i<loopCount;i++){
  350. //プログレス
  351. if((i&0x0fff)==0)System.err.print("stage="+stage+" loopCount="+i+"/"+loopCount+" \r");
  352. //簡易ワールドをクリアして鉱脈生成
  353. w.cls();
  354. if(stage==0)
  355. generate_1_7_10(w,r,100,100,100);
  356. else
  357. generate_1_8_0(w,r,p);
  358. //とりあえずfixだけしてマップに追加、追加済みならインクリメント
  359. w.fix();
  360. if(list.containsKey(w))
  361. list.put(w.clone(),list.get(w)+1);
  362. else
  363. list.put(w.clone(),1);
  364. }
  365. //回転・反転のバリエーションを統合
  366. HashMap<World,Integer> worklist=new HashMap<World,Integer>();
  367. Iterator<World> j=new HashSet<World>(list.keySet()).iterator();//HashMap操作するから気休め程度にクローンしておく
  368. while(j.hasNext()){
  369. w=(World)j.next();
  370. //ハッシュコードが最大となる形状に統合する。
  371. int index=0,hash=w.hashCode(),count=0;
  372. for(int k=0;k<16;k++){//上下反転(2パターン)×前後反転(2パターン)×水平回転(4パターン)=16
  373. World f=w.flip(k);
  374. //最大値がコリジョンしたら統合先が一意に定まらないので最後の共通形状判定で見落とす…
  375. if(f.hashCode()==hash && index!=k && !w.flip(index).equals(f)){
  376. System.err.println("");
  377. System.err.println("hash collision. index"+index+"#"+hash+" == index"+k+"#"+f.hashCode());
  378. System.err.println(" index"+index+" "+w.flip(index));
  379. System.err.println(" index"+k+" "+f);
  380. System.out.println("hash collision. index"+index+"#"+hash+" == index"+k+"#"+f.hashCode());
  381. System.out.println(" index"+index+" "+w.flip(index));
  382. System.out.println(" index"+k+" "+f);
  383. }
  384. if(f.hashCode()>hash){
  385. index=k;
  386. hash=f.hashCode();
  387. }
  388. if(list.containsKey(f)){
  389. count+=list.get(f);
  390. list.put(f,0);
  391. }
  392. }
  393. list.put(w.flip(index),count);
  394. }
  395. //統合の結果不要になった要素を消去
  396. j=list.keySet().iterator();
  397. while(j.hasNext()){
  398. w=(World)j.next();
  399. if(list.get(w)<=0)
  400. j.remove();
  401. }
  402. }
  403. System.err.println("");
  404. //表示
  405. for(int stage=0;stage<2;stage++){
  406. HashMap<World,Integer> list,anot;
  407. if(stage==0){
  408. list=list17;
  409. anot=list18;
  410. System.out.println("1.7/count="+list.size());
  411. }else{
  412. list=list18;
  413. anot=list17;
  414. System.out.println("1.8/count="+list.size());
  415. }
  416. Iterator<World> i=list.keySet().iterator();
  417. while(i.hasNext()){
  418. World k=(World)i.next();
  419. if(list.get(k)>0)
  420. System.out.println(list.get(k)+"ref "+(anot.containsKey(k)?"comm ":"uniq ")+k.toString());
  421. }
  422. }
  423. }
  424. }
  425.  
Success #stdin #stdout #stderr 0.69s 321728KB
stdin
Standard input is empty
stdout
1.7/count=59
11ref comm width=[2-2] count=7 list=(0,1,0)/(0,2,0)/(0,2,1)/(1,0,0)/(1,1,0)/(1,1,1)/(1,2,1)
63ref comm width=[2-2] count=4 list=(0,2,0)/(1,0,1)/(1,1,0)/(1,1,1)
12ref comm width=[2-2] count=7 list=(0,1,0)/(0,1,1)/(0,2,0)/(0,2,1)/(1,0,0)/(1,1,0)/(1,2,1)
73ref comm width=[2-2] count=6 list=(0,2,0)/(0,2,1)/(0,3,1)/(1,0,0)/(1,1,0)/(1,1,1)
911ref comm width=[2-2] count=5 list=(0,1,0)/(0,1,1)/(1,0,0)/(1,1,0)/(1,1,1)
88ref comm width=[2-2] count=3 list=(0,0,1)/(1,0,1)/(1,1,0)
924ref comm width=[2-2] count=8 list=(0,0,0)/(0,0,1)/(0,1,0)/(0,1,1)/(1,0,0)/(1,0,1)/(1,1,0)/(1,1,1)
54ref comm width=[2-2] count=5 list=(0,0,0)/(0,0,1)/(0,1,0)/(1,1,0)/(1,1,1)
5ref comm width=[2-2] count=6 list=(0,0,1)/(0,1,0)/(0,1,1)/(1,0,0)/(1,1,0)/(1,1,1)
845ref comm width=[2-2] count=6 list=(0,0,1)/(0,1,1)/(1,0,0)/(1,0,1)/(1,1,0)/(1,1,1)
7ref comm width=[2-2] count=6 list=(0,0,1)/(0,1,0)/(0,1,1)/(1,0,0)/(1,0,1)/(1,1,0)
77ref comm width=[2-2] count=4 list=(0,0,1)/(1,0,1)/(1,1,0)/(1,2,0)
27ref comm width=[2-2] count=8 list=(0,0,0)/(0,1,0)/(0,1,1)/(0,2,1)/(1,1,1)/(1,2,0)/(1,2,1)/(1,3,1)
263ref comm width=[2-1] count=4 list=(0,0,0)/(0,0,1)/(0,1,0)/(0,1,1)
24ref comm width=[2-2] count=9 list=(0,0,1)/(0,1,0)/(0,1,1)/(0,2,0)/(0,2,1)/(1,1,0)/(1,1,1)/(1,2,0)/(1,2,1)
126ref comm width=[2-2] count=4 list=(0,0,0)/(0,1,0)/(1,2,1)/(1,3,1)
110ref comm width=[2-2] count=6 list=(0,2,0)/(0,2,1)/(0,3,1)/(1,0,0)/(1,1,0)/(1,2,1)
521ref comm width=[2-2] count=4 list=(0,0,1)/(0,1,0)/(1,0,1)/(1,1,0)
1206ref comm width=[2-2] count=4 list=(0,0,0)/(0,0,1)/(1,0,0)/(1,0,1)
20ref comm width=[2-2] count=6 list=(0,2,0)/(0,2,1)/(1,0,1)/(1,1,0)/(1,1,1)/(1,2,0)
112ref comm width=[1-1] count=2 list=(0,0,0)/(0,1,0)
40ref comm width=[0-0] count=0 list=
14ref comm width=[2-2] count=7 list=(0,1,0)/(0,2,1)/(1,0,0)/(1,1,0)/(1,1,1)/(1,2,0)/(1,2,1)
14ref uniq width=[2-2] count=7 list=(0,1,1)/(0,2,0)/(0,2,1)/(1,0,0)/(1,1,0)/(1,2,0)/(1,2,1)
20ref comm width=[2-2] count=8 list=(0,0,0)/(0,1,0)/(0,1,1)/(0,2,1)/(1,1,0)/(1,2,0)/(1,2,1)/(1,3,1)
1529ref comm width=[2-2] count=6 list=(0,1,0)/(0,1,1)/(0,2,1)/(1,0,0)/(1,1,0)/(1,1,1)
26ref comm width=[2-2] count=8 list=(0,1,0)/(0,1,1)/(0,2,0)/(0,2,1)/(1,0,0)/(1,1,0)/(1,2,0)/(1,2,1)
21ref comm width=[2-2] count=10 list=(0,1,0)/(0,1,1)/(0,2,0)/(0,2,1)/(0,3,0)/(1,0,1)/(1,1,0)/(1,1,1)/(1,2,0)/(1,2,1)
23ref comm width=[2-2] count=8 list=(0,1,0)/(0,1,1)/(0,2,0)/(1,0,1)/(1,1,0)/(1,1,1)/(1,2,0)/(1,2,1)
24ref comm width=[2-2] count=9 list=(0,0,1)/(0,1,0)/(0,1,1)/(0,2,0)/(0,2,1)/(1,1,0)/(1,2,0)/(1,2,1)/(1,3,0)
20ref comm width=[2-2] count=2 list=(0,0,0)/(1,0,1)
1279ref comm width=[2-2] count=4 list=(0,0,0)/(0,1,0)/(1,0,1)/(1,1,1)
55ref comm width=[2-2] count=3 list=(0,1,1)/(1,0,0)/(1,1,0)
5ref comm width=[2-2] count=5 list=(0,0,0)/(0,0,1)/(0,1,0)/(1,0,0)/(1,1,1)
35ref comm width=[2-2] count=5 list=(0,0,1)/(0,1,1)/(0,2,0)/(1,2,0)/(1,2,1)
6ref comm width=[2-2] count=8 list=(0,1,1)/(0,2,0)/(0,2,1)/(1,0,1)/(1,1,0)/(1,1,1)/(1,2,0)/(1,2,1)
10ref uniq width=[2-2] count=7 list=(0,1,0)/(0,1,1)/(0,2,0)/(1,0,1)/(1,1,0)/(1,1,1)/(1,2,1)
3ref comm width=[2-2] count=8 list=(0,0,0)/(0,1,0)/(0,1,1)/(0,2,1)/(1,0,0)/(1,0,1)/(1,1,0)/(1,1,1)
122ref comm width=[2-2] count=5 list=(0,0,1)/(0,1,1)/(0,2,0)/(1,2,0)/(1,3,0)
18ref comm width=[2-2] count=4 list=(0,0,1)/(0,1,0)/(1,1,0)/(1,1,1)
43ref comm width=[2-2] count=7 list=(0,0,0)/(0,1,0)/(0,2,1)/(1,1,1)/(1,2,0)/(1,2,1)/(1,3,1)
21ref comm width=[2-2] count=9 list=(0,0,1)/(0,1,0)/(0,1,1)/(0,2,0)/(0,2,1)/(1,1,1)/(1,2,0)/(1,2,1)/(1,3,0)
17ref comm width=[2-2] count=6 list=(0,0,1)/(0,1,0)/(0,1,1)/(0,2,1)/(1,0,0)/(1,1,1)
58ref comm width=[2-2] count=7 list=(0,0,0)/(0,0,1)/(0,1,1)/(1,0,0)/(1,0,1)/(1,1,0)/(1,1,1)
21ref comm width=[2-2] count=6 list=(0,0,0)/(0,1,1)/(1,0,0)/(1,0,1)/(1,1,0)/(1,1,1)
55ref comm width=[2-2] count=7 list=(0,1,0)/(0,2,0)/(0,2,1)/(0,3,1)/(1,0,0)/(1,1,0)/(1,2,1)
95ref comm width=[2-2] count=3 list=(0,0,0)/(0,0,1)/(1,0,1)
4ref comm width=[2-1] count=2 list=(0,0,0)/(1,0,0)
22ref comm width=[2-2] count=5 list=(0,1,0)/(0,1,1)/(0,2,1)/(1,0,0)/(1,1,1)
7ref comm width=[2-2] count=2 list=(0,1,0)/(1,0,1)
158ref comm width=[2-2] count=5 list=(0,0,1)/(0,1,1)/(0,2,0)/(1,1,1)/(1,2,0)
34ref uniq width=[2-2] count=8 list=(0,1,0)/(0,1,1)/(0,2,0)/(0,3,0)/(1,0,1)/(1,1,0)/(1,1,1)/(1,2,1)
189ref comm width=[2-2] count=4 list=(0,0,0)/(0,1,0)/(1,1,1)/(1,2,1)
16ref comm width=[2-2] count=6 list=(0,0,1)/(0,1,1)/(0,2,0)/(1,1,0)/(1,2,0)/(1,2,1)
165ref comm width=[2-2] count=4 list=(0,1,0)/(1,0,1)/(1,1,0)/(1,1,1)
26ref comm width=[2-2] count=6 list=(0,0,0)/(0,1,1)/(1,0,0)/(1,1,0)/(1,1,1)/(1,2,1)
21ref comm width=[2-2] count=6 list=(0,0,0)/(0,1,0)/(0,1,1)/(1,0,0)/(1,1,0)/(1,1,1)
253ref comm width=[2-2] count=5 list=(0,1,0)/(0,1,1)/(0,2,1)/(1,0,0)/(1,1,0)
52ref comm width=[2-2] count=3 list=(0,2,1)/(1,0,0)/(1,1,0)
1.8/count=57
9ref comm width=[2-2] count=7 list=(0,1,0)/(0,2,0)/(0,2,1)/(1,0,0)/(1,1,0)/(1,1,1)/(1,2,1)
37ref comm width=[2-2] count=5 list=(0,0,0)/(0,0,1)/(0,1,0)/(1,0,0)/(1,1,1)
56ref comm width=[2-2] count=4 list=(0,2,0)/(1,0,1)/(1,1,0)/(1,1,1)
35ref comm width=[2-2] count=7 list=(0,1,0)/(0,1,1)/(0,2,0)/(0,2,1)/(1,0,0)/(1,1,0)/(1,2,1)
17ref comm width=[2-2] count=6 list=(0,2,0)/(0,2,1)/(0,3,1)/(1,0,0)/(1,1,0)/(1,1,1)
1546ref comm width=[2-2] count=5 list=(0,1,0)/(0,1,1)/(1,0,0)/(1,1,0)/(1,1,1)
112ref comm width=[2-2] count=3 list=(0,0,1)/(1,0,1)/(1,1,0)
2108ref comm width=[2-2] count=8 list=(0,0,0)/(0,0,1)/(0,1,0)/(0,1,1)/(1,0,0)/(1,0,1)/(1,1,0)/(1,1,1)
1ref uniq width=[2-2] count=7 list=(0,1,0)/(0,1,1)/(0,2,0)/(0,2,1)/(1,0,0)/(1,1,0)/(1,1,1)
25ref comm width=[2-2] count=5 list=(0,0,0)/(0,0,1)/(0,1,0)/(1,1,0)/(1,1,1)
1ref comm width=[2-2] count=6 list=(0,0,1)/(0,1,0)/(0,1,1)/(1,0,0)/(1,1,0)/(1,1,1)
22ref comm width=[2-2] count=5 list=(0,0,1)/(0,1,1)/(0,2,0)/(1,2,0)/(1,2,1)
634ref comm width=[2-2] count=6 list=(0,0,1)/(0,1,1)/(1,0,0)/(1,0,1)/(1,1,0)/(1,1,1)
7ref comm width=[2-2] count=6 list=(0,0,1)/(0,1,0)/(0,1,1)/(1,0,0)/(1,0,1)/(1,1,0)
53ref comm width=[2-2] count=4 list=(0,0,1)/(1,0,1)/(1,1,0)/(1,2,0)
10ref comm width=[2-2] count=8 list=(0,1,1)/(0,2,0)/(0,2,1)/(1,0,1)/(1,1,0)/(1,1,1)/(1,2,0)/(1,2,1)
12ref comm width=[2-2] count=8 list=(0,0,0)/(0,1,0)/(0,1,1)/(0,2,1)/(1,1,1)/(1,2,0)/(1,2,1)/(1,3,1)
9ref comm width=[2-2] count=8 list=(0,0,0)/(0,1,0)/(0,1,1)/(0,2,1)/(1,0,0)/(1,0,1)/(1,1,0)/(1,1,1)
131ref comm width=[2-1] count=4 list=(0,0,0)/(0,0,1)/(0,1,0)/(0,1,1)
16ref comm width=[2-2] count=4 list=(0,0,1)/(0,1,0)/(1,1,0)/(1,1,1)
17ref comm width=[2-2] count=5 list=(0,0,1)/(0,1,1)/(0,2,0)/(1,2,0)/(1,3,0)
25ref comm width=[2-2] count=7 list=(0,0,0)/(0,1,0)/(0,2,1)/(1,1,1)/(1,2,0)/(1,2,1)/(1,3,1)
224ref comm width=[2-2] count=9 list=(0,0,1)/(0,1,0)/(0,1,1)/(0,2,0)/(0,2,1)/(1,1,0)/(1,1,1)/(1,2,0)/(1,2,1)
16ref comm width=[2-2] count=4 list=(0,0,0)/(0,1,0)/(1,2,1)/(1,3,1)
3ref comm width=[2-2] count=9 list=(0,0,1)/(0,1,0)/(0,1,1)/(0,2,0)/(0,2,1)/(1,1,1)/(1,2,0)/(1,2,1)/(1,3,0)
33ref comm width=[2-2] count=6 list=(0,0,1)/(0,1,0)/(0,1,1)/(0,2,1)/(1,0,0)/(1,1,1)
22ref comm width=[2-2] count=7 list=(0,0,0)/(0,0,1)/(0,1,1)/(1,0,0)/(1,0,1)/(1,1,0)/(1,1,1)
17ref comm width=[2-2] count=6 list=(0,2,0)/(0,2,1)/(0,3,1)/(1,0,0)/(1,1,0)/(1,2,1)
116ref comm width=[2-2] count=6 list=(0,0,0)/(0,1,1)/(1,0,0)/(1,0,1)/(1,1,0)/(1,1,1)
514ref comm width=[2-2] count=4 list=(0,0,1)/(0,1,0)/(1,0,1)/(1,1,0)
10ref comm width=[2-2] count=7 list=(0,1,0)/(0,2,0)/(0,2,1)/(0,3,1)/(1,0,0)/(1,1,0)/(1,2,1)
37ref comm width=[2-2] count=3 list=(0,0,0)/(0,0,1)/(1,0,1)
2ref comm width=[2-1] count=2 list=(0,0,0)/(1,0,0)
924ref comm width=[2-2] count=4 list=(0,0,0)/(0,0,1)/(1,0,0)/(1,0,1)
24ref comm width=[2-2] count=5 list=(0,1,0)/(0,1,1)/(0,2,1)/(1,0,0)/(1,1,1)
19ref comm width=[2-2] count=6 list=(0,2,0)/(0,2,1)/(1,0,1)/(1,1,0)/(1,1,1)/(1,2,0)
27ref comm width=[2-2] count=2 list=(0,1,0)/(1,0,1)
78ref comm width=[2-2] count=5 list=(0,0,1)/(0,1,1)/(0,2,0)/(1,1,1)/(1,2,0)
43ref comm width=[1-1] count=2 list=(0,0,0)/(0,1,0)
14ref comm width=[0-0] count=0 list=
60ref comm width=[2-2] count=4 list=(0,0,0)/(0,1,0)/(1,1,1)/(1,2,1)
32ref comm width=[2-2] count=7 list=(0,1,0)/(0,2,1)/(1,0,0)/(1,1,0)/(1,1,1)/(1,2,0)/(1,2,1)
2ref comm width=[2-2] count=8 list=(0,0,0)/(0,1,0)/(0,1,1)/(0,2,1)/(1,1,0)/(1,2,0)/(1,2,1)/(1,3,1)
1605ref comm width=[2-2] count=6 list=(0,1,0)/(0,1,1)/(0,2,1)/(1,0,0)/(1,1,0)/(1,1,1)
1ref comm width=[2-2] count=8 list=(0,1,0)/(0,1,1)/(0,2,0)/(0,2,1)/(1,0,0)/(1,1,0)/(1,2,0)/(1,2,1)
57ref comm width=[2-2] count=10 list=(0,1,0)/(0,1,1)/(0,2,0)/(0,2,1)/(0,3,0)/(1,0,1)/(1,1,0)/(1,1,1)/(1,2,0)/(1,2,1)
1ref comm width=[2-2] count=8 list=(0,1,0)/(0,1,1)/(0,2,0)/(1,0,1)/(1,1,0)/(1,1,1)/(1,2,0)/(1,2,1)
122ref comm width=[2-2] count=4 list=(0,1,0)/(1,0,1)/(1,1,0)/(1,1,1)
29ref comm width=[2-2] count=6 list=(0,0,1)/(0,1,1)/(0,2,0)/(1,1,0)/(1,2,0)/(1,2,1)
2ref comm width=[2-2] count=9 list=(0,0,1)/(0,1,0)/(0,1,1)/(0,2,0)/(0,2,1)/(1,1,0)/(1,2,0)/(1,2,1)/(1,3,0)
9ref comm width=[2-2] count=2 list=(0,0,0)/(1,0,1)
13ref comm width=[2-2] count=6 list=(0,0,0)/(0,1,1)/(1,0,0)/(1,1,0)/(1,1,1)/(1,2,1)
35ref comm width=[2-2] count=6 list=(0,0,0)/(0,1,0)/(0,1,1)/(1,0,0)/(1,1,0)/(1,1,1)
804ref comm width=[2-2] count=4 list=(0,0,0)/(0,1,0)/(1,0,1)/(1,1,1)
124ref comm width=[2-2] count=5 list=(0,1,0)/(0,1,1)/(0,2,1)/(1,0,0)/(1,1,0)
61ref comm width=[2-2] count=3 list=(0,2,1)/(1,0,0)/(1,1,0)
37ref comm width=[2-2] count=3 list=(0,1,1)/(1,0,0)/(1,1,0)
stderr
stage=0 loopCount=0/10000    
stage=0 loopCount=4096/10000    
stage=0 loopCount=8192/10000    
stage=1 loopCount=0/10000    
stage=1 loopCount=4096/10000    
stage=1 loopCount=8192/10000