開け閉め

力強く閉めると反動で数センチ開く

ポッキーの日を気合で増やしてみた

毎年11月11日はポッキーの日だ。正式名称は、「ポッキー&プリッツの日」。1が4つ並んだ状態がポッキーやプリッツを並べているように見えるかららしい。実は日本記念日協会の認定も受けている、れっきとした記念日なのである。
なんとなく世間的にもポッキーをたくさん買ったり食べたりしても許される雰囲気があるので、ポッキーが大好きな僕にとっては非常にうれしい記念日だ。きたるポッキーアンドプリッツの日にはたくさん食べようと思う。 f:id:hikido:20200316004345j:plain

でも、たまに思うことがある。
あんなにおいしいポッキーを奉る日が一年に一回だけでいいのか。もっとプリッツは崇められるべきではないのか。畢竟、ポッキーは甘い系お菓子の頂点に君臨し、プリッツもまたしょっぱい系お菓子の中で最も美味しいとされている。最上のお菓子と言えるポッキーやプリッツのために、僕は何をしてあげられるのだろうか。

そうだ、ポッキーの日を増やそう。
ポッキーの日が一年に何度もあれば、一年に何度もポッキーを大量買いできるし、一年に何度も大学の生協にポッキーが大量に入荷する。そういう世界こそが求められている。 2020年の366日をなるべくたくさんのポッキーの日で彩ろうじゃないか。
ちなみに、先述の通り正式には「ポッキー&プリッツの日」なのだが、長いので「ポッキーの日」と呼ばせてほしい。プリッツのことも好きだが、「&」の入力がめんどくさすぎる。なんだよshift+5同時押しって。&ボタン作らんかい。タカアンドトシとかテツandトモとかも入力が大変だから&の表記変えちゃってるんだぞ。たぶん違うけど。


2020年のポッキーの日・・・ 現在 1 日


1が並んでたらポッキーの日でいいはず

11月11日がポッキーの日だというのならば、当然1月1日や1月11日、11月1日だってポッキーの日になっていいはずだ。1月11日なんかはポッキーがとプリッツが3本しかなくて物足りないのでは?という疑問を抱いた方もいるかとは思うが、ポッキーとプリッツが3本あれば三角形を作ることができるので、窓に取り付ければビルの窓によくあるアレを再現することができてとても嬉しい。

f:id:hikido:20200316004302p:plain
f:id:hikido:20200316004255j:plain
窓のアレ

消防隊はアレがある窓から建物に入るらしいので、ポッキーでアレを作る場合は消防隊が突入してきた場合に渡す手土産を準備しておこう。

というわけで、1月1日、1月11日、11月1日の3日が新たにポッキーの日と認定された。

f:id:hikido:20200316004314p:plain
一例

2020年のポッキーの日・・・ 現在 4 日

でも、まだ足りないような気がする。現状、年に4回しかポッキーの日が訪れない。年4回と言ったらドラえもんの1時間スペシャルが放送される頻度と全く同じだ。特別な内容ではなく単純に二倍長いドラえもんよりポッキーのほうがたくさん見たいのは明白(ドラえもんファンの皆様ごめんなさい)。あまりにも頻度が少なすぎると言わざるを得ないだろう。

日付を限界突破する

今年の2月19日はポッキーの日だ。何故かというと…

f:id:hikido:20200316004322p:plain
11/1の110日後
この日は2019年11月1日から数えて110日後、すなわち2019年11月111日にあたるから。
f:id:hikido:20200316004335p:plain
ポッキーの日、認定
ポッキーとプリッツがあわせて5本になった。5本もあればホームベースの形を作れるので、野球をすることができる。非常に嬉しい。
f:id:hikido:20200316004243p:plain
野球ができるぞ


ほかにも、
f:id:hikido:20200316004326p:plain
ポッキーの日、認定
2020年4月20日2020年1月111日になる。 このように、1月または11月の日付に無理やり変換したときに日付の部分に1が連続して出てくる日ポッキーの日に認定してあげよう。1月1111日や11月11111日みたいな感じだ。ちなみに111月や1111月についても考えようか迷ったが、13月以降のひと月の日数が30日か31日か決められないのでこっちを調べるのはやめておいた。

2020年のポッキーの日・・・ 現在 6 日

全部調べる

計算サイトがあるのでひとつひとつ調べていけば一応調べることは可能だが、1日、11日、111日、1111日、11111日……とすべての日付について調べるのはあまりにも無理がある。というわけで、自動化した。

import datetime
def main():
    Result = []
    #XXXX年1月repunit日と、XXXX年11月Repunit日について一致を調べる
    RepunitDelta = [datetime.timedelta(days = repunit) for repunit in (0,10,110,1110,11110,111110)]
    for y in range(1,2021):
            JanOrig = datetime.date(year=y,month=1,day=1)
            NovOrig = datetime.date(year=y,month=11,day=1)
            for RD in RepunitDelta:#日付の差分
                JanRes = JanOrig + RD
                NovRes = NovOrig + RD
                if JanRes.year==2020:
                    result = (f"{JanRes}は{JanOrig.year}年{JanOrig.month}月{RD.days+1}日")
                    Result.append((JanRes,result))
                if NovRes.year==2020:
                    result = (f"{NovRes}は{NovOrig.year}年{NovOrig.month}月{RD.days+1}日")
                    Result.append((NovRes,result))
    Result.sort(key = lambda x:x[0])
    for r in Result:
        print(r[1])

if __name__ == "__main__":
    main()

このコード、要するに西暦1年~2020年の11月1,11,111,1111,1万1111,11万1111日をすべて調べ、その中で西暦2020年のものだけをピックアップして出力するようになっている。*1単純に日付の数字を足し算するだけではうるう年があったり、一月が30日か31日かの処理が面倒だったりするが、pythonには日付を直接足したり引いたりの計算ができるdatetimeというモジュールがあるので便利だ。

ただ、毎月厳密に30日だったりうるう年がなかったりしたらもっと便利なのになと思った。暦を考えた人はポッキーの日を求めることを想定していなかったのだろうか?

またコード内にレピュニット(Repunit)という言葉が出てきているが、1や11、1111など1がたくさん並んだ数字のことをこう呼ぶらしい。ポッキーのおかげで知らない知識が増えていく。
まあとにかく実行してみると、以下の結果が得られた。

2020-01-01は2020年1月1日
2020-01-11は2020年1月11日
2020-01-16は1715年11月111111日
2020-01-16は2017年1月1111日
2020-02-19は2019年11月111日
2020-03-17は1716年1月111111日
2020-04-02は1989年11月11111日
2020-04-20は2020年1月111日
2020-06-02は1990年1月11111日
2020-11-01は2020年11月1日
2020-11-11は2020年11月11日
2020-11-15は2017年11月1111日

全部で12日まで増えた!ちなみに今まで数えてきた11月111日なんかも全て入っている。これによると、2020年1月16日は1715年11月111111日らしい。

f:id:hikido:20200316004340p:plain
1715年といえば、1600年に江戸幕府ができてから大体100年くらいだ。調べてみると、和暦では正徳5年。翌年の1716年には8代将軍・徳川吉宗が将軍に着任しているらしい。徳川吉宗といえば”米将軍”の異名を取り、米の増産や安定供給に力を尽くしたらしい。しかし11万日の時を経て、時代は米からパンへ、そしてポッキーへと移った。時間の流れとは無情なものである。

さらに、11月111111日とかならポッキーとプリッツが合計8本あるので、漢字の「四」を作りだし、

f:id:hikido:20200316004239p:plain

厚切りジェイソンをキレさせることができる。

f:id:hikido:20200316004247p:plain
あと6本あれば「一」「二」「三」まで揃えて前フリまで完成させられるので、各自手持ちのポッキーで補ってほしい。

2020年のポッキーの日・・・ 現在 12 日

無限年に、挑む

じつは、先程書いたコードには重大な欠陥がある。書いたとおり日数の都合で11万1111日までしか計算していなかったが、当然レピュニットは111万1111、1111万1111…と続いていく。これは調べる範囲を西暦1~2020年までに限定していたせいで、要は西暦1年より前、すなわち紀元前の1月・11月すべてのポッキーの日を探索できたわけではないのだ。 とはいえ紀元前は無限に続く。どのようにすれば「本当に全ての」ポッキーの日を探索することができるのだろうか? 数日に渡る試行錯誤の末、以下のコードが完成した。

import datetime
def RepDaysList400yrs():
    """    400年(146097日)周期の中で、レピュニット日だけ経過した日をすべて列挙する
    """
    Shuki = 146097
    #一周は146097日
    RepDays = [False]*Shuki
    curpos = 1#1/1+curpos日
    RepDays[1] = True
    while 1:
        nextpos = (curpos*10 + 1)%Shuki
        if RepDays[nextpos]:break
        else:
            RepDays[nextpos] = True
            curpos = nextpos
    return([n for n,d in enumerate(RepDays) if d])#「レピュニット日後」の日付をすべて列挙する

if __name__ == "__main__":
    print(len(RepDaysList400yrs()))

少しややこしい話になるのでざっくりした解説に留めるが、実は、いわゆる西暦に使われる「グレゴリオ暦」は、うるう年などを加味しても400年=146097日周期で完全にループしている。さらに、上のコードを実行することで存在するすべてのレピュニット(1,11,111,……)を「146097で割った余り」が10422桁周期でループしていることが判明する。なので、考えなきゃいけない日付は1日、11日、111日……(1が10421桁並ぶ数)日、(1が10422桁並ぶ数)日までで全てだ。10422個となると多そうに見えるが、無限個調べるところが1万個まで減ったわけで、結構な進歩である。

さらに上のコードは1,11,111,1111…(1が10422桁並ぶ数) を146097で割った余りを全て計算し、出力してくれるようになっている。

というわけで1620年から2020年までの400年間について、1月と11月の1,11,111,1111…(1が10422桁並ぶ数)"を146097で割ったあまり"日を全て調べれば、少なくともこの400年間に理論上存在しうるすべてのポッキーの日を列挙することができる。
このへんは論理の飛躍がすごいですが、細かい解説は後日別の記事にまとめる予定です。

まあとにかく、2020年11月11日から紀元前数万、いや数億年の11111...111日まで、ポッキーの日を一つの漏れもなく調べることが可能になったのだ。  

import datetime
import ModularRepunit
def main():
    Repunits = ModularRepunit.RepDaysList400yrs()
    Result = set()
    #XXXX年1月repunit日と、XXXX年11月Repunit日について一致を調べる
    RepunitDelta = [datetime.timedelta(days = repunit) for repunit in [i-1 for i in Repunits]]
    for y in range(1600,2021):
        JanOrig = datetime.date(year=y,month=1,day=1)
        NovOrig = datetime.date(year=y,month=11,day=1)
        for RD in RepunitDelta:
            JanRes = JanOrig + RD
            NovRes = NovOrig + RD
            if JanRes.year==2020:
                Result.add(JanRes)
            if NovRes.year==2020:
                Result.add(NovRes)
    print(len(Result))
if __name__ == "__main__":
    main()




このコードを走らせれば、2020年の”本当の”ポッキーの日の日数が出力される。その実行結果は…


366



2020年のポッキーの日・・・ 366 日


なんと、366日すべてがポッキーの日だということがここに立証された。ここに、ポッキーによる天下統一がなされた。毎日が日曜日ならぬ、毎日がポッキーの日である。これでもう、11月11日の元祖・ポッキーの日を心待ちにする必要はない。ただ、毎日がポッキーの日であるという事実に目を向け、歓びをたたえてポッキーを食べればよいのである。街中のスーパーやコンビニは毎日ポッキーを大量に入荷すべきだし、大学の生協は毎日でっかいポッキーのバルーンをポッキー購入者に抽選でプレゼントすべきなのだ。

ちなみに記事公開日の3月16日は紀元前30421188966538973725979619324451867214552279954033583471559610700044795200753228638811504989453237年11月の111...1(1が101個続く)日なのでポッキーの日だ。

そして年の方はおおよそ紀元前10の98乗年なので、グーゴル(10の100乗)に近い。紀元前グーゴル年までさかのぼって初めて、3月16日はポッキーの日たりえるのだ。なお宇宙の誕生が約138億年前で11桁くらいなので、ビッグバンよりも圧倒的に昔ということになるがそういうのは気にしないでいただきたい。

毎日がポッキーの日であるエビデンス

2020年のすべての日について、ポッキーの日の具体的な日付も調べておいた。全部掲載するととんでもない分量になるので、とりあえず1月の最初の10日ぶんだけここに載せておく。

2020年1月1日は2020年1月の1日です
2020年1月2日は紀元前3042118896653897372597961932445186721455227995403358347155959051年1月の111...1(1が67個続く)日です
2020年1月3日は紀元前304211889665389737259796193244518672145522799540335834715596107000445933年1月の111...1(1が75個続く)日です
2020年1月4日は紀元前304211889665389737259796193244518672145522799540335834715596107000447952007532286388115049894552553744734282322323144516618715267558159609331091291706499410969728635389121230719620830300721058231479390024740031927037820382652925415608462年1月の111...1(1が240個続く)日です
2020年1月5日は紀元前3042118896653897372597961932445186721455227995403358347155961070004479520075322863881150498945525537447342823223231445166187152675581596093310912917064994109697286353891212307196208303007210582314793900247400319270378203826529254156104810122346414708年11月の111...1(1が253個続く)日です
2020年1月6日は紀元前304211889665389737259796193244518672145522799540335834715596107000447952007532286388115049894552553744734282322323144516618715267558159609331091291706499410969728635389121230719620830300721058231479390024740031927037820382652925415610481012234641672617811758245853401811429697012563190513456432674486433290515509862929725795年1月の111...1(1が327個続く)日です
2020年1月7日は紀元前3042118896653897372597961930427年11月の1111111111111111111111111111111111日です
2020年1月8日は紀元前28403年11月の11111111日です
2020年1月9日は紀元前304211889665389737257778年11月の111111111111111111111111111日です
2020年1月10日は紀元前30421188966538973725979619324451867214552279954033583471559610700044795200753228638811504989455255374473428232232314451661871526755815960933109129170649941096972863538912123071962083030072105823147939002471985年11月の111...1(1が212個続く)日です

桁数が最も小さいポッキーの日を選んだが、それでも無茶苦茶に長い。

一番下の1月10日は年だけで212桁ある。無量大数ですら68桁なので、ざっくり無量大数の3乗、要するに無量大数無量大数倍の無量大数倍。デカすぎ。当然宇宙に存在するすべての粒子の数(10の80乗)より圧倒的に多い。

ちなみに一番長いのは9月25日で、日付の方は1が1471個続くし、年も当然のように1468桁ある。(9月25日のデータは、記事の最後に全日付のデータへのリンクと一緒に貼っておきます)

f:id:hikido:20200316004258p:plain
11月(1が1471桁並ぶ数)日の図
さっきの書き方をすると無量大数無量大数倍の無量大数倍の…(「無量大数倍の」が20個)無量大数倍。

ここまで大きな数だともはや想像も及ばない。わかるのは唯一、「ポッキーの日だ」ということだけである。

でも、それで十分なのかもしれない。





だって、ポッキーが1471本もあったらめちゃめちゃ嬉しいから。



f:id:hikido:20200316004349p:plain


おまけ

366日すべてのポッキー&プリッツの日の日付データはこちら

※一番長いポッキーの日の詳細

2020年9月15日は紀元前3042118896653897372597961932445186721455227995403358347155961070004479520075322863881150498945525537447342823223231445166187152675581596093310912917064994109697286353891212307196208303007210582314793900247400319270378203826529254156104810122346416726178117582458534018114296970125631905134564326744864332905155098629297278140170191341673302288509992980310645971131812730202840882731640242061400606750613937619830964663507426192491594245223683199822340256435412393440279023145201095467014685068443872526091873511738396027601144749340810861581308613075179123763283602294670283746034788150642685643404343993678476932753201259741435104378901992816036225551821354609912896530691557283479088854969263191197933184421613342125056944663096740141443318099922958338942240049038956614060825646279146351016409949858275285902136556154092448472209863614204565764146043001871663651166310358490896078936901130375329024171916223087705048320256024726342392002877844476234586914477671988093146638496645683651576996409539172224237625991255429231568372002467158425186310769176947127213046431100189904272123619543484427773632890781086842607613054644821210869795029634040702029777780819896674431675150375739710222964499233005773181136124933738847782257297853100641658928276723303315225120601001009222943964930453359373871088690694842771887475064131668990084973986080784988360092571678025178097048155981604307031933882587900124194503955895360236311795892074747903409682912342104522642110680914年11月の111...1(1が1471個続く)日です

*1:西暦1年1月1日から2020年の大晦日まではだいたい75万日くらいしかないので、111万1111日以降については調べなくても十分なはず。