В этом задании вы собираетесь написать переводчика для простого языка, который я составил. Язык основан на одном аккумуляторе A, длина которого составляет ровно один байт. В начале программы A = 0. Это языковые инструкции:
!
: Инверсия
Эта инструкция просто инвертирует каждый бит аккумулятора. Каждый ноль становится единым целым и каждый становится нулем. Просто!
>
: Сдвиг вправо
Эта инструкция сдвигает каждый бит в A на одно место вправо. Самый левый бит становится нулем, а самый правый бит сбрасывается.
<
: Сдвиг влево
Эта инструкция сдвигает каждый бит в A на одно место влево. Самый правый бит становится нулем, а самый левый бит отбрасывается.
@
: Поменять местами
Эта инструкция меняет старшие четыре бита А на нижние четыре бита. Например, если A есть 01101010
и вы выполняете @
, A будет 10100110
:
____________________
| |
0110 1010 1010 0110
|_______|
Вот и все инструкции! Просто, правда?
правила
- Ваша программа должна принять ввод один раз в начале. Это будет строка кода. Это не интерактивный переводчик! Вы можете принять ввод только один раз и не нужно возвращаться к началу, как только эта строка была выполнена.
- Ваша программа должна оценить указанный вклад. Каждый персонаж, который не упомянут выше, игнорируется.
- Ваша программа должна затем распечатать окончательное значение аккумулятора в десятичном виде.
- Применяются обычные правила для действительных языков программирования.
- Стандартные лазейки запрещены.
- Это код-гольф , выигрывает наименьшее количество байтов.
Вот несколько небольших программ для проверки ваших работ. Перед стрелкой - код, после - ожидаемый результат:
!
->255
!>>
->63
!<@
->239
!nop!&6*!
->255
Наслаждайтесь!
! -> 255
что мы будем использовать 8 бит на байт здесь? Вопрос не явный.