2022年11月28日

必修アルゴリズム って本 矢沢・日経ソフトウェア 2022年

万年カレンダーのアルゴリズムってのがあって。Pythonである。なので少しいじっていたら次の事に気づいた。カレンダーとは直接は関係ないがPythonの特徴が分かった。雑学であるぞうさん。


0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
日 月 火 水 木 金 土 日 月 火 水 木 金 土 日

日曜を0として起点とする。ここで日数/7の余りを取ると
0 % 7 = 0 日
1 % 7 = 1 月
2 % 7 = 2 火
3 % 7 = 3 水
4 % 7 = 4 木
5 % 7 = 5 金
6 % 7 = 6 土
7 % 7 = 0 日
8 % 7 = 1 月
9 % 7 = 2 火
このように起点からの日数を7で割った余りを取ると曜日がわかる。カレンダーに使えるぞ、うっしっし。。。。
これは起点日から未来への場合だ。起点日からの過去の場合にはどうなるか?

-5 -4 -3 -2 -1  0 1 2 3 4 5 6 7 8 9 10 11 12 13
  火  水 木 金 土  日 月 火 水 木 金 土 日 月 火 水 木 金 土

-1 % 7 = 6 土
-2 % 7 = 5 金
-3 % 7 = 4 木
-4 % 7 = 3 水
となればいいのである気がするのである。これがね、Pythonでは次のようになって都合がいいのである。
print(0 % 7)   # 0  日
print(-1 % 7)  # 6 土
print(-2 % 7)  # 5 金
print(-3 % 7)  # 4 木
print(-4 % 7)  # 3 水
print(-5 % 7)  # 2 火
print(-6 % 7)  # 1 月

日数を7で割った余りで曜日がわかるのだが、起点日から未来は日数は正なので良いとして起点日から過去の場合には日数が負になる。だが負の日数を7で割った余りで曜日がわかる。Pythonの場合には。

ちなみにC言語では -6 % 7 = -6 になりました。これでは曜日はわからんですねえ。

さてと、ここで負数の割り算の余りはPythonとC言語で違うようだと気づいた次第である。コンピュータ言語によって違うらしい。Maximaでも -6 になった。

するってーと、負数を割った余りってのは計算では使わない方がいいな(笑)つーか、誰が曜日出すプログラム書くねん。。。。。

  賢い人が回答しとる 負数を割った余りは言語によって異なるってさー
https://ja.stackoverflow.com/questions/66236/python-%E3%81%A7-%E8%B2%A0%E3%81%AE%E6%95%B0%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E5%89%B0%E4%BD%99%E7%AE%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

ここら上の本とはまったく関係はござらんのである(´・ω・`)

posted by toinohni at 09:50| 東京 ☀| Comment(0) | ソフト系雑学 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください