Расшифровка данных EDSAC
Первый в мире полноразмерный электронный цифровой компьютер с хранимой программой назывался EDSAC (Electronic Delay Storage Automatic Calculator). EDSAC использовал набор команд на основе аккумулятора, работал с 17-битными словами (и 35-битными двойными словами) и применял 5-битный код телетайпа для ввода и вывода данных.
Программирование на EDSAC осуществлялось с помощью простого ассемблерного языка: однобуквенный код операции, за которым следовал беззнаковый десятичный адрес, и буква "F" (для полного слова) или "D" (для двойного слова). Например, инструкция "A 128 F" означала "добавить полное слово из ячейки 128 к аккумулятору", и она преобразовывалась в 17-битное двоичное значение 11100000100000000, состоящее из 5-битного кода операции (11100="add"), 11-битного операнда (00010000000 = 128) и одного бита 0, обозначающего операцию с полным словом (бит 1 указывал бы на операцию с двойным словом).
Хотя арифметика на EDSAC была фиксированной точкой с двоичным дополнением, это не была простая целочисленная арифметика, как на современных компьютерах. Аппаратное обеспечение EDSAC предполагало наличие двоичной точки между самым левым битом и следующим за ним. Таким образом, аппаратное обеспечение могло обрабатывать только значения в диапазоне от -1.0 до 1.0. Например:
Наибольшее возможное положительное значение было:
01111111111111111 = 0.9999847412109375
и наименьшее возможное положительное значение было:
00000000000000001 = 2^{-16} = 0.0000152587890625
(Это также является приращением между последовательными значениями на EDSAC).
Интересно, что код операции для сложения (11100) совпадал с кодом телетайпа для буквы "A". Код операции для вычитания совпадал с кодом телетайпа для "S" (01100), и так далее. Это упрощало программирование для ассемблера, который состоял всего из 31 инструкции. Алфавит телетайпа EDSAC был "PQWERTYUIOJ#SZK*?F@D!HNMLXGABCV" (где "P"=00000, "Q"=00001, и так далее, до "V"=11111).
К сожалению, ассемблер EDSAC не имел специальных директив для значений данных. Однако, программист EDSAC мог использовать обычные инструкции для этого. Например, чтобы зарезервировать место для константы 3/4 (представленной как 01100000000000000), использовалась инструкция "S O F", а для 1/3 (приблизительно представленной как 00101010101010101) — "T 682 D", и так далее.
Ваша задача — написать программу, которая будет переводить инструкции EDSAC в соответствующие десятичные дроби.
Входные данные
Первая строка входных данных содержит одно целое число P (1 ≤ P ≤ 1000), которое указывает количество наборов данных. Каждый набор данных представлен одной строкой, содержащей N (номер набора данных), за которым следует пробел, затем инструкция EDSAC в формате: c d s, где c — это один символ из алфавита EDSAC, d — это беззнаковое десятичное число (0 ≤ d < 2^11), а s — это либо 'D', либо 'F'.
Выходные данные
Для каждого набора данных выведите одну строку. Она должна содержать номер набора данных (N), за которым следует пробел, затем точная десятичная дробь, представленная инструкцией EDSAC, включая знак минус для отрицательных значений. Формат десятичной дроби: sb.ddd..., где s — это необязательный знак минус, b — это либо 1, либо 0, а d — это любая десятичная цифра (0-9). Должно быть как минимум 1 и не более 16 цифр после десятичной точки. Конечные нули в дроби должны быть удалены.