Giter Club home page Giter Club logo

zoon-job's Introduction

zoon-job

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

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

Задачи выполняются последовательно. Выполнение переходит к следующей задаче, если случится хотя бы одно из двух: а) $IP не указывает на команду,
б) на момент начала исполнения команды, которая читает со стека, стек окажется пуст.

В машине всего 1 регистр: $IP: указатель на текущую команду. Изначально указывает на самую первую по порядку команду.

Доступны следующие команды:

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

Примеры:

  • [2, 3] -> добавляет число 2 и 3 на стек. Итог она стеке будет [2, 3]
  • [123, 23, '+'] -> кладет на стек 123 и 23, и выполняет суммирование. итого на стеке будет [146]
  • [-3, 'GO'] -> бесконечный цикл
  • [77, 23, 78, (...много чисел...), 55, 'DROP', -4, 'GO'] -> числа кладутся на стек, потом удаляются со стека, и задача останавливается.
  • [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]

zoon-job's People

Contributors

tyz910 avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.