C ++,191
使用main and includes,它的值为246,不使用main and includes,它只有178。换行符算作1个字符。将所有数字视为无符号。我没有因主返回一个未签名的int而得到警告,因此它是公平的游戏。
我第一次提交代码高尔夫。
#include<iostream>
#define R return
typedef unsigned int U;U a(U x,U y){R y?a(x^y,(x|y^x^y)<<1):x;}U d(U i){if(i==3)R 1;U t=i&3,r=i>>=2;t=a(t,i&3);while(i>>=2)t=a(t,i&3),r=a(r,i);R r&&t?a(r,d(t)):0;}U main(){U i;std::cin>>i,std::cout<<d(i);R 0;}
使用移位反复将数字除以4,然后计算总和(收敛到1/3)
伪代码:
// typedefs and #defines for brevity
function a(x, y):
magically add x and y using recursion and bitwise things
return x+y.
function d(x):
if x = 3:
return 1.
variable total, remainder
until x is zero:
remainder = x mod 4
x = x / 4
total = total + x
if total and remainder both zero:
return 0.
else:
return a(total, d(remainder)).
顺便说一句,我可以通过命名d main并使其采用char **并将程序返回值用作输出来消除main方法。它将返回命令行参数的数量除以3(四舍五入)。这使它的长度达到了广告191:
#define R return
typedef unsigned int U;U a(U x,U y){R y?a(x^y,(x|y^x^y)<<1):x;}U main(U i,char**q){if(i==3)R 1;U t=i&3,r=i>>=2;t=a(t,i&3);while(i>>=2)t=a(t,i&3),r=a(r,i);R r&&t?a(r,d(t)):0;}