GolfScript(85个字符)
~:^100/.)3*4/.@8*13+25/-^19%.19*15+@+30%.@11/+29/23--.@-^.4/++7%97--^0@.31/100*\31%)+
用法示例:
$ golfscript.rb codegolf11132.gs <<<2013
20130331
请注意,这对大多数当前答案使用了不同的算法。具体来说,我对Sean Cheshire在对该问题的评论中链接的资源中改编了归因于Lichtenberg的算法。
假定合理的类型(即不是JavaScript的数字)并经过修改以给出month * 31 + day(使用天偏移为0)的原始算法为
K = Y/100
M = 15 + (3*K+3)/4 - (8*K+13)/25
S = 2 - (3*K+3)/4
A = Y%19
D = (19*A+M) % 30
R = (D + A/11)/29
OG = 21 + D - R
SZ = 7 - (Y + Y/4 + S) % 7
OE = 7 - (OG-SZ) % 7
return OG + OE + 92
我提取了一个常见的子表达式,并做了一些其他优化以简化为
K = y/100
k = (3*K+3)/4
A = y%19
D = (19*A+15+k-(8*K+13)/25)%30
G = 23+D-(D+A/11)/29
return 97+G-(G+y+y/4-k)%7
这种方法比另一种方法(Al Petrofsky的20-op算法)具有更多的算术运算,但是它的常数较小。GolfScript无需担心多余的括号,因为它是基于堆栈的,并且由于我的优化布局中的每个中间值都被精确地使用了两次,因此与GolfScript易于访问堆栈中前三项的限制非常吻合。