アサルトリリィは西暦何年のできごと?

一柳梨璃さんの誕生日をもとに調べます。

#include <bits/stdc++.h>
using namespace std;

const double syn = 22.0 + 12.0/24.0 + 44.048/1440.0;
const double year = 365.242189;

int main(){
    
    int range;
    printf("until: AD");
    scanf("%d", &range);
    
    if(range<=0){
        printf("error: please input an upcoming year in A.D.");
        return 0;
    }
    
    int day = 0;
    double dday;
    int month;
    
    for(int i=2021; i<range; i++){
        if(i%400==0)
            day += 366;
        else if(i%100==0)
            day += 365;
        else if(i%4==0)
            day += 366;
        else
            day += 365;
        
        if(day%7!=5)continue;//Tuesday?
        
        if(day%60!=48)continue;//Kanoe-Tatsu?
        
        dday = year * (i-2020) + 26.4;
        
        dday /= syn;
        dday -= (int)dday;
        dday *= syn;
        
        if(dday< 20.2 || dday > 21.2)continue;//moon phase:20.7(\pm 0.5)?
        printf("%d %lf\n", i, dday);
    }
    return 0;
}

データの出典はこちら*1

とくに説明はしないですが、アニメ アサルトリリィ BOUQUET 5話*2で示唆された、梨璃ちゃんの誕生日前日6月18日の特徴「①火曜日で、②庚辰で、③月齢20.7」*3をもとに候補を絞りました。これらは太陽と月の運動およびグレゴリオ暦で決まります。月の運動は平均朔望周期を使い、月齢の判定は \pm 0.5日まで許すと甘めにしています。
旧暦およびそこから決まる六曜は少し面倒*4なため、CASIO様の旧暦計算サイト*5に任せています。CASIO様のサイトからは「火曜日で旧暦5/22で友引な6月18日は西暦何年?」を一括で調べられないので、このプログラムで絞り込むことが重要です。

計算の結果、次は「西暦2052年」らしいことがわかりました。CASIO様サイトで旧暦も確認したところ合っているようです。その次は私のプログラムによると西暦4261年らしいのですが旧暦は合っていないようです。

またどれだけ未来の結果まで信用できるかは数値的にも物理的にも非自明であり*6、少なくともミランコビッチサイクルが効いてくる1万年スケールではもう使わないほうがいいです。

*1:2020年6月18日の曜日・月齢・干支のデータ:六曜・月齢・旧暦カレンダー (2020)令和2年11月(霜月)、 干支:壬辰 - Wikipedia庚辰 - Wikipedia朔望月の自転周期:月 - Wikipedia、 太陽年:太陽年 - Wikipedia

*2:第5話 ヒスイカズラ| STORY | アサルトリリィBOUQUET(ブーケ) アニメ公式サイト

*3:twitterでは友引も調べたと書いたけどやってなかった。すみません

*4:閏月の置き方が面倒。 改暦 - Wikipedia

*5:旧暦カレンダー - 高精度計算サイト

*6:物理的には明日地球が太陽に落っこちることだってありえる