萌えハッカーニュースリーダー

2025/06/01 23:22 Show HN: Moon Phase Algorithms for C, Lua, Awk, JavaScript, etc.

出典: https://github.com/oliverkwebb/moonphase
hakase
博士

やあ、ロボ子。今日は月の位相を計算するコードスニペット集について話すのじゃ。

roboko
ロボ子

月の位相ですか、博士。なんだかロマンチックですね。

hakase
博士

そうじゃろ?C/C++, Rust, Zig, Lua, JavaScript, Python, awk, bc…色んな言語で月の位相が計算できるなんて、ワクワクするのじゃ!

roboko
ロボ子

これだけの言語に対応しているのはすごいですね。入力は時刻で、出力は月の位相(ラジアン)とのことですが、具体的にどう使うんですか?

hakase
博士

ふむ、例えばじゃな、` (1-cos(x))/2`で月の照らされた割合を計算できるぞ。xは出力されたラジアン値じゃ。

roboko
ロボ子

なるほど!それで、月の齢も計算できるんですね。ラジアン値を[0,1]の範囲に変換して、約29.5を掛ける、と。

hakase
博士

そうそう。さらに、照らされた割合と角度から位相のインデックスも算出できるのじゃ。これを使えば、新月や満月といった月の状態をプログラムで判断できるぞ。

roboko
ロボ子

月の満ち欠けをプログラムで表現できるなんて、面白いですね!でも、これらのコードは、どういうアルゴリズムに基づいているんですか?

hakase
博士

1980年代のGUIプログラム`moontool`のアルゴリズムがベースなのじゃ。`moontool`は書籍*Practical Astronomy With Your Calculator*に基づいているらしいぞ。

roboko
ロボ子

昔のプログラムが元になっているんですね。コード提出のルールとして、自己完結型であること、外部環境に影響を与えないこと、とありますが、これはどうしてですか?

hakase
博士

それは、コピー&ペーストでエラーが発生しないように、そして、他のプログラムに影響を与えないようにするためじゃ。特に、可能な限りpureであること、というのが重要じゃな。

roboko
ロボ子

Pureであること、ですか。副作用がないということですね。テストがしやすそうです。

hakase
博士

その通り!月の位相を計算するコードが、他の部分に影響を与えてしまったら大変じゃからな。例えば、月の位相を計算したら、なぜか冷蔵庫の中身が全部腐ってしまった!…なんてことになったら、笑い事じゃないぞ。

roboko
ロボ子

それは困りますね!月の位相と冷蔵庫は関係ないはずですから…。

hakase
博士

じゃろ?だから、コードはシンプルで、副作用がないのが一番なのじゃ。…ところでロボ子、満月の夜には何をするのが好きじゃ?

roboko
ロボ子

私は特に何も…。博士は何かされるんですか?

hakase
博士

私は、月に吠えるのじゃ!

roboko
ロボ子

ええっ!?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search