Определить, является ли данное число суммой одного и того же года по григорианскому календарю и года по хиджре?

Есть ли способ узнать, является ли данное число суммой как хиджры [1], так и григорианского [2] одного и того же года?

Пример: 3452 = 2015 + 1437

[1] Хиджра – исламский календарь. https://en.wikipedia.org/wiki/Islamic_calendar

[2] Григорианский календарь. https://en.wikipedia.org/wiki/Григорианский_календарь


person KaliE    schedule 16.10.2015    source источник
comment
Учитывая, что год по хиджре длится 354 дня (2015 год ce соответствует к исламским годам ах 1436 – 1437.) один год по григорианскому календарю будет соответствовать по крайней мере двум годам хиджры. Как бы вы с этим справились? Будут ли 2015+1436 и 2015+1436 оба приемлемы?   -  person Wai Ha Lee    schedule 17.10.2015
comment
... На самом деле, поскольку они не/не могут измениться в один и тот же день, я думаю, что любое число больше 622 (622 ce = ah 1) будет представлено в виде суммы года хотя бы на один день.   -  person Wai Ha Lee    schedule 17.10.2015
comment
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он не имеет практической цели и не был предоставлен какой-либо существующий код. Как было сказано, это головоломка с кодом, и она лучше подходит для codegolf.SE.   -  person Matt Johnson-Pint    schedule 17.10.2015
comment
Вай, как вы спрашивали в 2015 году, существует более поздняя часть 1436, а 15 октября начинается новый 1437, который пересекается с остальной частью 2015 года, так что да, оба ответа должны быть правильными.   -  person KaliE    schedule 17.10.2015


Ответы (1)


Возможно, это немного грубый подход, который потребует от вас предварительного заполнения двух списков датами (но это не так уж плохо, всего около 2000 элементов в каждом):

 // Fill this up with all Hijri dates witin your range
 List<int> hijriDates = new List<int>() { 1,2, 1437 };

 // Fill this up with all gregorian dates within your range
 List<int> gregorianDates = new List<int>() { 3,2, 2015 };

 int number = 3452;

 var result = 
       from i in hijriDates                           
       from j in gregorianDates
       where i + j == number
       select new { Hijri = i  , Gregorian = j};

После того, как вы отфильтровали списки возможных совпадений, вы можете выяснить, какие из них относятся к одному и тому же году. И вы можете сделать это, используя один из ответов отсюда:

Преобразование даты по григорианскому календарю в дату по хиджре

person Leigh Shepperson    schedule 16.10.2015