C 言語による,非常にエレガントな解がある。出典は忘れた。
#include <stdio.h>
int dayofweek(int y, int m, int d) /* 0 = Sunday , 1 <= m <= 12, y > 1752 or so */
{
return y -= m < 3, (y + y/4 - y/100 + y/400 + "032503514624"[m-1]-'0' + d) % 7;
}
int main(void)
{
int y, m, d;
y = 1996;
m = 2;
d = 27;
printf("%i true value = 2\n", dayofweek(y, m, d));
return 0;
}
/* オリジナル */
#if 0
int dayofweek(int y, int m, int d) /* 0 = Sunday */
/* 1 <= m <= 12, y > 1752 or so */
{
static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
y -= m < 3;
return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}
#endif