В первой строке вводятся два шаблона через пробел
*abb*c? ab?cd
требуется вывести любую минимальную подcтроку - решение.
* - любое количество символов или пусто
? - любой один символ
Длина одного шаблона - до 100 символов
Если в ответе возникла ситуация что надо вывести ? то выводить символ 'a'
Если решений нет - то 'Impossible'
Пример 1:
Ввод:
a? ?b
Вывод:
ab
Пример 2:
Ввод:
a?f*b ab?gtb
Вывод:
abfgtb
Как решить не используя Units & Procedure.
http://homepages.compuserve.de/chasluebeck/practic_info8.htm Осталось только процедуры засунуть непосредственно в программу.
А можно по их алгоритму и без процедур написать.
Вот что я наваял, надо проверять ...
Эти 2 теста прошла :
uses crt;
const
letters = ['a'..'z'];
a = 'a?f*b';
b = 'ab?gtb';
function GetResult: String;
var
i, j: Integer;
result: String;
begin
result := '';
i := 1;
j := 1;
while (i <= Length(a)) and (j <= length(b)) do begin
if (a[i] in letters) then begin
if ((b[j] in letters) and (a[i] = b[j])) or (b[j] = '?') then begin
result := result + a[i];
inc(i);
inc(j);
end
else if (b[j] = '*') then begin
while (a[i] in letters) and (i <= length(a)) do begin
result := result + a[i];
inc(i);
end;
inc(j);
end
else begin
inc(i);
inc(j);
end;
end // a in letters
else begin
if (a[i] = '?') and (b[j] in letters) then begin
result := result + b[j];
inc(i);
inc(j);
end
else begin
while (b[j] in letters) and (j <= length(b)) do begin
result := result + b[j];
inc(j);
end;
inc(i);
end;
end; // a not in letters
end;
GetResult := result;
end;
begin
clrscr;
writeln(GetResult);
readln;
end.