|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Кобанчег Последний отрезок ломает решения икстендера потому что до него дырка, но легко допиливается. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 11:05 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Кобанчег, у икстендера есть главный/0 интервал покрывающий все, типа min()-x,max()+y цвета хаки тогда дырок не будет не знаю часть условия ли ето, или случайно если я правильно понял то заливка уникальными цветами range_name ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 11:10 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Stax, Да. У икстендера надо пустые интервалы выкинуть из результата. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 11:25 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Кобанчег Challenge just for fun Решить задачу отсюда https://stackoverflow.com/questions/64137899/flatten-list-of-ranges-to-single-result-range-set Не используя соединений или коррелированных подзапросов. Ну и без завязывания на частные случаи. То есть - границы не обязательно целочисленные - никакой генерации - число приоритетов неограничено - никакого хардкодига итд У меня более одного варианта. У меня число приоритетов до 38 попугаев, т.к. я не сумел listagg() использовать в оконном режиме. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 20:53 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Кобанчег НеофитSQL Нарушено условие задачи, интервалы одного уровня касаются. Перечитал, действительно. О несоприкосновении говорилось в разминке, но не во второй задаче. С фиксом понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 20:58 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
НеофитSQL У меня число приоритетов до 38 попугаев, т.к. я не сумел listagg() использовать в оконном режиме. Оно таки и не работает с окнами.. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 21:44 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
НеофитSQL О несоприкосновении говорилось Но Stax уточнил 22233313 . Твой запрос поломало касание src и tgt - это допустимо. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 00:10 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Нарушено условие задачи, интервалы одного уровня касаются. Stax НеофитSQL Жаль, критерий трудно определить объективно. У меня получилось так. должно быть две строки? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 02:50 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
НеофитSQL, Да, верно. Это заодно и объясняет почему тест производительности не выявил различий. Данные были нагенерированы без таких случаев. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 04:30 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Пятница, господа! Челендж еще активен Кобанчег Challenge just for fun Решить задачу отсюда https://stackoverflow.com/questions/64137899/flatten-list-of-ranges-to-single-result-range-set Не используя соединений или коррелированных подзапросов. Ну и без завязывания на частные случаи. То есть - границы не обязательно целочисленные - никакой генерации - число приоритетов неограничено - никакого хардкодига итд У меня более одного варианта. Данные для тестирования Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Constraints (name, range_start, range_end) - уникально (range_end > range_start) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 15:22 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Кобанчег - число приоритетов неограничено ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 15:35 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Кобанчег, model, рекурсивные запросы? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 15:35 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
xtender Кобанчег, model, рекурсивные запросы? Модель - конено, почему бы нет. Ну разве что итеративная модель - это не спортивно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 15:42 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
xtender Кобанчег - число приоритетов неограничено Ну на единичную длину закладываться не стоит. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 15:46 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Кобанчег xtender пропущено... name может быть от a,...,z,aa,...,az,...,zzzzzzzzzzzzz? Ну на единичную длину закладываться не стоит. имхо удобнее было-б уровень задавать числами (int), цвет varchar2(хх) .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 16:17 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Stax, Мне кажется примерно индифферентно для чего делать max. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 16:59 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Кобанчег Stax, Мне кажется примерно индифферентно для чего делать max. a aa ab c d ... z мне удобнее числа и легче тестовые добавлять (+ не надо помнить алфавит) в етой пятничной наверное менять не надо, у народа наработки уже на буквах ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 17:06 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Собственно варианты следующие. Раз Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
for loop + upsert all помогает получить все имена для каждого перехода. Дальше берем max и склеиваем с помощью MR. for loop однако требует отдельного обращения к таблице. По идее Оракл это мог бы брать из памяти. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Два Получаем оригинальные и "нарезанные" интервалы. Моделью возвращаем "нарезанные" с определенными новыми именами (return updated rows). Последним шагом снова склеиваем через MR. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
Если заморочиться можно обойтись одним обращением к таблице + двойной UNPIVOT + MODEL + MATCH RECOGNIZE Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 19:39 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Вместо 100500 можно +/- бесконечность (быстрее) или min(start)/max(end) (медленнее). Приоритет вычисляется по значению name, как в оригинальной задаче. Кобанчег, у тебя в последней строчке 'e',3,6 вместо 'е',3,5 - намеренно или опечатка? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 19:42 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Сравним скорость, или подождем PL/SQL варианта? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 19:43 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
НеофитSQL Кобанчег, у тебя в последней строчке 'e',3,6 вместо 'е',3,5 - намеренно или опечатка? Но "опечатка" была использована ранее для тестирования. НеофитSQL Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 19:45 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
НеофитSQL Сравним скорость, или подождем PL/SQL варианта? SQL-но и безджойно было "just for fun". PS. Икстендер публиковал PL/SQL подход. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 19:49 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Ну и по приколу линейный проход. Но это не спортивно ибо xmlquery (которым вообще-то можно реализовать какие-угодно джойны) + ограничение на длину конкатенации + предполагается что входные имена не содержат запятых. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 20:00 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Кобанчег НеофитSQL Код: plsql 1.
Я его написал :) Понадеялся что джойн по константе исполняется эффективно. Не всякий "from a, b" стоит циклов, бывают бесплатные или дешёвые. Например, "from a,b where b.rowid=x" ничего не должен стоить. Больше беспокоит многопроходность. В худшем случае мой алгоритм дает О(n*n) шагов и 3n памяти. В лучшем, O(n). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 22:37 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Сделал пару быстрых проверок на таблице из 10К строк. Самое простое решение с подчиненным циклом оказалось довольно медленным, несмотря на наличие индексов: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46.
Рекурсивное решение: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52.
Как заполнялась тест таблица: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 18:47 |
|
|
start [/forum/topic.php?fid=52&msg=40020883&tid=1880676]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
76ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 192ms |
0 / 0 |