Мобильная
версия

Тестовое задание - ZOON.ru (часть 1)

Дата: Категория: PHP

Однажды, бороздя просторы интернета в поисках разных интересных статей, я наткнулся на достаточно нетривиальное тестовое задание.


Задание от компании zoon.ru

Собственно само задание находится здесь - zoon.ru/job.php
Дана только одна ссылка и все - никакого описания, ничего подобного.

При первом взгляде я подумал что сайт лежит, задание убрали, и все что угодно.
Но со второго взгляда понял что выполнение квеста началось.

Первое что я увидел перейдя по ссылке JSON ответ

{"success":false,"error":"\"name\" parameter is missing"}

Тут можно даже раскодировать его, и так ясно что не хватает параметра name
дабы не мучать вас подстановкой всех параметров поочереди скажу сразу - требуется 3 параметра 

  • name - ваше имя
  • contact - email
  • cv - ссылка на резюме

Такими нехитрыми манипуляциями мы получаем ссылку - 
http://zoon.ru/job.php?name=rijen&contact=false&cv=false (все параметры тестовые)

Ну чтож, здесь посложнее - требуется декодер.

Запихнув всю строку в json_decode мы получаем объект с 3-мя свойствами

  • description - описание задания
  • task - само задание
  • success - флаг успеха 

Success нас не интересует - так как мы получили задание он равен 1, к task перейдем позже, а пока посмотрим на description.

Вот его полный текст

Вам предстоит реализовать ИНТЕРПРЕТАТОР несложной стек-машины (это не очень сложно, и вряд ли займёт больше часа). 
Стек-машина по очереди исполняет переданный ей набор задач. 
У каждой задачи есть основной стек (на котором лежат входные данные) и выход (выходной поток). 
Выход от каждой предыдущей задачи поступает на стек следующей задаче (причём каждый выходящий элемент кладётся на низ стека; т.е. так, что в каком порядке предыдущая задача выдала данные, в том же порядке они и будут обработаны следующей задачей). 
Первая задача запускается с пустым стеком. 
Узнать выход последней задачи на предлагаемом наборе задач - и есть цель этого таска :) 
Задачи выполняются последовательно. 
Выполнение переходит к следующей задаче, если случится хотя бы одно из двух:

  • $IP не указывает на команду
  • На момент начала исполнения команды, которая читает со стека, стек окажется пуст.
В машине всего 1 регистр: $IP - указатель на текущую команду. 
Изначально указывает на самую первую по порядку команду.
Доступны следующие команды: 
  • [число] добавляет число на вершину стека; $IP++ 
  • DUP снимает элемент с вершины стека и дважды добавляет его на вершину стека (т.е. дублирует элемент на вершине); $IP++ 
  • DEC снимает с вершины стека $p кладёт на вершину стека $p-1; $IP++ 
  • IF снимает с вершины стека $q и затем снимает с вершины $p. если $p==0, то $IP = $IP+$q+3; иначе $IP++ 
  • DROP снимает элемент с вершины стека; $IP++ 
  • G снимает элемент $p с вершины стека и перемещает указатель команд: $IP+=$p-2 
  • MOVE снимает с вершины стека $q и затем $p. далее добавляет элемент $p на $q-ю позицию относительно вершины в стек; $IP++ 
  • CHR снимает число $p с вершины стека и добавляет символ, равный chr($p+2), на вершину стека; $IP++ 
  • OUT снимает элемент с вершины стека и отправляет его в выход; $IP++
  • * снимает с вершины стека $p и $q и кладет на вершину стека $p*$q; $IP++
  • + снимает с вершины стека $p и $q и кладет на вершину стека $p+$q; $IP++
Примеры: 

  • [2, 3] -> добавляет число 2 и 3 на стек. Итог она стеке будет [2, 3] 
  • [123, 23, '+'] -> кладет на стек 123 и 23, и выполняет суммирование. итого на стеке будет [146] 
  • [1, 'G'] -> бесконечный цикл 
  • [77, 23, 78, (...много чисел...), 55, 'DROP', 0, 'G'] -> числа кладутся на стек, потом удаляются со стека, и задача останавливается. 
  • [7, 8, 1, 'MOVE'] -> кладет 2 числа на стек и меняет их местами. на стеке будет 
  • [8, 7]. Пример с последовательным выполнением: 
  • [[3, 2, 1, 'OUT', 'OUT', 'OUT'],['OUT','+','OUT'],['OUT','OUT']]. Первая задача выдаст 1, 2, 3, вторая задача выдаст 1, 5, третья задача выдаст 1, 5. Итоговый выход: [1, 5]


В параметре task json-ответа указан набор задач. 
Его нужно выполнить.


Очень интересное, а главное оригинальное задание.

Решение я опишу в следующей статье, а от себя добавлю - 

1. Данное задание я решил, и меня пригласили на работу в эту компанию, но так как вакансии были не из моего города (вакансии пока есть только в Москве), а по удаленке они не работают я был вынужден отказаться (меня очень заинтересовала компания которая сделала такое тестовое задание)
2. В задаче говорится что по времени у вас есть только час на выполнение - это не правда ;) как мне написали 
"...не знаю когда вы ее решили - нотификации никакой нет..."
в следствии чего можно предположить что время выполнения они тоже не засекают ;)

Теги: #php, #тестовое задание

Ваша оценка:

Рейтинг: 9.5 (Оценок: 3)

Комментарий:

Copyright © DOC_tr 2015-2017 г. Все права защищены
Яндекс.Метрика
Перейти к мобильной версии