fork download
  1. <?php
  2.  
  3. // your code goes here
  4.  
  5. $arr = array( '1' => array('0','0','0','1', '1', '1','1', '1', '1', '1','1','1','1', '1', '1','1', '1', '1', '0', '0'),
  6. '2' => array('1','1','1','1', '1', '1','1', '1', '1', '1','1','1','1', '1', '1','1', '1', '1', '1', '1'),
  7. '3' => array('0','1','1','1', '1', '1','1', '1', '1', '1','1','1','1', '1', '1','1', '1', '1', '0', '0'),
  8. '4' => array('1','0','1','1', '1', '1','0', '0', '0', '0', '0', '0', '0', '1', '1','1', '1', '1', '1', '1'),
  9. '5' => array('1','1','1','1', '1', '1','0', '0', '0', '0','1','1','1', '1', '1','1', '1', '1', '1', '1'),
  10. '6' => array('1','1','1','1', '1', '1','0', '0', '0', '0','1','1','1', '1', '1','1', '1', '1', '1', '1'),
  11. '7' => array('1','1','1','1', '1', '1','0', '0', '0', '0','0','1','1', '1', '1','1', '1', '1', '1', '1'),
  12. '8' => array('1','1','1','1', '1', '1','0', '0', '0', '0','0', '0', '0', '0', '1','1', '1', '1', '1', '1'),
  13. '9' => array('1','1','1','0', '0', '0', '0', '1', '1', '1','0', '0', '0', '0', '1','1', '1', '1', '1', '1'),
  14. '10' => array('1','1','1','0', '0', '0', '0', '1', '1', '1','0', '0', '0', '0', '1','1', '1', '0', '1', '1'),
  15. '11' => array('1','1','0', '0', '0', '0','1', '1', '1', '1','0', '0', '0', '0', '1','1', '1', '0', '1', '1'),
  16. '12' => array('1','1','1','0', '0', '0', '0', '1', '1', '1','0', '0', '0', '0', '1','1', '1', '0', '1', '1'),
  17. '13' => array('1','1','1','0', '0', '0', '0', '1', '1', '1','0', '0', '0', '0', '1','1', '1', '0', '1', '1'),
  18. '14' => array('1','1','1','0', '0', '0', '0', '1', '1', '0', '0', '0', '0', '1', '1','1', '1', '0', '1', '1'),
  19. '15' => array('1','1','1','0', '0', '0', '0', '1', '0', '0', '0', '0','1', '1', '1','1', '1', '0', '1', '1'),
  20. '16' => array('1','1','1','1', '0', '0', '0', '0', '0', '0', '0','1','1', '1', '1','1', '1', '0', '1', '1'),
  21. '17' => array('1','1','1','1', '1', '1','1', '1', '1', '1','1','1','1', '1', '1','1', '1', '0', '1', '1'),
  22. '18' => array('1','1','1','1', '1', '1','1', '1', '1', '1','1','1','1', '1', '1','1', '1', '0', '1', '1'),
  23. '19' => array('1','1','1','1', '1', '1','1', '1', '1', '1','1','1','1', '1', '1','1', '1', '0', '1', '1'),
  24. '20' => array('0','1','0','1', '1', '1','1', '1', '1', '1','1','1','1', '1', '1','1', '1', '1', '0', '0'));
  25.  
  26. echo '<pre>';
  27. echo "Before:\n\n";
  28. echo implode(
  29. "\n",
  30. function ($a) { return implode('', $a); },
  31. $arr
  32. )
  33. );
  34.  
  35. $arr2=$arr;
  36. echo '<br><br>';
  37. foreach ($arr as $i => $a) {
  38. foreach ($a as $j => $v) {
  39.  
  40. if ($v !== '0') {
  41. continue;
  42. }
  43. // поиск граничных, он обязателен для всех последующих, если не нужно его закрашивать, то сделать $arr2[$i][$j] = '0';
  44. if (!array_key_exists($i-1, $arr)||!array_key_exists($j+1, $a) || !array_key_exists($i+1, $arr) || !array_key_exists($j-1, $a)){
  45. // $arr2[$i][$j] = 'X'; //центр
  46. $arr2[$i][$j] = '0'; // раскоментировать, если не нужно закрашивать
  47. }
  48. // поиск одиночных, он не обязателен для контура
  49. elseif ($arr[$i-1][$j] =='1' AND $arr[$i][$j+1] == '1' AND $arr[$i+1][$j] =='1' AND $arr[$i][$j-1] =='1'){
  50. $arr2[$i][$j] = 'X'; //центр
  51. }
  52.  
  53. // поиск контура, закрасит и одиночные
  54. elseif ($arr[$i-1][$j] =='1' || $arr[$i][$j+1] == '1' || $arr[$i+1][$j] =='1' || $arr[$i][$j-1] =='1'){
  55. $arr2[$i][$j] = 'X'; //центр
  56. }
  57. // поиск только внутренних, которые не граничат с 1
  58. elseif ($arr[$i-1][$j] =='0' AND $arr[$i][$j+1] == '0' AND $arr[$i+1][$j] =='0' AND $arr[$i][$j-1] =='0'){
  59. // $arr2[$i][$j] = 'X'; //центр
  60. }
  61.  
  62. }
  63. }
  64. unset($a);
  65.  
  66. //$arr=array_replace($arr,$new);
  67. echo
  68. "\n\nAfter:\n\n",
  69. "\n",
  70. function ($a) { return implode('', $a); },
  71. $arr2
  72. )
  73. );
Success #stdin #stdout 0.02s 24728KB
stdin
Standard input is empty
stdout
<pre>Before:

00011111111111111100
11111111111111111111
01111111111111111100
10111100000001111111
11111100001111111111
11111100001111111111
11111100000111111111
11111100000000111111
11100001110000111111
11100001110000111011
11000011110000111011
11100001110000111011
11100001110000111011
11100001100001111011
11100001000011111011
11110000000111111011
11111111111111111011
11111111111111111011
11111111111111111011
01011111111111111100<br><br>

After:

00011111111111111100
11111111111111111111
011111111111111111X0
1X1111XXXXXXX1111111
111111X00X1111111111
111111X00X1111111111
111111X000X111111111
111111XXXX0XXX111111
111XXXX111X00X111111
111X00X111X00X111X11
11X00X1111X00X111X11
111X00X111X00X111X11
111X00X111X00X111X11
111X00X11X00X1111X11
111X00X1X00X11111X11
1111XXXXXXX111111X11
11111111111111111X11
11111111111111111X11
11111111111111111X11
01011111111111111100