fork download
  1.  
  2.  
  3. <?php
  4. $array = array(
  5. array(1,1,1,0,0,1,0,0,0,1,0,1,1,0,1,0,0,1,0,0,),
  6. array(0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0,),
  7. array(0,0,0,0,0,1,0,0,0,0,1,1,0,1,1,1,0,1,0,0,),
  8. array(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,),
  9. array(0,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,),
  10. array(0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,1,0,0,1,0,),
  11. array(1,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0,),
  12. array(0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,),
  13. array(0,1,0,1,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,),
  14. array(0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,),
  15. array(0,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,0,),
  16. array(0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,),
  17. array(0,1,0,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,),
  18. array(0,0,0,0,0,1,0,1,0,0,0,1,1,0,1,1,1,0,0,0,),
  19. array(0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,),
  20. array(1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,),
  21. array(0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,),
  22. array(0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,),
  23. array(0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,),
  24. array(0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,),
  25. array(0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,),
  26.  
  27.  
  28.  
  29.  
  30.  
  31. );
  32.  
  33. $start=microtime(true);
  34.  
  35. $shape_nr=1;
  36. $ln_max=count($array);
  37. $cl_max=count($array[0]);
  38. $done=[];
  39.  
  40. //LOOP ALL CELLS, GIVE 1's unique number
  41. for($ln=0;$ln<$ln_max;++$ln){
  42. for($cl=0;$cl<$cl_max;++$cl){
  43. if($array[$ln][$cl]===0)continue;
  44. $array[$ln][$cl] = $shape_nr;
  45. if($cl+1<$cl_max && $array[$ln][$cl+1] ===1){
  46. $array[$ln][$cl+1] = $shape_nr;
  47. }
  48. ++$shape_nr;
  49. }}
  50.  
  51. //DETECT SHAPES
  52. for($ln=0;$ln<$ln_max;++$ln){
  53. for($cl=0;$cl<$cl_max;++$cl){
  54. if($array[$ln][$cl]===0)continue;
  55.  
  56. $shape_nr=$array[$ln][$cl];
  57. if(in_array($shape_nr,$done))continue;
  58. look_around($ln,$cl,$ln_max,$cl_max,$shape_nr,$array);
  59. $done[]=$shape_nr;
  60. }}
  61.  
  62. $res=array();
  63. for($ln=0;$ln<$ln_max;++$ln){
  64. for($cl=0;$cl<$cl_max;++$cl){
  65. if($array[$ln][$cl]===0)continue;
  66. if(!isset($res[$array[$ln][$cl]]))$res[$array[$ln][$cl]]=1;
  67. else $res[$array[$ln][$cl]]++;
  68. }}
  69.  
  70. $end=microtime(true);
  71.  
  72. echo 'TOOK: '.($end-$start)."\n";
  73.  
  74. $max = max($res);
  75. $sh_max = array_search ($max, $res);
  76.  
  77.  
  78. for($ln=0;$ln<$ln_max;++$ln){
  79. for($cl=0;$cl<$cl_max;++$cl){
  80. if($array[$ln][$cl]===0){echo '░';}
  81. else if($array[$ln][$cl]===$sh_max){
  82. echo '▓';
  83. }
  84. else echo '▒';
  85. }
  86. echo "\n";
  87. }
  88.  
  89.  
  90. function look_around($ln,$cl,$ln_max,$cl_max,$nr,&$array){
  91. $mini=mini($ln,$cl,$ln_max,$cl_max);
  92. if($mini===false)return false;
  93.  
  94. $change=array();
  95. foreach($mini as $v){
  96. if($array[$v[0]][$v[1]]===0){continue;}
  97. if($array[$v[0]][$v[1]]!==$nr){
  98. $array[$v[0]][$v[1]]=$nr;
  99.  
  100. look_around($v[0],$v[1],$ln_max,$cl_max,$nr,$array);
  101. }
  102. }
  103. return $nr;
  104. }
  105.  
  106. function mini($ln,$cl,$ln_max,$cl_max){
  107. $look=[];
  108. $mini=[
  109. [-1,-1],
  110. [-1,0],
  111. [-1,1],
  112. [0,-1],
  113. [0,1],
  114. [1,-1],
  115. [1,0],
  116. [1,1]
  117. ];
  118. foreach($mini as $v){
  119. if( $ln + $v[0] >= 0 &&
  120. $ln + $v[0] < $ln_max &&
  121. $cl + $v[1] >= 0 &&
  122. $cl + $v[1] < $cl_max
  123. ){
  124. $look[]=[$ln + $v[0], $cl + $v[1]];
  125. }
  126. }
  127.  
  128. if(count($look)===0){return false;}
  129. return $look;
  130. }
  131.  
  132.  
Success #stdin #stdout 0.02s 23736KB
stdin
Standard input is empty
stdout

TOOK: 0.00054693222045898
▒▒▒░░▒░░░▒░▒▒░▒░░▒░░
░░░░░░░░░▒░░▒▒▒░░░░░
░░░░░▒░░░░▒▒░▒▒▒░▒░░
░░░░░░░░▒░░░░░░░░▒▒▒
░▒▒░░░░▒░░▒░▒░░▓░░░░
░░░▒░░░▒▒░░░░░▓▓░░▒░
▒░░░▒░░░▒░▓▓░░░░▓░▒░
░░░▒░▒░░░░░░▓░░░▓░░░
░▒░▒░░░░░▒░░▓▓░▓░░░░
░▒░░▒░░░░░░░▓░▓▓░▓░░
░░░▒░░▒░░▒░▓░░░░▓▓▓░
░░░░░░░░▒░░░░░▒░░▓░▓
░▒░▒▒▒░░░▒░░░░░▒░░▓░
░░░░░▒░▒░░░▒▒░▒▒▒░░░
░░░░▒░▒░░░▒░░░░░░░░░
▒▒░░▒░░░░░░░░░░▒▒░░▒
░░░▒░░░░░░▒░░▒▒░░░░▒
░░░░▒░░░░░░░▒░░░▒░░░
░░░░░░░░░░░▒░░░░░░░░
░░░░░░▒░░▒░▒░░░░░░░░
░░░░░░░░▒░░▒░░░░░░░░