|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
Есть таблица с диапазонами телефонных номеров, а в АТС используются префиксы телефонных номеров. Как преобразовать? Код: sql 1. 2. 3. 4. 5. 6.
Например, диапазон 391500-392080 должен быть преобразован в список из 14 префиксов: 3915 3916 3917 3918 3919 39290 39291 39292 39293 39294 39295 39296 39297 39298 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2013, 23:33 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
кто-то что-то понял? почему есть 3915 и нет 391500? почему 14? чем не угодил 3920? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2013, 23:57 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
o-o, Мы ведь рассуждаем о ПРЕФИКСАХ, а для номера 391500 из указанного диапазона будет достаточным префикс 3915 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 00:09 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
=Сергей=, NB! 3929 в указанный диапазон не попадают ! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 00:19 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
=Сергей=o-o, Мы ведь рассуждаем о ПРЕФИКСАХ, а для номера 391500 из указанного диапазона будет достаточным префикс 3915 То есть вы предлагаете нам самим разбираться в правилах образования ваших префиксов? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 00:20 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
Простите за неудачный и неверный пример. Следующий будет лучше: 123456000-123789999 соответствует списку таких префиксов: 123456 123457 123458 123459 12346 12347 12348 12349 1235 1236 12370 12371 12372 12373 12374 12375 12376 12377 12378 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 00:38 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
=Сергей=Следующий будет лучше: даа, такое же г. как и первый раз к концу 4-го года на форуме, уже мог бы и ознакомиться ... - Рекомендации по оформлению сообщений в форуме =Сергей= 123456000-123789999 соответствует списку таких префиксов: 123456 123457 123458 123459 12346 12347 12348 12349 1235 1236 12370 12371 12372 12373 12374 12375 12376 12377 12378 эти префиксы - где-то храняться ? по какому правилу, нужно "родить", что 1235 - 4х значный префикс, а 1234х - пятизначный ?? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 01:18 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
qwerty112даа, такое же г. как и первый раз к концу 4-го года на форуме, уже мог бы и ознакомиться ... - Рекомендации по оформлению сообщений в форуме Ткните пальцем в нарушенный мною пункт указанных Правил. qwerty112эти префиксы - где-то храняться ? нет, напротив, задача - составить их список. qwerty112по какому правилу, нужно "родить", что 1235 - 4х значный префикс, а 1234х - пятизначный ?? по тому правилу, что какие бы цифры вы не набрали (при соблюдении длины номера, разумеется) после любого из указанных префиксов 1235, набранный номер будет лежать внутри указанного диапазона. Может так список префиксов для диапазона 123456000-123789999 станет понятнее: 12345[6-9] 1234[6-9] 123[5-6] 1237[0-8] ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 01:37 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
=Сергей=, Ознакомьтесь с п. 6 правил и обратите внимание на описание желаемого результата на примере тестовых данных. Представьте описание и тестовые данные для разных диапазонов. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 02:12 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
=Сергей=Ткните пальцем в нарушенный мною пункт указанных Правил.Пункты 3,4, и самое главное 6. =Сергей=в АТС используются префиксы телефонных номеровС АТС и возьмите. Или придумайте логику "получения префиксов" и опишите её на русском языке, потом перечитайте и, если поймете сами, тогда может быть поймут и другие. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 04:32 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
=Сергей=o-o, Мы ведь рассуждаем о ПРЕФИКСАХ, а для номера 391500 из указанного диапазона будет достаточным префикс 3915 если так рассуждать, то и префикса 391 будет достаточно. как, в прочем, и префикса 39, или даже 3. Не можешь формализовать, то хотя бы на словах расскажи алгоритм однозначного определения префикса. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 05:45 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
Добрый Э - Эх=Сергей=o-o, Мы ведь рассуждаем о ПРЕФИКСАХ, а для номера 391500 из указанного диапазона будет достаточным префикс 3915 если так рассуждать, то и префикса 391 будет достаточно. как, в прочем, и префикса 39, или даже 3. Не можешь формализовать, то хотя бы на словах расскажи алгоритм однозначного определения префикса.О-о-о, прочитал ещё раз постановку задачи. Смысл желаемого стал ясен. :) В общих чертах решение сводится к тому, что нужно выделить полные [десятки | сотни | тысячи] номеров в заданном диапазоне. Причем, выделять префиксы нужно от крупного к мелкому: сначала пытаться выделить полные тысячи, если не вышло - сотни, если опять не вышло - десятки. Таким образом получить полное покрытие диапазона нумерации минимально достаточными префиксами. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 06:17 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
=Сергей= 123456000-123789999 123456 123457 123458 123459 12346 12347 12348 12349 1235 1236 12370 12371 12372 12373 12374 12375 12376 12377 12378 я все равно не понимаю. вот в этом примере: 123456000-123789999 можно "переваливать" за 123456, но нельзя за 123789999, так? 1235 ок, тк меньше, чем 123789999 1236 тоже ок, но куда делись 12351, 12352,...,12359? и почему нету 12361, 12362,...,12369, почему сразу 12370? да и 12370 чем лучше 12360? почему первое подходит, а второе -- нет? в смысле, почему это "можно наращивать" после "7", но нельзя было после "5", "6"? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 09:11 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
Добрый Э - Эходнозначного определения :) В банке на 13 литров: 4 (знака в строке) - 6 - 3 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 09:41 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
=Сергей=Простите за неудачный и неверный пример. Следующий будет лучше: 123456000-123789999 соответствует списку таких префиксов:Попробую переформулировать постановку задачи. очевидно, что любой номер с минимальным общим префиксом 123 может выйти за границы диапазона как снизу (123000110, например), так и сверху (123810971). аналогично рассуждая, получим минимальный префикс нижней границы 123456 (далее любые цифры номера попадают в диапазон) значит, первый префикс 123456 определяет номера с 123456000 по 123456999, соответственно, остаток первоначального диапазона примет вид 123457000-123789999 , его так же нужно раздробить на поддиапазоны. минимальный диапазон остатка, путем аналогичных рассуждений, будет 123457, затем 123458, затем 123459 последний диапазон оставляет от первоначального поддиапазон 123460000-123789999 далее, рассуждая так же, получаем цепочку диапазонов 12346, 12347, 12348, 12349, 1235, 1236 (остаток 1237000000-12378999 ) теперь нужно уже учитывать верхнюю границу диапазона, потому что для префикса 1237 существуют номера, выходящие за верхнюю границу (например, 12379001), поэтому диапазон становится более узким: 12370, 12371, 12372, ..., 12377, 12378 Последний диапазон накрывает первоначальный диапазон полностью, поэтому генерация поддиапазонов завершена. Как-то так... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 10:17 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
Не может быть сложной задача для АТС. Поганая императивщина и допиливать надо... Код: sql 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. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 12:46 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
как объяснил Cygapb-007, мне нравится, но в таком случае в первом примере откуда взялись префиксы, начиная с 39290? ведь все, что начинается с 39290, вылетает за 392080? =Сергей=Например, диапазон 391500-392080 должен быть преобразован в список из 14 префиксов: 3915 3916 3917 3918 3919 39290 39291 39292 39293 39294 39295 39296 39297 39298 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 15:17 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
ну вот, функция от aleks2 со мной почти согласна, хотя она для диапазона 391500-392080 еще выдает 3920, а фига-ли, вылетят номера с таким префиксом за 3920 80 (392099...) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 15:23 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Код: sql 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.
Результат выполненияidrNamesBegsEndlPfxfMinfMax1Range139150039208039153915003915991Range139150039208039163916003916991Range139150039208039173917003917991Range139150039208039183918003918991Range139150039208039193919003919991Range1391500392080392003920003920091Range1391500392080392013920103920191Range1391500392080392023920203920291Range1391500392080392033920303920391Range1391500392080392043920403920491Range1391500392080392053920503920591Range1391500392080392063920603920691Range1391500392080392073920703920791Range13915003920803920803920803920802Range21234560001237899991234561234560001234569992Range21234560001237899991234571234570001234579992Range21234560001237899991234581234580001234589992Range21234560001237899991234591234590001234599992Range2123456000123789999123461234600001234699992Range2123456000123789999123471234700001234799992Range2123456000123789999123481234800001234899992Range2123456000123789999123491234900001234999992Range212345600012378999912351235000001235999992Range212345600012378999912361236000001236999992Range2123456000123789999123701237000001237099992Range2123456000123789999123711237100001237199992Range2123456000123789999123721237200001237299992Range2123456000123789999123731237300001237399992Range2123456000123789999123741237400001237499992Range2123456000123789999123751237500001237599992Range2123456000123789999123761237600001237699992Range2123456000123789999123771237700001237799992Range2123456000123789999123781237800001237899993Range312300012325912301230001230993Range312300012325912311231001231993Range3123000123259123201232001232093Range3123000123259123211232101232193Range3123000123259123221232201232293Range3123000123259123231232301232393Range3123000123259123241232401232493Range3123000123259123251232501232594Range4120000120057120001200001200094Range4120000120057120011200101200194Range4120000120057120021200201200294Range4120000120057120031200301200394Range4120000120057120041200401200494Range41200001200571200501200501200504Range41200001200571200511200511200514Range41200001200571200521200521200524Range41200001200571200531200531200534Range41200001200571200541200541200544Range41200001200571200551200551200554Range41200001200571200561200561200564Range4120000120057120057120057120057 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 18:12 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
Есть неточность, проявляется, например, на диапазоне 398577-513132 Но допиливать особого смысла не вижу. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 19:52 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
=Сергей=, Всё же просто. Рекурсивные CTE рулят :) Код: sql 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.12.2013, 18:08 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
Speshuric , спасибо за решение: доходчиво, алгоритм как на ладони. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2013, 19:41 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
Извиняюсь, если опоздал и что на PowerShell (SQL Server остался на работе) Код: powershell 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2013, 15:59 |
|
Сложная, но интересная задача
|
|||
---|---|---|---|
#18+
andrey odegov, здравствуйте. Вот уже несколько лет пользуюсь Вашим решением задачи преобразования диапазонов в префиксы. Допилил код PowerShell для обработки CSV файла с сайта Россвязи, но поскольку почти весь процесс работы по тарификации телефонных разговоров у меня организован в MS Excel (MS Office 365), хочется решить эту задачу в Power Query. Собственные попытки ни к чему не привели, знаний маловато. Подскажите, это вообще возможно - решить данную задачу в редакторе Power Query, или я зря надеюсь и не стоит тратить время? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2020, 13:57 |
|
|
start [/forum/topic.php?fid=46&fpage=61&tid=1686188]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
128ms |
get tp. blocked users: |
1ms |
others: | 287ms |
total: | 526ms |
0 / 0 |