Дмитрий Мязин: Вопрос в плоскости оптимизации - БД сервер будет быстрее отыскивать в таблице из двух полей или в таблице из 20 полей. Надеюсь понятно пояснил
Вот что у меня получилось - Вам предстоит реализовать ИНТЕРПРЕТАТОР несложной стек-машины (это не очень сложно, и вряд ли займёт больше часа). Стек-машина по очереди исполняет переданный ей набор задач. У каждой задачи есть основной стек (на котором лежат входные данные) и выход (выходной поток).\nВыход от каждой предыдущей задачи поступает на стек следующей задаче (причём каждый выходящий элемент кладётся на низ стека; т.е. так, что в каком порядке предыдущая задача выдала данные, в том же порядке они и будут обработаны следующей задачей). Первая задача запускается с пустым стеком. Узнать выход последней задачи на предлагаемом наборе задач - и есть цель этого таска :)\nЗадачи выполняются последовательно. Выполнение переходит к следующей задаче, если случится хотя бы одно из двух: а) $IP не указывает на команду, б) на момент начала исполнения команды, которая читает со стека, стек окажется пуст.\n\nВ машине всего 1 регистр: $IP: указатель на текущую команду. Изначально указывает на самую первую по порядку команду.\n\nДоступны следующие команды:\n[число] добавляет число на вершину стека; $IP++\nDUP снимает элемент с вершины стека и дважды добавляет его на вершину стека (т.е. дублирует элемент на вершине); $IP++\nDEC снимает с вершины стека $p кладёт на вершину стека $p-1; $IP++\nIF снимает с вершины стека $q и затем снимает с вершины $p. если $p==0, то $IP = $IP+$q-2; иначе $IP++\nDROP снимает элемент с вершины стека; $IP++\nGOTO снимает элемент $p с вершины стека и перемещает указатель команд: $IP+=$p+2\nMOVE снимает с вершины стека $q и затем $p. далее добавляет элемент $p на $q-ю позицию относительно вершины в стек; $IP++\nCHR снимает число $p с вершины стека и добавляет символ, равный chr($p), на вершину стека; $IP++\nOUT снимает элемент с вершины стека и отправляет его в выход; $IP++\n* снимает с вершины стека $p и $q и кладет на вершину стека $p*$q; $IP++\n+ снимает с вершины стека $p и $q и кладет на вершину стека $p+$q; $IP++\n\nПримеры:\n[2, 3] -> добавляет число 2 и 3 на стек. Итог она стеке будет [2, 3]\n[123, 23, '+'] -> кладет на стек 123 и 23, и выполняет суммирование. итого на стеке будет [146]\n[-3, 'GOTO'] -> бесконечный цикл\n[77, 23, 78, (...много чисел...), 55, 'DROP', -4, 'GOTO'] -> числа кладутся на стек, потом удаляются со стека, и задача останавливается.\n[7, 8, 1, 'MOVE'] -> кладет 2 числа на стек и меняет их местами. на стеке будет [8, 7].\nПример с последовательным выполнением: [[3, 2, 1, 'OUT', 'OUT', 'OUT'],['OUT','+','OUT'],['OUT','OUT']]. Первая задача выдаст 1, 2, 3, вторая задача выдаст 1, 5, третяь задача выдаст 1, 5. Итоговый выход: [1, 5]\n\nВ параметре task json-ответа указан набор задач. Его нужно выполнить.\n