Ознакомьтесь с нашей политикой обработки персональных данных
23:58 

Spiral matrix traversal PHP

betazold
Vi Veri Veniversum Vivus Vici
  1. <?php
  2.  
  3. $r1 = rand(0, 7);
  4. $r2 = rand(0, 7);
  5. $a = [];
  6. for ($i = 0; $i < $r1; $i++) {
  7. for ($j = 0; $j < $r2; $j++) {
  8. $a[$i][$j] = rand(1, 10);
  9. }
  10. }
  11. $r = [];
  12. for ($i = 0; $i < $r1; $i++) {
  13. $t = [];
  14. for ($j = 0; $j < $r2; $j++) {
  15. $t[] = $a[$i][$j];
  16. }
  17. $r[] = '[' . implode(', ', $t) . ']';
  18. }
  19.  
  20. echo "[\n" . implode(",\n", $r) . "\n];\n\n";
  21.  
  22. //var_dump([$r1, $r2]);
  23. /**$a = [
  24. [6, 10, 9],
  25. [3, 5, 2],
  26. [8, 2, 5],
  27. [4, 1, 8],
  28. [6, 10, 5],
  29. [6, 8, 10]
  30. ];
  31. */
  32.  
  33. /**
  34. $a = [
  35.  [1, 2, 3, 4],
  36.  [14, 15, 16, 5],
  37.  [13, 20, 17, 6],
  38.  [12, 19, 18, 7],
  39.  [11, 10, 9, 8]
  40. ];*/
  41.  
  42. $rows = sizeof($a);
  43. if ($rows) {
  44. $cols = sizeof($a[0]);
  45. } else {
  46. $cols = 0;
  47. }
  48.  
  49. $total = $rows * $cols;
  50.  
  51. $i = $cols;
  52. $d = 'cols';
  53. $j = 0;
  54. $c = 0;
  55. $x = 0;
  56. $y = 0;
  57.  
  58. $dy = 0;
  59. $dx = 1;
  60.  
  61.  
  62. $r = [];
  63. while ($c < $total) {
  64. $r[] = $a[$y][$x];
  65. $j++;
  66. if ($j === $i) {
  67. $j = 0;
  68. list($dx, $dy) = [-$dy, $dx];
  69. if ($d === 'cols') {
  70. $rows--;
  71. $i = $rows;
  72. $d = 'rows';
  73. } else {
  74. $cols--;
  75. $i = $cols;
  76. $d = 'cols';
  77. }
  78. }
  79. $x = $x + $dx; $y = $y + $dy;
  80.  
  81. $c++;
  82. }
  83.  
  84. if (empty($r)) echo "Empty result\n";
  85. echo implode(' ', $r);

@темы: PHP

URL
Комментирование для вас недоступно.
Для того, чтобы получить возможность комментировать, авторизуйтесь:
 
РегистрацияЗабыли пароль?

Small Coder Blog

главная