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

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


Задание от компании 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. В задаче говорится что по времени у вас есть только час на выполнение – это не правда 😉 как мне написали
“…не знаю когда вы ее решили – нотификации никакой нет…”
в следствии чего можно предположить что время выполнения они тоже не засекают 😉

[Всего голосов: 0    Средний: 0/5]

Добавить комментарий

Ваш e-mail не будет опубликован.