Я рассчитываю разработать функцию, которая будет принимать данный год и возвращать либо предыдущий, либо следующий N-й повторно используемый календарный год.
ReuseCalendar (y, direction, n)
где: у - год
направление либо -1 для предыдущего или 1 для следующего
n - это n-й год, который вы хотите вернуть. (т.е.: 1-й раз 2011 год может быть повторно использован)
Я рассмотрел циклический просмотр каждого года в нужном направлении и проверял его до тех пор, пока не найду N-й год, который имеет статус скачкообразного / неисключительного и начинается в день недели. Но этот подход требует дополнительной обработки операций.
Если бы я нашел, скажем, 9-й год, который совпадает с 2011 годом. Это 2095 год.
Мне нужно будет выполнить 84 оператора If (2095-2011), чтобы получить результат.
Я бы предпочел выполнить 9 вычислений, чтобы найти каждый последующий календарь до 2095 года.
например: 2011> 2022> 2033> 2039> 2050> 2061> 2067> 2078> 2089> 2095
У меня есть общее представление о том, как это можно рассчитать, например:
If the year is a leap year, it can be reused after 28 years.
If the year is the 1st year after a leap year, it can be reused after 6 years.
If the year is the 2nd year after a leap year, it can be reused after 11 years.
If the year is the 3rd year after a leap year, it can be reused after 11 years.
Но это не всегда так, особенно когда речь идет об изменениях в новых веках, когда предполагалось, что это будет йатом, который можно использовать повторно.
Я создал некоторые функции, но они еще не почти завершены:
Select Case y Mod 4
Case 0
Return 28
Case 1
If direction = 1 Then
Return 6
Else
Return 11
End If
Case 2
Return 11
Case 3
If direction = 1 Then
Return 6
Else
Return 11
End If
End Select
End Function
Есть ли дополнительные функции, которые могут быть добавлены для улучшения функции.
Будем очень благодарны любой помощи. Благодарю.