Д
Для тех, кто в танке
@pbi_pq_from_tank3.8K подп.
4.2Kпросмотров
20 октября 2025 г.
Score: 4.6K
Магия List.Zip или свёртка числовой последовательности #АнатомияФункций – List.Zip Всем привет! В чат подкинули задачку по превращению текста вот такой последовательности: "1,2,4,5,7,10,12,22,23,24,25" вот в такую: "1,2,4,5,7,10,12,22...25" Обратная задача решается элементарно, но вот прямая… Родился вот такой вариант: f=(txt)=>[ a = List.Buffer(List.Transform(Text.Split(txt,","),Number.From)), b = List.Zip({{null}&List.RemoveLastN(a),a,List.Skip(a)}), c = List.Buffer(List.Transform(b,(x)=>if x{2}-x{0}=2 then "..." else Text.From(x{1}))), d= Text.Replace(Text.Combine(List.Transform(List.Zip({c,List.Skip(c)}),(x)=>if x{0}=x{1} then null else x{0}),","),",...,","...") ][d] Потом был примотан аккумулятор: f=(txt)=>[ g=(s,c)=>s&(if c{2}-c{0}=2 then "" else Text.From(c{1})&(if c{3}-c{1}=2 then "..." else if c{2}=null then "" else ",")), a = List.Buffer(List.Transform(Text.Split(txt,","),Number.From)), b = List.Zip({{null}&List.RemoveLastN(a),a,List.Skip(a),List.Skip(a,2)}), c = List.Accumulate(b,"",g) ][c] Потом и без аккумулятора оказалось неплохо: f=(txt)=>[ g=(x)=> if x{2}-x{0}=2 then "" else x{4}& (if x{3}-x{1}=2 then "..." else if x{2}=null then "" else ","), a = List.Buffer(Text.Split(txt,",")), b = List.Buffer(List.Transform(a,Number.From)), c = List.Zip({{null}&List.RemoveLastN(b),b,List.Skip(b),List.Skip(b,2),a}), d = Text.Combine(List.Transform(c,g))][d] Особенно если упаковать в IIFE: f=(txt)=>((a)=>((b)=>Text.Combine(List.Transform(List.Zip({{null}&List.RemoveLastN(b),b,List.Skip(b),List.Skip(b,2),a}),(x)=>if x{2}-x{0}=2 then "" else x{4}& (if x{3}-x{1}=2 then "..." else if x{2}=null then "" else ","))))(List.Buffer(List.Transform(a,Number.From))))(List.Buffer(Text.Split(txt,","))) Последний вариант, разумеется, самый шустрый ))) Детальный разбор смотрим на ютубе, рутубе, ну а исходники, как всегда, давно лежат на спонсоре. Лайк, коммент, подписка приветствуются ))) Надеюсь, было полезно. Всех благ! @buchlotnik
4.2K
просмотров
2223
символов
Нет
эмодзи
Нет
медиа

Другие посты @pbi_pq_from_tank

Все посты канала →
Магия List.Zip или свёртка числовой последовательности #Анат — @pbi_pq_from_tank | PostSniper