(no subject)
Feb. 14th, 2008 11:58 pm![[identity profile]](https://www.dreamwidth.org/img/silk/identity/openid.png)
![[community profile]](https://www.dreamwidth.org/img/silk/identity/community.png)
Мля... Совсем поломал голову. Тупая, простейшая задача, но я уже вообще ничего не соображаю. Есть список <50, <100, >=100, >200 итд итп - надо преобразовать его в пары (с-до): 1-49, 50-99, 100-200, 201-MAX
Тетки дают такие списки.
А нужны пары "С-До" .Сегодня (больше некому было) пришлось ручками это все раскладывать. [...] Тарифы, мля...[...]
Я - тупой :( Мне не приходит в голову простой и эффективный алгоритм. Все время монстры какие-то рисуютсо... Некрасивые... Хелп.
Тетки дают такие списки.
А нужны пары "С-До" .Сегодня (больше некому было) пришлось ручками это все раскладывать. [...] Тарифы, мля...[...]
Я - тупой :( Мне не приходит в голову простой и эффективный алгоритм. Все время монстры какие-то рисуютсо... Некрасивые... Хелп.
no subject
Date: 2008-02-15 08:24 am (UTC)Сортируем список и начинаем создавать интервалы. Все интервалы - полуоткрытые. Первый интервал - [1, null). Бежим по списку. Каждый шаг закрывает один интервал и создаёт новый.
- Если встречаем "<N" - текущий интервал закрывается числом N-1, и открываем новый интервал [N, null).
- Если "<=N" - число N закрывает текущий интервал, создаём новый интервал [N+1, null).
- Если ">=N" - число N-1 закрывает текущий интервал, создаём [N, null).
- Если ">N" - число N закрывает текущий интервал, создаём [N+1, null).
По окончании закрываем последний интервал числом MAX.
no subject
Date: 2008-02-15 08:44 am (UTC)"<=N" == ">N" == "<N+1" == ">=N+1" < "<=N+1" == ">N+1" == ...
Вообще говоря, эквивалентных элементов в списке быть не должно, т.к. они сгенерят одинаковые интервалы, а это исключительная ситуация.
no subject
Date: 2008-02-15 08:58 am (UTC)дело вот в чем:
<100
>150
создадутся:
1-99
100-150 - этого интервала нет. ошибка.
150-max
<=100
>=100
неверно создадутся. неоднозначность. ошибка.
Проблема скорее в реализации "защиты от дурака" - заполнить интревалы и отметить ошибки.
no subject
Date: 2008-02-15 09:34 am (UTC)Неоднозначности отловятся при сортировке, т.к. возникнут эквивалентные элементы, что должно породить исключение.
no subject
Date: 2008-02-15 06:41 pm (UTC)"<N", ">=N" ==> [_, N), [N, null)
"<=N", ">N" ==> [_, N+1), [N+1, null)
no subject
Date: 2008-02-18 12:37 pm (UTC)