ЛР2. Внутренняя структура строк

Задание

При решении задач запрещается использовать любые строковые операции и функции (в том числе - сравнение строк), если не сказано иное.
  1. (40) Даны строки S1 и S2. Разработать программу сравнения двух строк по маске. Маской является символ *, который может встретиться в строке S2 один раз. Символ * означает, что в указанной позиции может быть произвольное количество (от 0) любых символов.

    Например, строки S1=1234567 и S2=123*7 равны по маске, а строки S1=ABCD и S2=*BС - неравны.

    Разработать решения для всех комбинаций ShortString и AnsiString. Для определения длины ShortString использовать нулевой символ, для AnsiString - следующую конструкцию: pInteger(s)[-2], где s - переменная AnsiString.

  2. (40+20) Разработать процедуру для "шахматной" вставки одной строки в другую строку. Создать перегруженные процедуры для всех комбинаций ShortString и AnsiString. Для определения и установки длины ShortString использовать нулевой символ, для AnsiString - функции length и setlength.
    procedure ChessInsert(const firstStr:string1; var secondStr:string2);
    firstStr: вставляемая строка
    secondStr: целевая строка
    string1 и string2: одна из комбинаций ShortString и AnsiString
    
    
    Пример:
    ПрограммаРезультат работы
    var s1:ShortString='12345';
        s2:AnsiString;
    begin
     s2:='testing';
     writeln(s1);
     writeln(s2);
     ChessInsert(s1,s2);
     writeln(s2);
    end.
    
    12345
    testing
    t1e2s3t4i5ng