22 lines
760 B
ObjectPascal
22 lines
760 B
ObjectPascal
function CommonPrefix(arrs: array of array of string): array of string;
|
|
begin
|
|
var min: integer := arrs.Min(a -> a.Length);
|
|
// транспонируем эту часть
|
|
var at := ArrGen(min, j -> ArrGen(arrs.Length, i -> arrs[i][j]));
|
|
Result := at.TakeWhile(x -> x.Skip(1).All(y -> y = x.First)).Select(a -> a[0]).ToArray
|
|
end;
|
|
|
|
function CommonDirectoryPath(paths: array of string; sep: char := '/'): string;
|
|
begin
|
|
var arrs := paths.Select(a -> a.Split(sep)).ToArray;
|
|
Result := CommonPrefix(arrs).JoinToString(sep);
|
|
end;
|
|
|
|
begin
|
|
//CommonPrefix(||'ww','ee'|,|'ww','ee','hh'|,|'ww','ee','tt'||).Print
|
|
print(CommonDirectoryPath(|
|
|
'/home/user1/tmp/coverage/test',
|
|
'/home/user1/tmp/covert/operator',
|
|
'/home/user1/tmp/coven/members'|))
|
|
end.
|