H. PiCell

Имя входного файла: picell.in
Имя выходного файла: picell.out
Ограничение по времени: 2 s
Ограничение по памяти: 256 megabytes

Вы являетесь сотрудником отдела разработки компании PiSystems. В целях повышения программной безопасности, отделу было поручено написать свою собственною версию MircoSoft Excell. Данный проект получил кодовое название PiCell. Менеджер проекта распределил обязанности и Вам выпала задача реализации алгоритма изменения формул при копировании из ячейки в ячейку.

PiCell задумывалась как простая система для работы с табличными данными, поэтому было решено, что формулы в этой системе могут представлять из себя лишь простейшие математические выражения, содержащие только ссылки на ячейки, целые числа, знаки +, -, *, / и круглые скобки.

Диапазон ячеек в PiCell ограничен размерами 18277 на 99999 по столбцам и строкам, соответственно. При этом, как и в любом табличном редакторе, столбцы принято нумеровать буквами латинского алфавита. Номер столбца представляет из себя десятичное число, переведенное в символьную систему счисления, где каждая цифра кодируются символами латинского алфавита (0=A, 1=B, ..., 24=Y, 25=Z, 26=AA, 27=AB, ..., 700=ZY, 701=ZZ, 702=AAA, 703=AAB, ..., 18276=ZZY, 18277=ZZZ). Более формально, столбцы от нуля до 25 кодируются одной буквой латинского алфавита, столбцы с номерами от 26 до 701 включительно – двумя буквами, столбцы от 702 до 18277 – тремя буквами.

Ячейка записывается как конкатенация номера столбца и строки. Минимальная ячейка – A1, максимальная – ZZZ99999.

Ссылка на ячейку бывает трех типов:

  1. простая ссылка, которая содержит динамический столбец и строку (при копировании формулы, если координаты конечной ячейки отличаются от начальной на i по столбцам и j по строкам, то номер столбца у ссылки в формуле изменится на i, а номер строки – на j);
  2. полустатичная ссылка, которая содержит динамический столбец и статичную строку или статичный столбец и динамическую строку (при копировании формулы, статичное значение строки или столбца не изменяется);
  3. статичная ссылка, которая содержит статичный столбец и строку (при копировании формулы ячейка вообще не изменяется).

Стоит отметить, что если при копировании формулы из ячейки в ячейку, какая-то из ссылок будет иметь не допустимый ограничениями номер строки или столбца (т.е. номер строки будет меньше 1 или больше 99999, или номер столбца в десятичной системе будет меньше 0 или больше 18277), то этот номер следует округлить до ближайшего допустимого значения. Таким образом, ссылки внутри формулы никогда не могут указывать на область вне диапазона ячеек программы PiCell.

Вам даётся начальная ячейка, конечная ячейка и формула, записанная в начальной ячейке. Требуется разработать алгоритм для PiCell, который произведет замену ссылок внутри формулы, с учётом сдвига из начальной ячейки в конечную, оставив все остальные символы внутри формулы неизменными.

Формат входного файла

В первой строке входного файла находятся координаты начальной ячейки в записанные как AB, где A – это номер столбца записанный с помощью прописных латинских символов, а B – номер строки. Во второй строке входного файла находятся координаты конечной ячейки в записанные как AB. В третьей строке входного файла находится формула из начальной ячейки. Формула всегда не пуста, представляет из себя строку длинной не более 1000 символов, содержащую только символы +, -, *, /, круглые скобки и ссылки на ячейки. В формуле отсутствуют любые пробельные символы.

Простая ссылка на ячейку представляет из себя запись CD, где C – это номер столбца, записанный с помощью прописных латинских символов, а D – номер строки. Полустатичная ссылка на ячейку представляет из себя запись \CD или C\D, где символ \ обозначент статичность столбца или строки. Статичная ссылка на на ячейку представляет из себя запись \C\D$.

Формат выходного файла

В выходной файл выведите вид формулы, получившийся после её переноса из начальной ячейки в конечную.

Пример:

picell.inpicell.out
A1 B3 A1+A2-C4 B3+B4-D6
IP53 DK68 CJ30/\$RS\$20 A45/\$RS\$20
NO33 ZU31 UT27+LE91/\$WY2/(CM\$90) AGZ25+XK89/\$WY1/(OS\$90)
I5 X5 \$I\$2*(\$H5-(\$D1*(B5-(R8)-S\$4+(B\$6)))) \$I\$2*(\$H5-(\$D1*(Q5-(AG8)-AH\$4+(Q\$6))))



Отправить решение



Версия для печати