2013年5月26日日曜日

サイコロの問題

数式処理Vol.19,No.2を眺めていたら, 算数オリンピックの話題があった. Mathematicaで解くという話だが, ちょっとやってみた.

2004年のジュニア算数オリンピックの問題だそうだ.

「すべて同じサイコロを図のように積み上げました. このサイコロのA, B, Cの面と反対側の面のサイコロのアルファベットをそれぞれ求めなさい.」



一番上のサイコロから, A,B,Cの面で作る頂点の方向から下の図のpのように見える;
また中段の右のサイコロから, D,E,Fの面で作る頂点の方向からはqのように見える;
さらに中段左から面C,Dは隣接する;
下のサイコロから面A,Eは隣接することが分る.



サイコロはどれかの面が上にあるとしてよいから, pのように面Aが上だとすると, B,Cが側面になり, D,E,Fの2つが側面に, 残ったのが底になるわけだ.

Fが底だとすると, qをFが底になるように回転してpにつけるとrのようになる. Eが底だとするとsになり, Dが底だとするとtになる.

これらの図で隣接関係を満すものを探すと, rではA, Eは隣接するがC,Dは裏の関係だからだめ. sではC,Dは隣接だがA,Eは裏でだめ. tはA,EもC,Dも隣接していてよさそうである.

というわけでAの裏はD, Bの裏はF, Cの裏はEであった.

おそらくMathematicaで解く方が面倒くさい.



サイコロの上のような展開図よりも, Rubicキューブで使ったこういう図の方が隣接関係はよく分るように思う.

ところで右の展開図は一筆描きができ, PostScriptで描くのも楽だった.

2013年5月13日月曜日

閏月

前回のブログの切っ掛けはCalendrical Calculationsに9,10,11,1月の閏は稀で, 12月の閏はほとんどないと書いてあったことだ.

これは前回のブログのような理由によるが, Aslaksenが1654年から2644年まで1000年の中国の太陰太陽暦を計算した結果もある. 日本と中国とは標準時が違うので, 節気の時刻が1時間違い, 多少は異なるかもしれないが, とにかくよく計算したものだ.

この閏月の頻度に関連した図がCalendrical Calculationsに載っている(p.249). たいした情報はないと思われるが, 気になるのでその説明をしたい. 下の図は私流に書き直したが, 実質的には同じである.



Calendrical Calculationsの図には上半分しかなく, 右上向きの斜めの線と上の12→1→...の右向きの線は破線. 更に閏月の頻度に従い, →閏11→, →閏1→, →閏9→, →閏10→は灰色, →閏12→はもっと淡い灰色にしてある. またその斜めの破線にその閏月の起きる確率が併記してある.

閏11月 0.005
閏12月 0.000
閏 1月 0.006
閏 2月 0.023
閏 3月 0.047
閏 4月 0.061
閏 5月 0.074
閏 6月 0.059
閏 7月 0.051
閏 8月 0.026
閏 9月 0.008
閏10月 0.009
横向きに1年の時間軸がある. 朔の字の下の縦線が朔の時刻で, それで区切られる短冊型がある暦月だ.

左端の暦月に11と書いてあるから, この間に冬至があるはず. 短冊の下の斜め線は冬至が11暦月の最初にあるか(左上)最後にあるか(右下)を示す.

冬至が11月の最初にあれば, その後の中気はその位置から右に辿った線上にあるはずで, 大寒は次の暦日の始まる翌日くらいにあり, 雨水はさらに次の暦月の2日目くらい, 冬至はだいぶ先の(右から2番目の)暦月の12日目くらいになる.

この場合にはどの暦月の下にも斜め線が存在するから, 閏月はなく, 月名は短冊の下の矢印を右に辿るようにすすむ.

冬至が斜め線の右下, つまり11暦月の最後の日だったらどうか. 大寒は「次の次」の暦月の最初になり, 「次」の暦月は閏月になる. 中気のない部分をこの図では灰色の帯で示す.

これが上の短冊で11から閏11へ向かう斜め矢印になり, その年は11月, 閏11月, 12月と進むことになる.

ある年はこの下の斜め線のある高さを左から右へすすみ, 途中で灰色の帯に遭遇すると, そこが閏月になり, 上の矢印は斜め右上方向へ進み, 13ヶ月の年になる. 灰色に出会わなければ12ヶ月だ.

図から分かるように, 閏月があるのは斜め線の領域の下の方だけで, その幅は7/19に対応するわけだ.

2013年5月10日金曜日

閏月

太陰太陽暦(lunisolar calendar)では「閏四月」というようなのがある. 12朔望月が1太陽年より短いから臨時に挿入する月だが, Calendrical Calculationsに9,10,11,1月の閏は稀で, 12月の閏はほとんどないと書いてあった. まぁ近日点に近いからとは思うが調べてみることにした. (英語では閏月をintercalary monthというらしい.)

インターネットで探したら旧暦を計算してくれるページがあった.

そこで早速1995年から2013年までの旧暦の各月の1日が太陽暦の何月何日かを書き出した.

表の上の方, 旧暦1995年1月1日は新暦の1月31日であると読む. 8月の所に2段あるのは, 旧暦8月1日は新暦8月26日. 旧暦閏8月1日は新暦9月25日であるということだ.



この期間に閏月は2月に1回, 3月に1回, 4月に1回, 5月に2回, 7月に1回, 8月に1回あり, 確かに9月から1月までには, 稀などころかまったくなかった.

また, 1995年から2013年までは19年あり, いわゆる19年7閏法のとおりに閏月が7回あることも確認できた.

(こんな苦労をせずとも私の書棚の「新こよみ便利帳」には1870年から2020年までの対照表があった. それを見ると明治6年(1873年)は閏6月があり, 13ヶ月なので, 政府が13ヶ月分の月給を払いたくないから新暦に改正した理由も分かる. 2033年の閏月は例外的といわれているが, そこまでは表がない.)

そもそも閏月はどこに入れるかをおさらいしよう.

A)1年の時間軸上に, 太陽と月の黄経が一致する時刻(朔)を決める.
B)平均太陽の南中時刻の12時間前から12時間後までを1暦日とする.
C)朔の時刻を含む暦日から次の朔の時刻を含む暦日の前の暦日までを1暦月とする.
一方,
D)太陽の黄経が30度の倍数になる時刻を中気という.
0 春分 30 穀雨 60 小満 90 夏至 120 大暑 150 処暑 180 秋分 210 霜降 240 小雪 270 冬至 300 大寒 330 雨水
春分を含む暦月を2月, 夏至を含む暦月を5月, 秋分を含む暦月を8月, 冬至を含む暦月を11月とし, その前後に中気を含む月の名前を決める.

1朔望月は29.5日, 中気の平均間隔は30.5日なので, 中気の割り当てられない暦月ができることがある. それを閏月として前の月の名前の上に閏をつける.

こういうわけだから, 閏月はどこにでも入り得るが, そうならないのは中気と中気の間隔(solar monthと書いてあったりする)が一定ではないからである. 地球が一定の角速度で公転するなら, 黄経が30度増える時間は一定であるが, Keplerの法則で地球が近日点付近にいる時は角度の増え方が大きく, 従って中気の間隔が短かく, solar monthの中に暦月がすっぽり入る確率が小さい. (正確に計算すると2033年のようなことも起きるが.)

この話は森口繁一先生の「数理つれづれ」にも書いてあるが, 自分で計算したのは私のブログ2008年6月25日の「夏至の日に」に書いた.

なお, 春分の暦月を2月にするということは, 春分が2月の後半にあるならその45日前の立春は1月にある, つまり新年立春のわけだし, 前半にあるなら立春は12月にある, つまり年内立春のことになり, 古今和歌集の「年のうちに春は来にけり」も確率1/2なことが理解できる.