3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * Тестовое задание для кандидатов на должность PHP-разработчика * * Файл представляет собой шаблон для выполнения тестового задания. Все объявленные * методы должны быть реализованы непосредственно здесь. Создание дополнительных * собственных методов допускается. * * Код должен соотвестсовать стандартам кодирования Zend Framework (http://framework.zend.com/manual/ru/coding-standard.html) * и работать без генерации предупреждений при включенном режиме error_reporting=E_ALL. * * После выполнения всех задач файл должен быть переименован в следующий формат: * <Date>-<LastName>.php * * Например, 20131216-Ivanov.php * * ВНИМАНИЕ! * - На выполнение задания вы не должны тратить более двух-трех дней. * - Файл должен содержать только класс. */ class PetrosoftCandidate { const DIRECTION_TOP = 'top'; const DIRECTION_BOTTOM = 'bottom'; const DIRECTION_LEFT = 'left'; const DIRECTION_RIGHT = 'right'; /** * Задание 1 * * Во входной строке переставить слова в обратном порядке. Например строка * «one two three four» должна быть преобразована в «four three two one». * * @param string $str Входная строка * @return string Строка с переставленными словами */ public function task1($str) { return implode(' ', array_reverse(explode(' ', $str))); } /** * Задание 2 * * В неупорядоченном массиве целых положительных чисел определить положение * и длину наиболее длинной группы, представляющей собой перестановку элементов * отрезка натурального ряда чисел. * * Элементы массива * 6, 8, 5, 7, 18, 21, 20, 16, 19, 17 * * В нем перестановками являются * 6, 8, 5, 7 * и * 18, 21, 20, 16, 19, 17 * * Вторая группа является наибольшей. Индекс первого элемента второй группы равен 4, * длина группы равна 6. Метод должен вернуть * * array(4, 6) * * @param array $list Входной массив * @throws Exception * @return array Массив из двух * элементов. Первый — индекс первого элемента * самой длинной группы, второй — ее длина. */ public function task2($list) { if (!$list) { // для пустого входного массива невозможно рассчитать ответ throw new Exception("Illegal argument: list is empty"); } /* Пусть длина исходного массива N. Будем последовательно искать в нём перестановки длины N, N-1, N-2 и т.д. */ $listLength = count($list); for ($swapLength = $listLength; $swapLength > 0; $swapLength -= 1) { // ищем перестановки длины $swapLength, перебирая подмассивы for ($offset = 0; $offset <= $listLength - $swapLength; ++$offset) { $candidate = array_slice($list, $offset, $swapLength); if ($this->isSwap($candidate)) { // перестановка найдена! return array($offset, $swapLength); } } } } /** * @param $list array * @return bool является ли массив перестановкой */ private function isSwap($list) { sort($list); $previousValue = $list[0] - 1; // начальное значение этой переменной задаём сами foreach ($list as $value) { if ($value != ($previousValue + 1)) { return false; } $previousValue = $value; } return true; } /** * Задание 3 * * Элементы, расположенные на периметре прямоугольной матрицы, отсортировать по часовой * стрелке в порядке возрастания, начиная с элемента, расположенного в верхнем левом * углу матрицы. * * Например, для входной матрицы: * 1 2 3 4 * 5 6 7 8 * 9 0 1 2 * * Должен быть возвращен результат: * 0 1 1 2 * 9 6 7 2 * 8 5 4 3 * * @param array $matrix Прямоугольная матрица * @throws Exception * @return array Матрица с отсортированными по периметру элементами */ public function task3($matrix) { if (count($matrix) == 0 || count($matrix[0]) == 0) { throw new \Exception('Illegal argument: matrix is empty'); } $perimeter = array(); $cellsOnPerimeter = count($matrix[0]) * 2 + count($matrix) * 2 - 4; // количество клеток на периметре $helperMatrix = $this->createHelperMatrix($matrix); $cell = array('row' => 0, 'column' => 0); $counter = 0; do { // собираем числа с периметра $perimeter []= $matrix[$cell['row']][$cell['column']]; $cell = $this->iterateMatrixClockwise($cell, $helperMatrix); $counter += 1; } while ($counter < $cellsOnPerimeter); sort($perimeter); // сбрасываем вспомогательную матрицу перед новой итерацией $helperMatrix = $this->createHelperMatrix($matrix); $cell = array('row' => 0, 'column' => 0); $counter = 0; do { // возвращаем отсортированные числа на периметр $matrix[$cell['row']][$cell['column']] = $perimeter[$counter]; $cell = $this->iterateMatrixClockwise($cell, $helperMatrix); $counter += 1; } while ($counter < $cellsOnPerimeter); return $matrix; } /** * @param $direction string направление движения (константа класса) * @param $cell array * @param $helperMatrix array вспомогательная матрица для отслеживания уже посещённых клеток * @return mixed Если по указанному направлению можно перейти, то возвращается новая клетка, иначе false */ private function tryDirection($direction, $cell, &$helperMatrix) { switch ($direction) { case self::DIRECTION_RIGHT: $cell['column'] += 1; break; case self::DIRECTION_BOTTOM: $cell['row'] += 1; break; case self::DIRECTION_LEFT: $cell['column'] -= 1; break; case self::DIRECTION_TOP: $cell['row'] -= 1; break; } if ($this->cellCorrect($cell, $helperMatrix)) { return $cell; } else { return false; } } /** * @param $previousCell array массив с ключами row и column * @param $helperMatrix array вспомогательная матрица для отслеживания уже посещённых клеток * @return mixed массив с ключами row и column либо false, если обход завершён */ private function iterateMatrixClockwise($previousCell, &$helperMatrix) { // пробуем продвинуться в матрице по всем направлениям по очереди, начиная с приоритетного foreach (array_unique(array($helperMatrix['direction'], self::DIRECTION_RIGHT, self::DIRECTION_BOTTOM, self::DIRECTION_LEFT, self::DIRECTION_TOP)) as $direction) { if ($newCell = $this->tryDirection($direction, $previousCell, $helperMatrix)) { $this->doMoveInHelperMatrix($newCell, $direction, $helperMatrix); return $newCell; } } return false; } /** * @param $cell array массив с ключами row и column * @param $helperMatrix array вспомогательная матрица для отслеживания уже посещённых клеток * @return bool принадлежит ли указанная клетка матрице */ private function cellCorrect($cell, &$helperMatrix) { $row = $cell['row']; $column = $cell['column']; return ($row >= 0) && ($row < $helperMatrix['totalRows']) && ($column >= 0) && ($column < $helperMatrix['totalColumns']) && (!$helperMatrix[$row][$column]); } /** * @param $cell array массив с ключами row и column * @param $direction string направление движения (константа класса) * @param $helperMatrix array вспомогательная матрица для отслеживания уже посещённых клеток */ private function doMoveInHelperMatrix($cell, $direction, &$helperMatrix) { $helperMatrix[$cell['row']][$cell['column']] = true; $helperMatrix['direction'] = $direction; } /** * Создаёт вспомогательную матрицу для отслеживания уже посещённых клеток во время обхода. * false означает, что клетка не посещалась. * Также в этой матрице есть специальный ключи: * 'direction' означает текущее направление движения, 'totalRows' и 'totalColumns' - размеры исходной матрицы * @param $matrix array исходная матрица, для которой нужно создать вспомогательную * @return array вспомогательная матрица, клетка [0, 0] уже помечена как посещённая */ private function createHelperMatrix($matrix) { $totalRows = count($matrix); $totalColumns = count($matrix[0]); $helper = array(); for ($row = 0; $row < $totalRows; ++$row) { $helper []= array_fill(0, $totalColumns, false); } $helper[0][0] = true; /* вся эта группа вспомогательных методов посвящена обходу по часовой стрелке => из начального положения движение идёт направо */ $helper['direction'] = self::DIRECTION_RIGHT; $helper['totalRows'] = count($matrix); $helper['totalColumns'] = count($matrix[0]); return $helper; } /** * Задание 4 * * Сформировать одномерный массив, получающийся при чтении квадратной матрицы по спирали, начиная * с верхнего левого элемента матрицы (против часовой стрелки). * * Например, для входной матрицы: * 1 2 3 4 * 5 6 7 8 * 9 10 11 12 * 13 14 15 16 * * Должен быть возвращен результат: * 1 5 9 13 14 15 16 12 8 4 3 2 6 10 11 7 * * @param array $matrix Входная квадратная матрица * @return array Одномерный массив */ public function task4($matrix) { /* Заметим, что обход матрицы против часовой стрелки аналогичен обходу транспонированной матрицы по часовой стрелке. Поэтому транспонируем исходную матрицу и воспользуемся существующим кодом для задания 3 */ $this->transpose($matrix); $helperMatrix = $this->createHelperMatrix($matrix); $cell = array('row' => 0, 'column' => 0); $elements = array(); do { // собираем числа по спирали $elements []= $matrix[$cell['row']][$cell['column']]; } while ($cell = $this->iterateMatrixClockwise($cell, $helperMatrix)); return $elements; } /** * Транспонирует матрицу * @param $matrix array */ private function transpose(&$matrix) { $totalRows = count($matrix); $totalColumns = count($matrix[0]); for ($row = 0; $row < $totalRows; ++$row) { for ($column = $row + 1; $column < $totalColumns; ++$column) { $temp = $matrix[$row][$column]; $matrix[$row][$column] = $matrix[$column][$row]; $matrix[$column][$row] = $temp; } } } } echo 'zig';
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/u9JP3
function name:  (null)
number of ops:  2
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  367     0  E >   ECHO                                                     'zig'
          1      > RETURN                                                   1

Class PetrosoftCandidate:
Function task1:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/u9JP3
function name:  task1
number of ops:  14
compiled vars:  !0 = $str
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   38     0  E >   RECV                                             !0      
   40     1        INIT_FCALL                                               'implode'
          2        SEND_VAL                                                 '+'
          3        INIT_FCALL                                               'array_reverse'
          4        INIT_FCALL                                               'explode'
          5        SEND_VAL                                                 '+'
          6        SEND_VAR                                                 !0
          7        DO_ICALL                                         $1      
          8        SEND_VAR                                                 $1
          9        DO_ICALL                                         $2      
         10        SEND_VAR                                                 $2
         11        DO_ICALL                                         $3      
         12      > RETURN                                                   $3
   41    13*     > RETURN                                                   null

End of function task1

Function task2:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 3, Position 2 = 7
Branch analysis from position: 3
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 7
1 jumps found. (Code = 42) Position 1 = 31
Branch analysis from position: 31
2 jumps found. (Code = 44) Position 1 = 33, Position 2 = 11
Branch analysis from position: 33
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 11
1 jumps found. (Code = 42) Position 1 = 27
Branch analysis from position: 27
2 jumps found. (Code = 44) Position 1 = 30, Position 2 = 13
Branch analysis from position: 30
2 jumps found. (Code = 44) Position 1 = 33, Position 2 = 11
Branch analysis from position: 33
Branch analysis from position: 11
Branch analysis from position: 13
2 jumps found. (Code = 43) Position 1 = 23, Position 2 = 26
Branch analysis from position: 23
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 26
2 jumps found. (Code = 44) Position 1 = 30, Position 2 = 13
Branch analysis from position: 30
Branch analysis from position: 13
filename:       /in/u9JP3
function name:  task2
number of ops:  34
compiled vars:  !0 = $list, !1 = $listLength, !2 = $swapLength, !3 = $offset, !4 = $candidate
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   70     0  E >   RECV                                             !0      
   73     1        BOOL_NOT                                         ~5      !0
          2      > JMPZ                                                     ~5, ->7
   76     3    >   NEW                                              $6      'Exception'
          4        SEND_VAL_EX                                              'Illegal+argument%3A+list+is+empty'
          5        DO_FCALL                                      0          
          6      > THROW                                         0          $6
   84     7    >   COUNT                                            ~8      !0
          8        ASSIGN                                                   !1, ~8
   85     9        ASSIGN                                                   !2, !1
         10      > JMP                                                      ->31
   88    11    >   ASSIGN                                                   !3, 0
         12      > JMP                                                      ->27
   90    13    >   INIT_FCALL                                               'array_slice'
         14        SEND_VAR                                                 !0
         15        SEND_VAR                                                 !3
         16        SEND_VAR                                                 !2
         17        DO_ICALL                                         $12     
         18        ASSIGN                                                   !4, $12
   92    19        INIT_METHOD_CALL                                         'isSwap'
         20        SEND_VAR_EX                                              !4
         21        DO_FCALL                                      0  $14     
         22      > JMPZ                                                     $14, ->26
   95    23    >   INIT_ARRAY                                       ~15     !3
         24        ADD_ARRAY_ELEMENT                                ~15     !2
         25      > RETURN                                                   ~15
   88    26    >   PRE_INC                                                  !3
         27    >   SUB                                              ~17     !1, !2
         28        IS_SMALLER_OR_EQUAL                                      !3, ~17
         29      > JMPNZ                                                    ~18, ->13
   85    30    >   ASSIGN_OP                                     2          !2, 1
         31    >   IS_SMALLER                                               0, !2
         32      > JMPNZ                                                    ~20, ->11
  102    33    > > RETURN                                                   null

End of function task2

Function isswap:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 8, Position 2 = 16
Branch analysis from position: 8
2 jumps found. (Code = 78) Position 1 = 9, Position 2 = 16
Branch analysis from position: 9
2 jumps found. (Code = 43) Position 1 = 12, Position 2 = 14
Branch analysis from position: 12
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 14
1 jumps found. (Code = 42) Position 1 = 8
Branch analysis from position: 8
Branch analysis from position: 16
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 16
filename:       /in/u9JP3
function name:  isSwap
number of ops:  19
compiled vars:  !0 = $list, !1 = $previousValue, !2 = $value
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  108     0  E >   RECV                                             !0      
  111     1        INIT_FCALL                                               'sort'
          2        SEND_REF                                                 !0
          3        DO_ICALL                                                 
  113     4        FETCH_DIM_R                                      ~4      !0, 0
          5        SUB                                              ~5      ~4, 1
          6        ASSIGN                                                   !1, ~5
  114     7      > FE_RESET_R                                       $7      !0, ->16
          8    > > FE_FETCH_R                                               $7, !2, ->16
  116     9    >   ADD                                              ~8      !1, 1
         10        IS_NOT_EQUAL                                             !2, ~8
         11      > JMPZ                                                     ~9, ->14
  118    12    >   FE_FREE                                                  $7
         13      > RETURN                                                   <false>
  121    14    >   ASSIGN                                                   !1, !2
  114    15      > JMP                                                      ->8
         16    >   FE_FREE                                                  $7
  124    17      > RETURN                                                   <true>
  125    18*     > RETURN                                                   null

End of function isswap

Function task3:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 47) Position 1 = 4, Position 2 = 8
Branch analysis from position: 4
2 jumps found. (Code = 43) Position 1 = 9, Position 2 = 13
Branch analysis from position: 9
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 13
2 jumps found. (Code = 44) Position 1 = 42, Position 2 = 28
Branch analysis from position: 42
2 jumps found. (Code = 44) Position 1 = 65, Position 2 = 51
Branch analysis from position: 65
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 51
Branch analysis from position: 28
Branch analysis from position: 8
filename:       /in/u9JP3
function name:  task3
number of ops:  67
compiled vars:  !0 = $matrix, !1 = $perimeter, !2 = $cellsOnPerimeter, !3 = $helperMatrix, !4 = $cell, !5 = $counter
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  149     0  E >   RECV                                             !0      
  152     1        COUNT                                            ~6      !0
          2        IS_EQUAL                                         ~7      ~6, 0
          3      > JMPNZ_EX                                         ~7      ~7, ->8
          4    >   FETCH_DIM_R                                      ~8      !0, 0
          5        COUNT                                            ~9      ~8
          6        IS_EQUAL                                         ~10     ~9, 0
          7        BOOL                                             ~7      ~10
          8    > > JMPZ                                                     ~7, ->13
  154     9    >   NEW                                              $11     'Exception'
         10        SEND_VAL_EX                                              'Illegal+argument%3A+matrix+is+empty'
         11        DO_FCALL                                      0          
         12      > THROW                                         0          $11
  158    13    >   ASSIGN                                                   !1, <array>
  159    14        FETCH_DIM_R                                      ~14     !0, 0
         15        COUNT                                            ~15     ~14
         16        MUL                                              ~16     ~15, 2
         17        COUNT                                            ~17     !0
         18        MUL                                              ~18     ~17, 2
         19        ADD                                              ~19     ~16, ~18
         20        SUB                                              ~20     ~19, 4
         21        ASSIGN                                                   !2, ~20
  162    22        INIT_METHOD_CALL                                         'createHelperMatrix'
         23        SEND_VAR_EX                                              !0
         24        DO_FCALL                                      0  $22     
         25        ASSIGN                                                   !3, $22
  163    26        ASSIGN                                                   !4, <array>
  164    27        ASSIGN                                                   !5, 0
  168    28    >   FETCH_DIM_R                                      ~27     !4, 'row'
         29        FETCH_DIM_R                                      ~29     !4, 'column'
         30        FETCH_DIM_R                                      ~28     !0, ~27
         31        FETCH_DIM_R                                      ~30     ~28, ~29
         32        ASSIGN_DIM                                               !1
         33        OP_DATA                                                  ~30
  169    34        INIT_METHOD_CALL                                         'iterateMatrixClockwise'
         35        SEND_VAR_EX                                              !4
         36        SEND_VAR_EX                                              !3
         37        DO_FCALL                                      0  $31     
         38        ASSIGN                                                   !4, $31
  170    39        ASSIGN_OP                                     1          !5, 1
  172    40        IS_SMALLER                                               !5, !2
         41      > JMPNZ                                                    ~34, ->28
  174    42    >   INIT_FCALL                                               'sort'
         43        SEND_REF                                                 !1
         44        DO_ICALL                                                 
  177    45        INIT_METHOD_CALL                                         'createHelperMatrix'
         46        SEND_VAR_EX                                              !0
         47        DO_FCALL                                      0  $36     
         48        ASSIGN                                                   !3, $36
  178    49        ASSIGN                                                   !4, <array>
  179    50        ASSIGN                                                   !5, 0
  183    51    >   FETCH_DIM_R                                      ~40     !4, 'row'
         52        FETCH_DIM_R                                      ~42     !4, 'column'
         53        FETCH_DIM_R                                      ~44     !1, !5
         54        FETCH_DIM_W                                      $41     !0, ~40
         55        ASSIGN_DIM                                               $41, ~42
         56        OP_DATA                                                  ~44
  184    57        INIT_METHOD_CALL                                         'iterateMatrixClockwise'
         58        SEND_VAR_EX                                              !4
         59        SEND_VAR_EX                                              !3
         60        DO_FCALL                                      0  $45     
         61        ASSIGN                                                   !4, $45
  185    62        ASSIGN_OP                                     1          !5, 1
  187    63        IS_SMALLER                                               !5, !2
         64      > JMPNZ                                                    ~48, ->51
  189    65    > > RETURN                                                   !0
  191    66*     > RETURN                                                   null

End of function task3

Function trydirection:
Finding entry points
Branch analysis from position: 0
6 jumps found. (Code = 188) Position 1 = 13, Position 2 = 16, Position 3 = 19, Position 4 = 22, Position 5 = 25, Position 6 = 4
Branch analysis from position: 13
1 jumps found. (Code = 42) Position 1 = 25
Branch analysis from position: 25
2 jumps found. (Code = 43) Position 1 = 30, Position 2 = 32
Branch analysis from position: 30
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 32
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 16
1 jumps found. (Code = 42) Position 1 = 25
Branch analysis from position: 25
Branch analysis from position: 19
1 jumps found. (Code = 42) Position 1 = 25
Branch analysis from position: 25
Branch analysis from position: 22
1 jumps found. (Code = 42) Position 1 = 25
Branch analysis from position: 25
Branch analysis from position: 25
Branch analysis from position: 4
2 jumps found. (Code = 44) Position 1 = 6, Position 2 = 13
Branch analysis from position: 6
2 jumps found. (Code = 44) Position 1 = 8, Position 2 = 16
Branch analysis from position: 8
2 jumps found. (Code = 44) Position 1 = 10, Position 2 = 19
Branch analysis from position: 10
2 jumps found. (Code = 44) Position 1 = 12, Position 2 = 22
Branch analysis from position: 12
1 jumps found. (Code = 42) Position 1 = 25
Branch analysis from position: 25
Branch analysis from position: 22
Branch analysis from position: 19
Branch analysis from position: 16
Branch analysis from position: 13
filename:       /in/u9JP3
function name:  tryDirection
number of ops:  34
compiled vars:  !0 = $direction, !1 = $cell, !2 = $helperMatrix
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  199     0  E >   RECV                                             !0      
          1        RECV                                             !1      
          2        RECV                                             !2      
  201     3      > SWITCH_STRING                                            !0, [ 'right':->13, 'bottom':->16, 'left':->19, 'top':->22, ], ->25
          4    >   IS_EQUAL                                                 !0, 'right'
          5      > JMPNZ                                                    ~3, ->13
          6    >   IS_EQUAL                                                 !0, 'bottom'
          7      > JMPNZ                                                    ~3, ->16
          8    >   IS_EQUAL                                                 !0, 'left'
          9      > JMPNZ                                                    ~3, ->19
         10    >   IS_EQUAL                                                 !0, 'top'
         11      > JMPNZ                                                    ~3, ->22
         12    > > JMP                                                      ->25
  204    13    >   ASSIGN_DIM_OP                +=               1          !1, 'column'
         14        OP_DATA                                                  1
  205    15      > JMP                                                      ->25
  208    16    >   ASSIGN_DIM_OP                +=               1          !1, 'row'
         17        OP_DATA                                                  1
  209    18      > JMP                                                      ->25
  212    19    >   ASSIGN_DIM_OP                -=               2          !1, 'column'
         20        OP_DATA                                                  1
  213    21      > JMP                                                      ->25
  216    22    >   ASSIGN_DIM_OP                -=               2          !1, 'row'
         23        OP_DATA                                                  1
  217    24      > JMP                                                      ->25
  221    25    >   INIT_METHOD_CALL                                         'cellCorrect'
         26        SEND_VAR_EX                                              !1
         27        SEND_VAR_EX                                              !2
         28        DO_FCALL                                      0  $8      
         29      > JMPZ                                                     $8, ->32
  222    30    > > RETURN                                                   !1
         31*       JMP                                                      ->33
  224    32    > > RETURN                                                   <false>
  226    33*     > RETURN                                                   null

End of function trydirection

Function iteratematrixclockwise:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 12, Position 2 = 28
Branch analysis from position: 12
2 jumps found. (Code = 78) Position 1 = 13, Position 2 = 28
Branch analysis from position: 13
2 jumps found. (Code = 43) Position 1 = 20, Position 2 = 27
Branch analysis from position: 20
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 27
1 jumps found. (Code = 42) Position 1 = 12
Branch analysis from position: 12
Branch analysis from position: 28
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 28
filename:       /in/u9JP3
function name:  iterateMatrixClockwise
number of ops:  31
compiled vars:  !0 = $previousCell, !1 = $helperMatrix, !2 = $direction, !3 = $newCell
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  233     0  E >   RECV                                             !0      
          1        RECV                                             !1      
  237     2        INIT_FCALL                                               'array_unique'
          3        FETCH_DIM_R                                      ~4      !1, 'direction'
          4        INIT_ARRAY                                       ~5      ~4
          5        ADD_ARRAY_ELEMENT                                ~5      'right'
          6        ADD_ARRAY_ELEMENT                                ~5      'bottom'
          7        ADD_ARRAY_ELEMENT                                ~5      'left'
          8        ADD_ARRAY_ELEMENT                                ~5      'top'
          9        SEND_VAL                                                 ~5
         10        DO_ICALL                                         $6      
         11      > FE_RESET_R                                       $7      $6, ->28
         12    > > FE_FETCH_R                                               $7, !2, ->28
  240    13    >   INIT_METHOD_CALL                                         'tryDirection'
         14        SEND_VAR                                                 !2
         15        SEND_VAR                                                 !0
         16        SEND_REF                                                 !1
         17        DO_FCALL                                      0  $8      
         18        ASSIGN                                           ~9      !3, $8
         19      > JMPZ                                                     ~9, ->27
  241    20    >   INIT_METHOD_CALL                                         'doMoveInHelperMatrix'
         21        SEND_VAR_EX                                              !3
         22        SEND_VAR_EX                                              !2
         23        SEND_VAR_EX                                              !1
         24        DO_FCALL                                      0          
  242    25        FE_FREE                                                  $7
         26      > RETURN                                                   !3
  237    27    > > JMP                                                      ->12
         28    >   FE_FREE                                                  $7
  246    29      > RETURN                                                   <false>
  249    30*     > RETURN                                                   null

End of function iteratematrixclockwise

Function cellcorrect:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 46) Position 1 = 8, Position 2 = 11
Branch analysis from position: 8
2 jumps found. (Code = 46) Position 1 = 12, Position 2 = 14
Branch analysis from position: 12
2 jumps found. (Code = 46) Position 1 = 15, Position 2 = 18
Branch analysis from position: 15
2 jumps found. (Code = 46) Position 1 = 19, Position 2 = 23
Branch analysis from position: 19
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 23
Branch analysis from position: 18
Branch analysis from position: 14
Branch analysis from position: 11
filename:       /in/u9JP3
function name:  cellCorrect
number of ops:  25
compiled vars:  !0 = $cell, !1 = $helperMatrix, !2 = $row, !3 = $column
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  256     0  E >   RECV                                             !0      
          1        RECV                                             !1      
  258     2        FETCH_DIM_R                                      ~4      !0, 'row'
          3        ASSIGN                                                   !2, ~4
  259     4        FETCH_DIM_R                                      ~6      !0, 'column'
          5        ASSIGN                                                   !3, ~6
  261     6        IS_SMALLER_OR_EQUAL                              ~8      0, !2
          7      > JMPZ_EX                                          ~8      ~8, ->11
          8    >   FETCH_DIM_R                                      ~9      !1, 'totalRows'
          9        IS_SMALLER                                       ~10     !2, ~9
         10        BOOL                                             ~8      ~10
         11    > > JMPZ_EX                                          ~8      ~8, ->14
         12    >   IS_SMALLER_OR_EQUAL                              ~11     0, !3
         13        BOOL                                             ~8      ~11
         14    > > JMPZ_EX                                          ~8      ~8, ->18
  262    15    >   FETCH_DIM_R                                      ~12     !1, 'totalColumns'
         16        IS_SMALLER                                       ~13     !3, ~12
         17        BOOL                                             ~8      ~13
         18    > > JMPZ_EX                                          ~8      ~8, ->23
         19    >   FETCH_DIM_R                                      ~14     !1, !2
         20        FETCH_DIM_R                                      ~15     ~14, !3
         21        BOOL_NOT                                         ~16     ~15
         22        BOOL                                             ~8      ~16
         23    > > RETURN                                                   ~8
  263    24*     > RETURN                                                   null

End of function cellcorrect

Function domoveinhelpermatrix:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/u9JP3
function name:  doMoveInHelperMatrix
number of ops:  11
compiled vars:  !0 = $cell, !1 = $direction, !2 = $helperMatrix
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  270     0  E >   RECV                                             !0      
          1        RECV                                             !1      
          2        RECV                                             !2      
  272     3        FETCH_DIM_R                                      ~3      !0, 'row'
          4        FETCH_DIM_R                                      ~5      !0, 'column'
          5        FETCH_DIM_W                                      $4      !2, ~3
          6        ASSIGN_DIM                                               $4, ~5
          7        OP_DATA                                                  <true>
  273     8        ASSIGN_DIM                                               !2, 'direction'
          9        OP_DATA                                                  !1
  274    10      > RETURN                                                   null

End of function domoveinhelpermatrix

Function createhelpermatrix:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 42) Position 1 = 17
Branch analysis from position: 17
2 jumps found. (Code = 44) Position 1 = 19, Position 2 = 9
Branch analysis from position: 19
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 9
2 jumps found. (Code = 44) Position 1 = 19, Position 2 = 9
Branch analysis from position: 19
Branch analysis from position: 9
filename:       /in/u9JP3
function name:  createHelperMatrix
number of ops:  33
compiled vars:  !0 = $matrix, !1 = $totalRows, !2 = $totalColumns, !3 = $helper, !4 = $row
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  284     0  E >   RECV                                             !0      
  286     1        COUNT                                            ~5      !0
          2        ASSIGN                                                   !1, ~5
  287     3        FETCH_DIM_R                                      ~7      !0, 0
          4        COUNT                                            ~8      ~7
          5        ASSIGN                                                   !2, ~8
  289     6        ASSIGN                                                   !3, <array>
  290     7        ASSIGN                                                   !4, 0
          8      > JMP                                                      ->17
  292     9    >   INIT_FCALL                                               'array_fill'
         10        SEND_VAL                                                 0
         11        SEND_VAR                                                 !2
         12        SEND_VAL                                                 <false>
         13        DO_ICALL                                         $13     
         14        ASSIGN_DIM                                               !3
         15        OP_DATA                                                  $13
  290    16        PRE_INC                                                  !4
         17    >   IS_SMALLER                                               !4, !1
         18      > JMPNZ                                                    ~15, ->9
  295    19    >   FETCH_DIM_W                                      $16     !3, 0
         20        ASSIGN_DIM                                               $16, 0
         21        OP_DATA                                                  <true>
  298    22        ASSIGN_DIM                                               !3, 'direction'
         23        OP_DATA                                                  'right'
  300    24        COUNT                                            ~20     !0
         25        ASSIGN_DIM                                               !3, 'totalRows'
         26        OP_DATA                                                  ~20
  301    27        FETCH_DIM_R                                      ~22     !0, 0
         28        COUNT                                            ~23     ~22
         29        ASSIGN_DIM                                               !3, 'totalColumns'
         30        OP_DATA                                                  ~23
  303    31      > RETURN                                                   !3
  304    32*     > RETURN                                                   null

End of function createhelpermatrix

Function task4:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 44) Position 1 = 22, Position 2 = 10
Branch analysis from position: 22
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 10
filename:       /in/u9JP3
function name:  task4
number of ops:  24
compiled vars:  !0 = $matrix, !1 = $helperMatrix, !2 = $cell, !3 = $elements
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  325     0  E >   RECV                                             !0      
  329     1        INIT_METHOD_CALL                                         'transpose'
          2        SEND_VAR_EX                                              !0
          3        DO_FCALL                                      0          
  331     4        INIT_METHOD_CALL                                         'createHelperMatrix'
          5        SEND_VAR                                        

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
169.17 ms | 1428 KiB | 27 Q