Продолжайте работу в том же проекте brainfuck.
Изучите класс Brainfuck.cs, в частности то, как он использует реализованный ранее класс VirtualMachine.
В классе BrainfuckBasicCommands реализуйте метод, регистрирующий следующие простые команды в виртуальную машину:
Символ | Значение |
---|---|
. | Вывести байт памяти, на который указывает указатель, преобразовав в символ согласно ASCII |
+ | Увеличить байт памяти, на который указывает указатель |
— | Уменьшить байт памяти, на который указывает указатель |
, | Ввести символ и сохранить его ASCII-код в байт памяти, на который указывает указатель |
> | Сдвинуть указатель памяти вправо на 1 байт |
< | Сдвинуть указатель памяти влево на 1 байт |
A-Z, a-z, 0-9 | сохранить ASCII-код этого символа в байт памяти, на который указывает указатель |
Например, программа ++>+++.<.
выводит два символа с ASCII кодами 2 и 3, а память после выполнения команды будет выглядеть так [2, 3, 0, 0, … 0].
Для ввода и вывода используйте переданные в метод Run функции Func<int> read
и Action<char> write
.
Тут read
по аналогии с Console.Read
возвращает либо код введенного символа, либо -1, если ввод закончился. Считайте, что на вход будут подаваться только символы с кодами 0..255 — они точно помещаются в один байт.
Детали реализации инструкций восстановите по тестам в классе BrainfuckBasicCommandsTests. Сделайте так, чтобы все тесты в этом файле проходили.
1 2 3 4 5 6 7 |
// Вставьте сюда финальное содержимое файла BrainfuckBasicCommands.cs using System; using System.Collections.Generic; using System.Linq; namespace func.brainfuck { |
Стоимость решения этой задачи всего 100 рублей, закажи решения у меня 🙂