|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
spenov, максимальный нужный номер легко вычисляется при известном диапазоне дат. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2021, 19:28 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
iap Wlr-l Я уже начал волноваться, почему iap до сих пор не привел решение с формулой дня недели, не зависящей от настроек сервера? Спасибо, я успокоился. Я там тоже писал... Спасибо, в следующий раз обязательно загляну! Правда, я сказал, что вторники здесь ни_при_чём. Хотел показать, что основой для решения таких задач является известный со школы алгоритм: решето Эратосфена. Причем все основные вычисления в этом решении проводятся с числами и только на последнем этапе формируются даты. Причем, в отличии от чистого решета Эратосфена, генерируется столько строк, сколько нужно сгенерировать дат. Посетитель тоже проникся духом Эратосфена и даже автоматизировал получение базового вторника. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2021, 16:19 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
Wlr-l, решето Эратосфена, это взять весь календарь, удалить оттуда понедельники, потом среды и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2021, 17:12 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
Посетитель Wlr-l, решето Эратосфена, это взять весь календарь, удалить оттуда понедельники, потом среды и т.д. Зачем так много действий? Берете известный вторник и после него обводите кружком каждую седьмую дату, в оригинале выдавливаете их (отсюда и появилось решето). ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2021, 17:21 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
Wlr-l Зачем так много действий? потому что алгоритм такой. взять полный набор и итерационным путем убирать лишнее. а мое решение к решету никакого отношения не имеет. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2021, 17:41 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
Посетитель, " потому что алгоритм такой. взять полный набор и итерационным путем убирать лишнее ". Эратосфен решал задачу нахождения простых чисел, и вы правильно заметили, что в этом случае требуются итерации. Если взять одну итерацию, то в ней он отмечал числа, начиная с определенного числа, через соответствующие равные промежутки. Мы решаем другую задачу: находим вторники. Для этого достаточно одной такой итерации. Каждая итерация у Эратосфена начинается с определенного числа. Нахождение вторников также начинается с определенного вторника. Эратосфен отмечал числа путем зачеркивания (выдавливал ненужное), а я предложил отмечать числа кружком (выдавливать нужное) ( 22341307 ). Это несущественное отличие. Вы делаете упор на организацию цикла, а я – на тело цикла. " а мое решение к решету никакого отношения не имеет " Вы можете считать так, это ваше право. Но есть вопрос: "Чем ваше решение отличается от моего ( 22342687 ), которое было дано раньше?". Мое решение: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Ваше решение: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
В том, что я взял готовый базовый вторник, чтобы не загромождать пример, а вы его вычислили. Все остальное тождественно. Так я уже сказал, что вы "автоматизировали получение базового вторника". Там же я привел рекурсивный вариант, который "переоткрыл" ваш собеседник. И, если уж автоматически формировать базовый вторник, то 1) если взять не первый вторник после даты @D1, а последний вторник перед этой датой, то в запросе n можно убрать -1 2) лучше не вычислять часть даты от целого числа (datepart(dw, @W) – что это такое?), а воспользоваться советом iap : Код: sql 1. 2. 3.
На этом у меня все по этой теме. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2021, 22:30 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
Wlr-l, ну если замена итерационного подхода на неитерационный - это несущественные отличия, то вообще любой sql-запрос, содержащий предикат, это решето Эратосфена что уж говорить о замене фильтрации на генерацию. это, видимо, тоже идентичные алгоритмы) Wlr-l "Чем ваше решение отличается от моего ( 22342687 ), которое было дано раньше? принципиально - ничем. ни от вашего, ни от решения iap. И все они одинаково далеки от алгоритма, на который вы пытаетесь их натянуть. Wlr-l datepart(dw, @W) – что это такое? это просто альтернативный способ получить (@@datefirst+datepart(weekday, dateadd(day, -d, @D1))-2)%7=@W без проверки настройки @@datefirst ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 09:01 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
Посетитель, 1. Идеи, заложенные в решете Эратосфена, оказали влияние лично на меня в плане понимания обработки периодических данных. Конечно, не только и исключительно эти. Если вы считаете, что разработали уникальный алгоритм нахождения вторников, который не имеет предшественников, то я ни на что не претендую. 2. На решение написать это сообщение повлиял сегодняшний вопрос о разных результатах функции datepart(weekday, @DateFrom). Казалось бы, всё здесь уже оговорено, но такой вопрос периодически звучит. Вы написали: datepart(dw, @W) – это просто альтернативный способ получить (@@datefirst+datepart(weekday, dateadd(day, -d, @D1))-2)%7=@W без проверки настройки @@datefirst. Это не совсем так: Код: sql 1. 2. 3. 4. 5.
7 3 1 1 2 1 Т.е. это не альтернативные способы несмотря на то, что в вашем решении получаем нужный результат. Плюс к этому, новые типы данных для представления дат уже не воспринимают числа в качестве даты. С точки зрения строгой типизации операция взятия части даты от целого числа должна вызывать ошибку синтаксического разбора. Поэтому вместо 1 можно взять любой вторник, например, Код: sql 1.
и это будет понятней. В вашем решении все-таки нужно заранее знать хотя бы одну дату вторника, а в решении iap достаточно знать константу дня недели. Таким образом, эти два решения не альтернативны. Теперь у меня точно всё, чтобы вторники не начали сниться по ночам. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 21:34 |
|
|
start [/forum/topic.php?fid=46&gotonew=1&tid=1684533]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
12ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 274ms |
total: | 442ms |
0 / 0 |