let
sign = Table.Buffer(Table.FromRows(List.Transform({"0".."9"}, each {_, "d"}))),
Source = Excel.CurrentWorkbook(){[Name="data"]}[Content],
calcer = Table.AddColumn(Source, "Извлечение", (rec) =>
let
items = Table.FromColumns({List.Reverse(Text.ToList(rec[Текст]))}, {"char"}),
addId = Table.AddIndexColumn(items, "id"),
joined = Table.Sort(Table.Join(addId, {"char"}, sign, {"Column1"}, JoinKind.LeftOuter), "id"),
local = Table.Group(joined, {"Column2"}, {{"store", each _}, {"count", each Table.RowCount(_)}, {"min", each List.Min([id])}}, GroupKind.Local),
lastLess4 = Table.FirstN(local, each if [Column2] = "d" and [count] >= 4 and [min] > 5 then false else true)
in
Text.Trim(Text.Combine(List.Reverse(Table.Combine(lastLess4[store])[char])))
),
calcer1 = Table.AddColumn(calcer, "calcer1", each Table.FromColumns({List.Reverse(Text.ToList([Текст]))}, {"char"})),
calcer2 = Table.AddColumn(calcer1, "calcer2", each Table.AddIndexColumn([calcer1], "id")),
calcer3 = Table.AddColumn(calcer2, "calcer3", each Table.Sort(Table.Join([calcer2], {"char"}, sign, {"Column1"}, JoinKind.LeftOuter), "id")),
calcer4 = Table.AddColumn(calcer3, "calcer4", each Table.Group([calcer3], {"Column2"}, {{"store", each _}, {"count", each Table.RowCount(_)}, {"min", each List.Min([id])}}, GroupKind.Local)),
calcer5 = Table.AddColumn(calcer4, "calcer5", each Table.FirstN([calcer4], each if [Column2] = "d" and [count] >= 4 and [min] > 5 then false else true)),
calcer6 = Table.AddColumn(calcer5, "calcer6", each Table.Combine([calcer5][store])[char]),
calcer7 = Table.AddColumn(calcer6, "calcer7", each Text.Trim(Text.Combine(List.Reverse([calcer6])))),
DetailedForGroupingInCalcer4 = calcer3{0}[calcer3],
GroupedRowsLocal = Table.Group(DetailedForGroupingInCalcer4, {"Column2"}, {{"store", each _}, {"count", each Table.RowCount(_)}, {"min", each List.Min([id])}}, GroupKind.Local)
in
GroupedRowsLocal |