次の表(TABLE)は、 HTML 文書の背景(bgcolor)に使えそうな色を探すために作ったものだ。 明るいほうが望ましいだろうから、 一枚目は赤が、二枚目は緑が、三枚目は青が FF で固定されている。 残りの二色は、背景になりそうな(=明るい)範囲で動かしている。
FFBFBF | FFBFC3 | FFBFC7 | FFBFCB | FFBFCF | FFBFD3 | FFBFD7 | FFBFDB | FFBFDF | FFBFE3 | FFBFE7 | FFBFEB | FFBFEF | FFBFF3 | FFBFF7 | FFBFFB | FFBFFF |
FFC3BF | FFC3C3 | FFC3C7 | FFC3CB | FFC3CF | FFC3D3 | FFC3D7 | FFC3DB | FFC3DF | FFC3E3 | FFC3E7 | FFC3EB | FFC3EF | FFC3F3 | FFC3F7 | FFC3FB | FFC3FF |
FFC7BF | FFC7C3 | FFC7C7 | FFC7CB | FFC7CF | FFC7D3 | FFC7D7 | FFC7DB | FFC7DF | FFC7E3 | FFC7E7 | FFC7EB | FFC7EF | FFC7F3 | FFC7F7 | FFC7FB | FFC7FF |
FFCBBF | FFCBC3 | FFCBC7 | FFCBCB | FFCBCF | FFCBD3 | FFCBD7 | FFCBDB | FFCBDF | FFCBE3 | FFCBE7 | FFCBEB | FFCBEF | FFCBF3 | FFCBF7 | FFCBFB | FFCBFF |
FFCFBF | FFCFC3 | FFCFC7 | FFCFCB | FFCFCF | FFCFD3 | FFCFD7 | FFCFDB | FFCFDF | FFCFE3 | FFCFE7 | FFCFEB | FFCFEF | FFCFF3 | FFCFF7 | FFCFFB | FFCFFF |
FFD3BF | FFD3C3 | FFD3C7 | FFD3CB | FFD3CF | FFD3D3 | FFD3D7 | FFD3DB | FFD3DF | FFD3E3 | FFD3E7 | FFD3EB | FFD3EF | FFD3F3 | FFD3F7 | FFD3FB | FFD3FF |
FFD7BF | FFD7C3 | FFD7C7 | FFD7CB | FFD7CF | FFD7D3 | FFD7D7 | FFD7DB | FFD7DF | FFD7E3 | FFD7E7 | FFD7EB | FFD7EF | FFD7F3 | FFD7F7 | FFD7FB | FFD7FF |
FFDBBF | FFDBC3 | FFDBC7 | FFDBCB | FFDBCF | FFDBD3 | FFDBD7 | FFDBDB | FFDBDF | FFDBE3 | FFDBE7 | FFDBEB | FFDBEF | FFDBF3 | FFDBF7 | FFDBFB | FFDBFF |
FFDFBF | FFDFC3 | FFDFC7 | FFDFCB | FFDFCF | FFDFD3 | FFDFD7 | FFDFDB | FFDFDF | FFDFE3 | FFDFE7 | FFDFEB | FFDFEF | FFDFF3 | FFDFF7 | FFDFFB | FFDFFF |
FFE3BF | FFE3C3 | FFE3C7 | FFE3CB | FFE3CF | FFE3D3 | FFE3D7 | FFE3DB | FFE3DF | FFE3E3 | FFE3E7 | FFE3EB | FFE3EF | FFE3F3 | FFE3F7 | FFE3FB | FFE3FF |
FFE7BF | FFE7C3 | FFE7C7 | FFE7CB | FFE7CF | FFE7D3 | FFE7D7 | FFE7DB | FFE7DF | FFE7E3 | FFE7E7 | FFE7EB | FFE7EF | FFE7F3 | FFE7F7 | FFE7FB | FFE7FF |
FFEBBF | FFEBC3 | FFEBC7 | FFEBCB | FFEBCF | FFEBD3 | FFEBD7 | FFEBDB | FFEBDF | FFEBE3 | FFEBE7 | FFEBEB | FFEBEF | FFEBF3 | FFEBF7 | FFEBFB | FFEBFF |
FFEFBF | FFEFC3 | FFEFC7 | FFEFCB | FFEFCF | FFEFD3 | FFEFD7 | FFEFDB | FFEFDF | FFEFE3 | FFEFE7 | FFEFEB | FFEFEF | FFEFF3 | FFEFF7 | FFEFFB | FFEFFF |
FFF3BF | FFF3C3 | FFF3C7 | FFF3CB | FFF3CF | FFF3D3 | FFF3D7 | FFF3DB | FFF3DF | FFF3E3 | FFF3E7 | FFF3EB | FFF3EF | FFF3F3 | FFF3F7 | FFF3FB | FFF3FF |
FFF7BF | FFF7C3 | FFF7C7 | FFF7CB | FFF7CF | FFF7D3 | FFF7D7 | FFF7DB | FFF7DF | FFF7E3 | FFF7E7 | FFF7EB | FFF7EF | FFF7F3 | FFF7F7 | FFF7FB | FFF7FF |
FFFBBF | FFFBC3 | FFFBC7 | FFFBCB | FFFBCF | FFFBD3 | FFFBD7 | FFFBDB | FFFBDF | FFFBE3 | FFFBE7 | FFFBEB | FFFBEF | FFFBF3 | FFFBF7 | FFFBFB | FFFBFF |
FFFFBF | FFFFC3 | FFFFC7 | FFFFCB | FFFFCF | FFFFD3 | FFFFD7 | FFFFDB | FFFFDF | FFFFE3 | FFFFE7 | FFFFEB | FFFFEF | FFFFF3 | FFFFF7 | FFFFFB | FFFFFF |
BFFFBF | C3FFBF | C7FFBF | CBFFBF | CFFFBF | D3FFBF | D7FFBF | DBFFBF | DFFFBF | E3FFBF | E7FFBF | EBFFBF | EFFFBF | F3FFBF | F7FFBF | FBFFBF | FFFFBF |
BFFFC3 | C3FFC3 | C7FFC3 | CBFFC3 | CFFFC3 | D3FFC3 | D7FFC3 | DBFFC3 | DFFFC3 | E3FFC3 | E7FFC3 | EBFFC3 | EFFFC3 | F3FFC3 | F7FFC3 | FBFFC3 | FFFFC3 |
BFFFC7 | C3FFC7 | C7FFC7 | CBFFC7 | CFFFC7 | D3FFC7 | D7FFC7 | DBFFC7 | DFFFC7 | E3FFC7 | E7FFC7 | EBFFC7 | EFFFC7 | F3FFC7 | F7FFC7 | FBFFC7 | FFFFC7 |
BFFFCB | C3FFCB | C7FFCB | CBFFCB | CFFFCB | D3FFCB | D7FFCB | DBFFCB | DFFFCB | E3FFCB | E7FFCB | EBFFCB | EFFFCB | F3FFCB | F7FFCB | FBFFCB | FFFFCB |
BFFFCF | C3FFCF | C7FFCF | CBFFCF | CFFFCF | D3FFCF | D7FFCF | DBFFCF | DFFFCF | E3FFCF | E7FFCF | EBFFCF | EFFFCF | F3FFCF | F7FFCF | FBFFCF | FFFFCF |
BFFFD3 | C3FFD3 | C7FFD3 | CBFFD3 | CFFFD3 | D3FFD3 | D7FFD3 | DBFFD3 | DFFFD3 | E3FFD3 | E7FFD3 | EBFFD3 | EFFFD3 | F3FFD3 | F7FFD3 | FBFFD3 | FFFFD3 |
BFFFD7 | C3FFD7 | C7FFD7 | CBFFD7 | CFFFD7 | D3FFD7 | D7FFD7 | DBFFD7 | DFFFD7 | E3FFD7 | E7FFD7 | EBFFD7 | EFFFD7 | F3FFD7 | F7FFD7 | FBFFD7 | FFFFD7 |
BFFFDB | C3FFDB | C7FFDB | CBFFDB | CFFFDB | D3FFDB | D7FFDB | DBFFDB | DFFFDB | E3FFDB | E7FFDB | EBFFDB | EFFFDB | F3FFDB | F7FFDB | FBFFDB | FFFFDB |
BFFFDF | C3FFDF | C7FFDF | CBFFDF | CFFFDF | D3FFDF | D7FFDF | DBFFDF | DFFFDF | E3FFDF | E7FFDF | EBFFDF | EFFFDF | F3FFDF | F7FFDF | FBFFDF | FFFFDF |
BFFFE3 | C3FFE3 | C7FFE3 | CBFFE3 | CFFFE3 | D3FFE3 | D7FFE3 | DBFFE3 | DFFFE3 | E3FFE3 | E7FFE3 | EBFFE3 | EFFFE3 | F3FFE3 | F7FFE3 | FBFFE3 | FFFFE3 |
BFFFE7 | C3FFE7 | C7FFE7 | CBFFE7 | CFFFE7 | D3FFE7 | D7FFE7 | DBFFE7 | DFFFE7 | E3FFE7 | E7FFE7 | EBFFE7 | EFFFE7 | F3FFE7 | F7FFE7 | FBFFE7 | FFFFE7 |
BFFFEB | C3FFEB | C7FFEB | CBFFEB | CFFFEB | D3FFEB | D7FFEB | DBFFEB | DFFFEB | E3FFEB | E7FFEB | EBFFEB | EFFFEB | F3FFEB | F7FFEB | FBFFEB | FFFFEB |
BFFFEF | C3FFEF | C7FFEF | CBFFEF | CFFFEF | D3FFEF | D7FFEF | DBFFEF | DFFFEF | E3FFEF | E7FFEF | EBFFEF | EFFFEF | F3FFEF | F7FFEF | FBFFEF | FFFFEF |
BFFFF3 | C3FFF3 | C7FFF3 | CBFFF3 | CFFFF3 | D3FFF3 | D7FFF3 | DBFFF3 | DFFFF3 | E3FFF3 | E7FFF3 | EBFFF3 | EFFFF3 | F3FFF3 | F7FFF3 | FBFFF3 | FFFFF3 |
BFFFF7 | C3FFF7 | C7FFF7 | CBFFF7 | CFFFF7 | D3FFF7 | D7FFF7 | DBFFF7 | DFFFF7 | E3FFF7 | E7FFF7 | EBFFF7 | EFFFF7 | F3FFF7 | F7FFF7 | FBFFF7 | FFFFF7 |
BFFFFB | C3FFFB | C7FFFB | CBFFFB | CFFFFB | D3FFFB | D7FFFB | DBFFFB | DFFFFB | E3FFFB | E7FFFB | EBFFFB | EFFFFB | F3FFFB | F7FFFB | FBFFFB | FFFFFB |
BFFFFF | C3FFFF | C7FFFF | CBFFFF | CFFFFF | D3FFFF | D7FFFF | DBFFFF | DFFFFF | E3FFFF | E7FFFF | EBFFFF | EFFFFF | F3FFFF | F7FFFF | FBFFFF | FFFFFF |
BFBFFF | BFC3FF | BFC7FF | BFCBFF | BFCFFF | BFD3FF | BFD7FF | BFDBFF | BFDFFF | BFE3FF | BFE7FF | BFEBFF | BFEFFF | BFF3FF | BFF7FF | BFFBFF | BFFFFF |
C3BFFF | C3C3FF | C3C7FF | C3CBFF | C3CFFF | C3D3FF | C3D7FF | C3DBFF | C3DFFF | C3E3FF | C3E7FF | C3EBFF | C3EFFF | C3F3FF | C3F7FF | C3FBFF | C3FFFF |
C7BFFF | C7C3FF | C7C7FF | C7CBFF | C7CFFF | C7D3FF | C7D7FF | C7DBFF | C7DFFF | C7E3FF | C7E7FF | C7EBFF | C7EFFF | C7F3FF | C7F7FF | C7FBFF | C7FFFF |
CBBFFF | CBC3FF | CBC7FF | CBCBFF | CBCFFF | CBD3FF | CBD7FF | CBDBFF | CBDFFF | CBE3FF | CBE7FF | CBEBFF | CBEFFF | CBF3FF | CBF7FF | CBFBFF | CBFFFF |
CFBFFF | CFC3FF | CFC7FF | CFCBFF | CFCFFF | CFD3FF | CFD7FF | CFDBFF | CFDFFF | CFE3FF | CFE7FF | CFEBFF | CFEFFF | CFF3FF | CFF7FF | CFFBFF | CFFFFF |
D3BFFF | D3C3FF | D3C7FF | D3CBFF | D3CFFF | D3D3FF | D3D7FF | D3DBFF | D3DFFF | D3E3FF | D3E7FF | D3EBFF | D3EFFF | D3F3FF | D3F7FF | D3FBFF | D3FFFF |
D7BFFF | D7C3FF | D7C7FF | D7CBFF | D7CFFF | D7D3FF | D7D7FF | D7DBFF | D7DFFF | D7E3FF | D7E7FF | D7EBFF | D7EFFF | D7F3FF | D7F7FF | D7FBFF | D7FFFF |
DBBFFF | DBC3FF | DBC7FF | DBCBFF | DBCFFF | DBD3FF | DBD7FF | DBDBFF | DBDFFF | DBE3FF | DBE7FF | DBEBFF | DBEFFF | DBF3FF | DBF7FF | DBFBFF | DBFFFF |
DFBFFF | DFC3FF | DFC7FF | DFCBFF | DFCFFF | DFD3FF | DFD7FF | DFDBFF | DFDFFF | DFE3FF | DFE7FF | DFEBFF | DFEFFF | DFF3FF | DFF7FF | DFFBFF | DFFFFF |
E3BFFF | E3C3FF | E3C7FF | E3CBFF | E3CFFF | E3D3FF | E3D7FF | E3DBFF | E3DFFF | E3E3FF | E3E7FF | E3EBFF | E3EFFF | E3F3FF | E3F7FF | E3FBFF | E3FFFF |
E7BFFF | E7C3FF | E7C7FF | E7CBFF | E7CFFF | E7D3FF | E7D7FF | E7DBFF | E7DFFF | E7E3FF | E7E7FF | E7EBFF | E7EFFF | E7F3FF | E7F7FF | E7FBFF | E7FFFF |
EBBFFF | EBC3FF | EBC7FF | EBCBFF | EBCFFF | EBD3FF | EBD7FF | EBDBFF | EBDFFF | EBE3FF | EBE7FF | EBEBFF | EBEFFF | EBF3FF | EBF7FF | EBFBFF | EBFFFF |
EFBFFF | EFC3FF | EFC7FF | EFCBFF | EFCFFF | EFD3FF | EFD7FF | EFDBFF | EFDFFF | EFE3FF | EFE7FF | EFEBFF | EFEFFF | EFF3FF | EFF7FF | EFFBFF | EFFFFF |
F3BFFF | F3C3FF | F3C7FF | F3CBFF | F3CFFF | F3D3FF | F3D7FF | F3DBFF | F3DFFF | F3E3FF | F3E7FF | F3EBFF | F3EFFF | F3F3FF | F3F7FF | F3FBFF | F3FFFF |
F7BFFF | F7C3FF | F7C7FF | F7CBFF | F7CFFF | F7D3FF | F7D7FF | F7DBFF | F7DFFF | F7E3FF | F7E7FF | F7EBFF | F7EFFF | F7F3FF | F7F7FF | F7FBFF | F7FFFF |
FBBFFF | FBC3FF | FBC7FF | FBCBFF | FBCFFF | FBD3FF | FBD7FF | FBDBFF | FBDFFF | FBE3FF | FBE7FF | FBEBFF | FBEFFF | FBF3FF | FBF7FF | FBFBFF | FBFFFF |
FFBFFF | FFC3FF | FFC7FF | FFCBFF | FFCFFF | FFD3FF | FFD7FF | FFDBFF | FFDFFF | FFE3FF | FFE7FF | FFEBFF | FFEFFF | FFF3FF | FFF7FF | FFFBFF | FFFFFF |
利用したプログラムは以下のとおりである。 定数を変えれば、色の間隔や範囲が変わる。
#include <stdio.h> #define MIN(X,Y) ((X)<(Y)?(X):(Y)) #define MAX(X,Y) ((X)>(Y)?(X):(Y)) #define NOR(X) MAX(MIN((X),255),0) /* 0 以上 255 以下に規格化する */ #define START 191 /* この値から */ #define END 255 /* この値まで */ #define DIFF 4 /* これだけずつ増やしてゆく */ #define DEFAULT 255 /* 動かさない色はこの値に */ main() { int i, j; printf("<P>\n"); printf("<TABLE>\n"); for (i=START; i<=END; i+=DIFF) { printf("<TR>\n"); for (j=START; j<=END; j+=DIFF) { printf("<TD bgcolor=\"#%02X%02X%02X\">", DEFAULT, NOR(i), NOR(j)); printf("%02X%02X%02X\n", DEFAULT, NOR(i), NOR(j)); } } printf("</TABLE>\n"); printf("</P>\n"); printf("<P>\n"); printf("<TABLE>\n"); for (i=START; i<=END; i+=DIFF) { printf("<TR>\n"); for (j=START; j<=END; j+=DIFF) { printf("<TD bgcolor=\"#%02X%02X%02X\">", NOR(j), DEFAULT, NOR(i)); printf("%02X%02X%02X\n", NOR(j), DEFAULT, NOR(i)); } } printf("</TABLE>\n"); printf("</P>\n"); printf("<P>\n"); printf("<TABLE>\n"); for (i=START; i<=END; i+=DIFF) { printf("<TR>\n"); for (j=START; j<=END; j+=DIFF) { printf("<TD bgcolor=\"#%02X%02X%02X\">", NOR(i), NOR(j), DEFAULT); printf("%02X%02X%02X\n", NOR(i), NOR(j), DEFAULT); } } printf("</TABLE>\n"); printf("</P>\n"); }
256 × 256 × 256 の立方体で、 (RR, GG, BB) の位置にある単位立方体の色が #RRGGBB のものを考えると、 上の三つの表はその立方体の面のうち明るい三つの面(の一部)と思うことができる。
2001-01-10 (3) 02:43:30 +0900
休みだが、職場に行く。
書類受けに差出人名のない封筒がはいっていた。 宛名には、私の名前がプリンタで打ち出されたシールが貼られている。 このような手紙は開封しないほうが無難なのだが、 外部から郵送されてきたものではなさそうだし、 透かしてみると紙しかはいっていないようなので、開けてみた。 中味は他学科の教授の退官記念募金だった。 慣例ではこのような手紙は縦書きで印刷屋に頼むところを、 横書きでプリンタで打ち出している。 宛先の「各位」を先頭ではなく下のほうにもってきているのは、 ものを知らないやつが縦書きの手紙を見本にして丸写ししたものか? また、発起人の一人の教授の名前は「郎」を「朗」と誤っている。 振込先は全国どこからでも便利なように郵便局にするのが慣例なのに近くの銀行とし、 振込用紙の口座名・口座番号は手書きだ。 なんだか怪しい。 偽造ではないか。 そうでないとしても、 差出人名を封筒に書かないのはなぜか? 書いたら受取拒否されるような教授だと発起人たちが自覚しているのだろうか? 即座にごみ箱に叩き込んだ。
たまり部屋のようなところに、 チョコレートがおいてあった。 内祝だそうだ。 少し食べだしたら止まらなくなり、 全部たいらげてしまった。 二十個ぐらいあっただろうか。
夜になったら持病の頭痛がでそうな感じで、早めに寝た。
2001-01-10 (3) 02:15:05 +0900
ちょっと前に書いた void unzeller(long days, int* year, int* month, int* day); のように三つ以上のポインタを渡してそこに値を返させる関数は、 複数の実引数に同一のダミー変数のアドレスを渡すと誤りが生じる可能性がある。
わざわざ関数にするはずのないような例だが、 下の例では“自分は最後のだけが必要だから”と第一、 第二引数に同一の変数 dummy のアドレスを与えて呼び出したため結果がおかしくなっている。
#include <stdio.h> void f(int a, int *p2, int *p3, int *p5); main() { int a, b; int dummy; a = 3; f(a, &dummy, &dummy, &b); printf("%d の五倍は %d です.\n", a, b); } /* a の二倍、三倍、五倍を *p2, *p3, *p5 に返す */ void f(int a, int *p2, int *p3, int *p5) { *p2 = 2*a; *p3 = 3*a; *p5 = *p2 + *p3; }引数のポインタが指すメモリを“一時変数” として使うのはそれらが同一のアドレスを指している場合に危険、 ということだ。 そういう呼び出し方はできないとコメントに書いておくか、 そういう呼び出し方をされてもいいようにプログラムを書くか、 どちらかが必要だろう。
unzeller() はこのような呼び出し方をされても正しい値を返すが、 そのうち直しておこう。
2001-01-08 (1) 17:40:50 +0900
この書き直しは行なわなかった。 jul2jd.c の中の 「ユリウス日からユリウス暦への換算」を行なう jd2jul() および greg2jd.c の中の 「ユリウス日からグレゴリウス暦への換算」を行なう jd2greg() がそれに代わるものである。
2002-09-07 (6) 22:37:35 +0900
二三日前、 「(international) week number で第 53 週まである年はどのように分布する? (2000-12-31 (0) 01:54:40 +0900)」 の表をぼんやりと見ていたら、 1800 年などの例外的にうるう年でない年をまたぐと 40 年後が全く同じカレンダーになることに気づいた。 だから、 例えば 1760 年 3 月 1 日から 1800 年 2 月 28 日までの期間に生まれた人は、 生まれた日と 40 歳の誕生日とが同じ曜日になる。
それよりも、そこをまたぐと 12 年で元に戻るほうが面白いか。 干支(えと)も戻るし。 「このカレンダーはとっておくと次の巳年にまた使えます」などなど。
(例外をまたがないとカレンダーは 28 年で元に戻るので、 12 年で戻るなら 12 + 28 = 40 年で戻るのは当然なのだ。)
2001-01-08 (1) 15:13:00 +0900
上のリンクはいまはった。 もとは a href タグをおいていなかった。
2004-05-04 (2) 20:07:01 +0900
広辞苑によれば太陽年は 365.24219... 日だそうだ。 4 年ごとにうるう日をいれると一年あたり 365.25 日でやや多すぎる。 そこで現行では 100 年ごとにうるう日をやめる。これで 365.24 日。 今度は少なすぎるので 400 年ごとにうるう日をやめるのをやめる。 これで一年あたり 365.2425 日となり、太陽年との差は 0.0003 日ほどになる。 もしも 2 のベキである 128 年ごとにうるう日をやめたら、 一年あたり (365 * 128 + 31) / 128 = 365.24218... 日で、 差は 0.00001 日となる。 これは現行の差の約 30 分の 1 だ。
規則は『西暦の「年」が 4 で割り切れる年はうるう年とするが 128 で割り切れる年は例外とする』となろうか。 現行よりも規則が短くて済み、かつ精度がよいという利点がある。 しかし、いまからこれに乗り換えて 2048 年を平年に、というのはきっと無理だ。
この暦での 128 年は 46751 日で、「四万六千日」に近い。 6678 週と 5 日なので 128 年では曜日は元に戻らず、 曜日までこめた周期は 128 * 7 = 896 年となる。 (現行暦では 400 年で曜日も元に戻る。)
2001-01-05 (5) 02:57:10 +0900
3日づけ朝日新聞大阪本社版「天声人語」に 《旧暦では、まだ去年の十二月九日》 とあったが、ほんとうに「去年」なのだろうか?
私が聞いたところでは、旧暦から新暦への変更は “明治5年12月3日をもって明治6年1月1日とする” というようなおふれが出て実施された。 その後は旧暦は公的には作られていないそうだが、 「旧暦がそれ以降も作られつづけたとしたときの (旧暦の)明治5年の(旧暦での)次の年」 は新暦の明治6年とほぼ重なるはずだ。 よって、それを「旧暦の明治6年」と呼んでもよいだろう。 こうやってゆけば、それ以降も、 新暦の年と旧暦の年とを対応づけることができると思われる。
ところが、「平成」は 1989 年 1 月 8 日に始まった。 この日は冬至から 20 日も経っていないので、 冬至を含む月を 11 月と定義する旧暦ではまだ昭和 63 年のはずだ。 ここで「平成」に改元されたので、 旧暦では「昭和」は 63 年までしかなく、 平成元年は 1989 年の春に終わっている ---。 もしもこう考えるなら、それ以降は旧暦のほうが一年近く進んでいるのだ。 天声人語にあったのは《旧暦では、もう今年の十二月九日》 でなければならない。 (ちなみに、「明治」から「大正」、「大正」から「昭和」の改元には、 その日付から判断して、 このような現象は起きていないと思われる。)
ここまでを聞いたある人いわく、 干支で同定するのではないか、と。 そうだ。そのはずだ。 そういえば、理科年表にはその年の干支が載っている。
そこで新たな疑問。 (新暦)1989 年の春にあった旧暦の新年は、 元号で言えば何年の新年だったのだろうか? 「平成元年」という答えは「元年の新年はない」という“伝統”に反する。 「昭和 64 年」? 新暦ではもう元号が変わっているのに。
2001-01-05 (5) 02:15:16 +0900
既存ファイルをログファイルに選ぶと上書きされるのは知っていたが、 既存のファイル名一覧にアイコンが出るので、 そのアイコンをクリックしたらそのファイルが開いて中を確かめられると思い違いをしてしまった。 デフォルト名の telnet.log だから、おそらく大事なものははいっていない。 メモ帳で確認後、全内容を廃棄してサイズ 0 だった可能性大だ。 そうだ、きっとそうだ(と思おう)。
それにしても、アイコンを見るとすぐクリックするのは悪いくせ。
2001-01-05 (5) 00:58:35 +0900
3日づけ朝日新聞大阪本社版1面に 「みんなお疲れ? 新世紀は短め」という記事が出ているが、 何が短いのか本文を読んでもわからない。 確かに今世紀は前世紀よりも1日だけ短いが、そのことではあるまい。 初もうで客の出足が少し鈍い、とあるので人の列かもしれない。
2001-01-04 (4) 22:50:20 +0900
3日づけ朝日新聞大阪本社版1面によると、 4月からさらに字が大きくなるそうだ。 こうやってどんどん大きくなってゆくと、 二十一世紀の終わりには1面につき1文字しか書かれていなかったりして。
ちなみに、そのお知らせには「活字」という言葉はたった一度、 《もともと小さかった新聞活字をいかに大きく見せるか、先人の工夫が……》 と過去を振り返るところに一度使われているだけだ。
2001-01-04 (4) 22:46:03 +0900
お金がなくて福袋が買えなかった人が夜道をとぼとぼ歩いてゆくと、 暗闇から男が 「どうです、これ。5000 円でいかがです」 と声をかけ、福袋のような袋を突き出す。 「そんなお金ありません」 「そうでしょうね。知っていますよ、 さっきそこでお金がなくて福袋をあきらめたのを。 でも、5000 円、あなたが払うんじゃないんです。 私が差し上げるんです。そのうえにこの袋も」 「そんなバカな、お金ももらえて福袋ももらえるなんて」 「福袋じゃないんです。 これは禍袋(わざわいぶくろ)といって、 中には 8000 円から 10000 円相当のわざわいがはいっているんです。 お望みならば、こちらに 50000 円の禍袋もありますよ」…… なんて話はとっくに誰かが考えているんだろうな。
2001-01-04 (4) 22:40:24 +0900
「Zeller の公式の“逆”--- 通算日数から「年」 「月」「日」を計算する関数 (2001-01-04 (4) 01:21:06 +0900)」 で書いた unzeller() を、さらにチェックした。 通算第 1 日から第 3652425 日(= 10000 年 2 月 29 日)まで、 unzeller() の返した結果と、 0 年 3 月 1 日から次々と翌日を求めていったものとを比較する。
その後、unzeller() で century と year を別々に返すのをやめ、 チェックルーチンもそれに合わせて書き換えた。 下に示すのはそれである。 なお、 二重配列の書き方を調べるため K&R2 の §5.7 を見たついでに、 うるう年かどうかの判定をするマクロ isleap を同書にならって (本質的にではないが)書き改めた。
#include <stdio.h> #define isleap(X) (!((X)%4) && (X)%100 || !((X)%400)) /* うるう年? */ void unzeller(long days, int* year, int* month, int* day); int main() { long i; int year = 0; /* 紀元 0 年 */ int month = 3; /* 3 月 */ int day = 1; /* 1 日 */ int y, m, d; /* これらは返り値用 */ printf("このテストには少々時間がかかります. "); printf("「:」が 100 個印字されるまでお待ちください.\n"); for (i=1; i<=3652425L; i++) { static char days[2][13] = { { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } }; unzeller(i, &y, &m, &d); if (year != y || month != m || day != d) { printf("error: %ld\n", i); } if (++day > days[isleap(year)][month]) { /* 明日を捜せ! */ day = 1; month++; if (month == 13) { month = 1; year++; } } if (i%36524L == 0) { /* 途中のメッセージ */ printf(":"); } } printf("\n"); printf("テストは完了しました.\n"); return 0; } /* zeller() の逆。通算日数 days を渡すと year に(十進の)「年」を、month に */ /* 「月」(一月が 1, ……, 十二月が 12)を、day に「日」を入れて返す。 */ void unzeller(long days, int* year, int* month, int* day) { int century; /* (十進の)「年」を右に二桁だけシフトしたもの */ century = (4 * days - 1)/ 146097L; days -= 146097L * century / 4; *year = (4 * days - 1) / 1461; days -= 1461L * *year / 4; *year += 100 * century; *month = (5 * days - 3) / 153 + 3; days -= (153 * *month - 457) / 5; if (*month > 12) { *month -= 12; (*year)++; } *day = days; }
※ 「明日を捜せ!」はウルトラセブン第23話のタイトルでもある。
※ 最初は『「.」が 100 個印字されるまでお待ちください.』としていたが、 これでは「ください」 のあとのピリオドも数に含まれるのかどうかあいまいなのでコロンに改めた。
2001-01-04 (4) 22:34:20 +0900
上のリンクはいまはった。 もとは a href タグをおいていなかった。
2004-05-04 (2) 20:02:16 +0900
金沢の教会の牧師さんが礼拝の最後に 「仰ぎ希(こいねがわ)くは……」 と言っていたような気がする。 これをもし「あおぎこいねがわくば」と言うと非常におかしく感じる。 「願わくは」だったか「願わくば」だったかわからなくなったら、 これを思い出せばいい。
2001-01-04 (4) 19:45:00 +0900
4日づけ朝日新聞大阪本社版国際面に、 米連邦最高裁長官の発言として 「願わくば……」 と書かれているが、元来の形は「願わくは」だ。 もしかして希求法の間違いをこう訳したのかな、 と思ったが違うようだ。 なお、広辞苑第五版は「願わくば」も江戸時代からあるとしている。
2001-01-04 (4) 19:37:37 +0900
4日づけ朝日新聞大阪本社版社会面の桂三木助氏死去の記事に 《幼いころ父と死別し》とあったのを見て “落語に出てくる人物には 「どっちが亡くなって“死別”したんだ?」” などと聞き返すのがいそうだな、と思ったので辞書をひいてみた。
新明解国語辞典第五版で「死別」を見ると「死に別れ」と言い換えてあるので 「死に別れる」をひくと 《〔血縁・夫婦関係にある〕一方の人が死に、永久に会えなくなる》 とある。 この定義では 「AはBに死に別れる」でどちらが死んだのかわからないではないか。
広辞苑第五版は「死に別れる」を 《(親子・夫婦・きょうだいなどの間で)その人が死んだために別れることになる。 永訣する》 と説明しているが、 これでも「その人」が誰を指すのかやや不明。 岩波国語辞典第四版もほぼ同様。芝居などでは死者の霊がものを言うことがあるが、 自分が死んで別れたことを「死に別れた」というだろうか? また、もしも生き返ることになったとすると、 死者の国で再会した人と別れることになるが、 それは「死に別れ」だろうか「生き別れ」だろうか?
2001-01-04 (4) 19:31:31 +0900
最後の文が 《それは「死に別れ」だろうか「行き別れ」だろうか?》 となっていたのは誤変換とみなし、直した。 (「みなし」としたのは、 当時どういうつもりで書いたかはもう思い出せないからだ。)
2004-11-23 (2) 20:56:47 +0900
おじいちゃんおばあちゃんに、孫の声をテープに吹き込んで郵便で送る、 などしていた人が昔はいたと思う。 「文書」を送るための郵便で「音声」を送っていたわけだが、 いまは本来「音声」を送るための電話で「文書」を送る時代だ。
2001-01-04 (4) 18:59:10 +0900
Zeller の公式を改造して
long zeller(int year, int month, int day) { if (month < 3) { year--; month+=12; } return 365L * year + year / 4 - year / 100 + year / 400 \ + (153 * month - 457) / 5 + day; }とするとグレゴリウス暦 0 年 3 月 1 日からの通算日数を返すのだった。 それを次のように変形する。
long zeller(int year, int month, int day) { int century; if (month < 3) { year--; month+=12; } century = year / 100; year %= 100; return 36525L * century - century + century / 4 + 365L * year + year / 4 \ + (153 * month - 457) / 5 + day; }year を(十進表記で)右に二桁だけシフトしたものを century とし、 year の(十進表記での)下二桁を year とした。 (よって、century は一般には「世紀」とは異なる。)
上のプログラムで、 たとえば 1947 年 5 月 3 日の通算日数を調べる場合、 century を含む項は 1900 年 2 月末日(= 1899 年 14 月末日)までの日数、 year を含む項は 1900 年 3 月 1 日から 1947 年 2 月末日(= 1946 年 14 月末日) までの日数になる。 36525 は、うるう年の入れ方に 100 の倍数および 400 の倍数の年の例外がなかったとした場合の 100 年間の日数である。
上のプログラムの 36525L * century - century + century / 4 は (4 * (36525L - 1) + 1) * century / 4 に等しいし、 365L * year + year / 4 は (365L * 4 + 1) * year / 4 に等しいから、 さらに次のように変形できる。
long zeller(int year, int month, int day) { int century; if (month < 3) { year--; month+=12; } century = year / 100; year %= 100; return 146097L * century / 4 + 1461L * year / 4 \ + (153 * month - 457) / 5 + day; }146097 は 400 年間の日数、 1461 は(うるう年を含む)4 年間の日数である。
さて、y = (a * x + b) / c の“逆関数”は x = (c * y + d) / a の形だろうと想像できる。 そうやって、 通算日数から century, year, month, day を順に復元する関数 unzeller() を書いてみた。
#include <stdio.h> #define isleap(X) (!((X)%4) && (((X)%100) || !((X)%400))) /* うるう年? */ long zeller(int year, int month, int day); void unzeller(long days, int* century, int* year, int* month, int* day); int main() { long days; int i, century, year, month, day; /* 0 年、100 年、200 年、300 年の 03-01 の century をチェック */ for (i=0; i<400; i+=100) { days = zeller(i, 3, 1); unzeller(days, ¢ury, &year, &month, &day); if (century != i/100) { printf("century for %04d-03-01 is NG.\n", i); } } /* 100 年、200 年、300 年の 02-28 の century をチェック */ for (i=100; i<=300; i+=100) { days = zeller(i, 2, 28); unzeller(days, ¢ury, &year, &month, &day); if (century != i/100) { printf("century for %04d-02-28 is NG.\n", i); } } /* 400 年の 02-29 の century をチェック */ days = zeller(400, 2, 29); unzeller(days, ¢ury, &year, &month, &day); if (century != 4) { printf("century for 0400-02-29 is NG.\n"); } /* 以上で century のチェックは終了 */ /* 1600 年から 1999 年までの 03-01 の year をチェック */ for (i=1600; i<2000; i++) { days = zeller(i, 3, 1); unzeller(days, ¢ury, &year, &month, &day); if (year != i%100) { printf("year for %04d-03-01 is NG.\n", i); } } /* 1600 年から 1999 年までの 2 月末日の year をチェック */ for (i=1600; i<2000; i++) { days = zeller(i, 2, 28+isleap(i)); unzeller(days, ¢ury, &year, &month, &day); if (year != i%100) { printf("year for %04d-02-%02d is NG.\n", i, 28+isleap(i)); } } /* 以上で year のチェックは終了 */ /* 2000 年の各月の 01 日の month をチェック */ for (i=1; i<=12; i++) { days = zeller(2000, i, 1); unzeller(days, ¢ury, &year, &month, &day); if (month != i) { printf("month for 2000-%02d-01 is NG.\n", i); } } /* 2000 年の各月の末日の month をチェック */ for (i=1; i<=12; i++) { int mday[] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; days = zeller(2000, i, mday[i]); unzeller(days, ¢ury, &year, &month, &day); if (month != i) { printf("month for 2000-%02d-%02d is NG.\n", i, mday[i]); } } /* 以上で month のチェックは終了 */ printf("ほかに出力がなければ, テストは成功しました.\n"); return 0; } /* グレゴリウス暦 0000-03-01 からの通算日数を返す */ long zeller(int year, int month, int day) { if (month < 3) { year--; month+=12; } return 365L * year + year / 4 - year / 100 + year / 400 \ + (153 * month - 457) / 5 + day; } /* zeller() の逆。 century には(十進の)「年」を右に二桁だけシフトしたものが、 year には(十進の)「年」の下二桁が、 month には「月」(一月が 1, ……, 十二月が 12)が、 day には「日」が、 はいります。 */ void unzeller(long days, int* century, int* year, int* month, int* day) { *century = (4 * days - 1)/ 146097L; days -= 146097L * *century / 4; *year = (4 * days - 1) / 1461; days -= 1461L * *year / 4; *month = (5 * days - 3) / 153 + 3; days -= (153 * *month - 457) / 5; if (*month > 12) { *month -= 12; (*year)++; if (*year == 100) { *year = 0; (*century)++; } } *day = days; }main() ではこの関数 unzeller() のチェックを行なっている。 式の形から、 それぞれ最初の日と最後の日でチェックすればいいことがわかるので、 そうしている。
※ century と year を別々に返す必要はないのだが、 なりゆきでそのままにしておいた。
※ 紙とエンピツで定数項を決めたのだが、 やってみたらうまくゆかず、走らせながら適当に決め直した。 その点についてはまたあとで考えよう。
2001-01-04 (4) 01:21:06 +0900
4月から8月までと、9月から翌年1月までとは大の月小の月のパターンが同じだ。 そこで、昔、下のようなカレンダーを考えたことがある。 3月から8月までは右端の1列(青字)は見ないことにする。 9月から翌年2月までは左端の1列(赤字)は見ないことにする。
1 2 3 M 4 5 6 7 8 9 10 A 11 12 13 14 15 16 17 R 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 1 2 3 4 5 6 7 8 A 8 9 10 11 12 13 14 15 S P 15 16 17 18 19 20 21 22 E R 22 23 24 25 26 27 28 29 P 29 30 1 2 3 4 5 6 M 6 7 8 9 10 11 12 13 O A 13 14 15 16 17 18 19 20 C Y 20 21 22 23 24 25 26 27 T 27 28 29 30 31 1 2 3 J 3 4 5 6 7 8 9 10 N U 10 11 12 13 14 15 16 17 O N 17 18 19 20 21 22 23 24 V 24 25 26 27 28 29 30 1 1 2 3 4 5 6 7 8 J 8 9 10 11 12 13 14 15 D U 15 16 17 18 19 20 21 22 E L 22 23 24 25 26 27 28 29 C 29 30 31 1 2 3 4 5 A 5 6 7 8 9 10 11 12 J U 12 13 14 15 16 17 18 19 A G 19 20 21 22 23 24 25 26 N 26 27 28 29 30 31 1 2 3 4 5 6 7 8 9 F 10 11 12 13 14 15 16 E 17 18 19 20 21 22 23 B 24 25 26 27 28きっと見まちがえるから、この案はダメだ。
2001-01-03 (3) 01:53:37 +0900