Comments 18
Реально интересно было этим заниматься?
Конечно. В начале просто захотелось одним sql решить задачку, а после пары неудачных попыток это было уже делом принципа.
А теперь напишем генератор этого запроса на brainfuck… Не, на whitespace!
Блять, вот поэтому много кто и не использует хранимые процедуры, для сохранения нервных клеток :))
Поздравляю! Вы решили студенческую/олимпиадную (как угодно) задачку!
К сожалению, или к счастью, программисты очень часто заморачиваются на решение подобных задач, не знаю для разминки мозга или просто повыпендриваться перед коллегами, которые на такие задачи забивают.
Лично я перешел на решение задач по физике за 9-й класс, потому что сын моего начальника перешел в 9-й класс (
К сожалению, или к счастью, программисты очень часто заморачиваются на решение подобных задач, не знаю для разминки мозга или просто повыпендриваться перед коллегами, которые на такие задачи забивают.
Лично я перешел на решение задач по физике за 9-й класс, потому что сын моего начальника перешел в 9-й класс (
Велосипеды позволяют думать в новом направлении, из чего может появиться необычное и крутое.
А вам работу пора менять.
А вам работу пора менять.
Ничего не имел против, к таким задачам отношусь уважительно, поскольку сам иногда их решаю или принимаю участие в решении.
На счет работы либо я вас не правильно понимаю, либо вы меня не правильно поняли. Теперь вместо олимпиадных задач по программированию мы с начальником разминаем мозги, решая занятные задачки по физике, попукивая оставшимися школьными знаниями )
На счет работы либо я вас не правильно понимаю, либо вы меня не правильно поняли. Теперь вместо олимпиадных задач по программированию мы с начальником разминаем мозги, решая занятные задачки по физике, попукивая оставшимися школьными знаниями )
Прочитав, пришел к выводу, что вы делаете домашнюю работу за сына начальника по указанию. Извиняюсь.
Кстати довольно забавно получается выдавливать из себя школьный курс физики )
Одно дело, когда я, к примеру, — школьник и мои знания свежи, тем более эти знания мне выдают довольно-таки последовательно и могу задачу решить довольно быстро, зная контекст и пройденный накануне материал; или если я — программист, и решаю замысловатую задачку, опираясь на свой текущий «скил» программирования.
Совсем другое дело когда я понимаю суть задачки по физике, и у меня в голове портрет моего школьного учителя с кислой миной и какая-то каша остаточных знаний, которая выливается на листок бумаги в виде коряво-написанных формул, в следствии атрофии почерка. И тут, когда я захожу в тупик, — в голове проскакивают давно забытые понятия, на подобии «фронта волны» или «скалярного произведения векторов», и вот эти проблески разума — самая приятная вещь, по ощущениям сравнимая с убитым оленем, потому, что я осознаю что разум то остался и не атрофировался из-за рутиной работы.
Одно дело, когда я, к примеру, — школьник и мои знания свежи, тем более эти знания мне выдают довольно-таки последовательно и могу задачу решить довольно быстро, зная контекст и пройденный накануне материал; или если я — программист, и решаю замысловатую задачку, опираясь на свой текущий «скил» программирования.
Совсем другое дело когда я понимаю суть задачки по физике, и у меня в голове портрет моего школьного учителя с кислой миной и какая-то каша остаточных знаний, которая выливается на листок бумаги в виде коряво-написанных формул, в следствии атрофии почерка. И тут, когда я захожу в тупик, — в голове проскакивают давно забытые понятия, на подобии «фронта волны» или «скалярного произведения векторов», и вот эти проблески разума — самая приятная вещь, по ощущениям сравнимая с убитым оленем, потому, что я осознаю что разум то остался и не атрофировался из-за рутиной работы.
Простите… как именно вы попукиваете школьными знаниями?
Интересный пост, прикольная задача..
Решения пока не смотрел. Жду когда(если) появится свободное время, зудит попробовать решить самому, а потом сравнить.
Спасибо
Решения пока не смотрел. Жду когда(если) появится свободное время, зудит попробовать решить самому, а потом сравнить.
Спасибо
Получилось чуть компактнее. Не знаю, на сколько правильно, может какие -то кейсы не учел и не верно отработю
Вкратце суть решения.
1) разматываю строку
2) для каждой строки считаю глубину вложенности скобки по критерию открыавющая/закрывающая
3) делаю селфджойн по глубине, к закрыающим скобкам подтягиваю их открывающие
4) сверяю кооректность открыающей/закрывающей пары
5) суммирую вложенные ошибки для диапазонов
6) дальше чисто оформительское — отфильтровываю диапазоны содержащие в себе ошибки, ранжирую по длине диапазона, вывожу фаворита в ранге, подтягиваю исходную строку, чтобы выкусить от туда фрагмент.
Вкратце суть решения.
1) разматываю строку
2) для каждой строки считаю глубину вложенности скобки по критерию открыавющая/закрывающая
3) делаю селфджойн по глубине, к закрыающим скобкам подтягиваю их открывающие
4) сверяю кооректность открыающей/закрывающей пары
5) суммирую вложенные ошибки для диапазонов
6) дальше чисто оформительское — отфильтровываю диапазоны содержащие в себе ошибки, ранжирую по длине диапазона, вывожу фаворита в ранге, подтягиваю исходную строку, чтобы выкусить от туда фрагмент.
запрос
with brackets as(select '[[]])[([[]][[(]])]' b
from dual
)
,pivot as (select ord
,br
,decode(br,')',-1,']',-1,'(',1,'[',1) direction
,sum(decode(br,')',-1,']',-1,'(',1,'[',1)) over (order by ord) depth
from (
select level ord,substr(b,level,1) br
from brackets connect by level <= length(b)
)
)
select from_pos
,to_pos
,substr(b,from_pos,to_pos-from_pos+1) data
from (
select s.*
,dense_rank() over (order by from_pos-to_pos) d_rank
from (
select s.*
,sum(error) over (order by to_pos range between to_pos-from_pos preceding and current row) errors
from (
select p1.ord to_pos
,max(p2.ord) from_pos
,decode(translate(max(p1.br),'])','[('),max(p2.br) keep (dense_rank last order by p2.ord),0,1) error
from pivot p1
inner join pivot p2 on p1.depth = p2.depth -1 and p2.ord < p1.ord and p2.direction = 1 and p1.direction = -1
group by p1.ord
)s
)s
where errors = 0
)s,brackets
where s.d_rank = 1;
результат
FROM_POS TO_POS DATA
---------- ---------- ------------------
1 4 [[]]
8 11 [[]]
Извращенец =)
Sign up to leave a comment.
Считаем скобочки на Oracle SQL