比比谁的代码短:TLE测试赛结束

    上次提到,我非常关注一个即将举办的另类编程挑战赛Time Limit Exceeded,这个比赛的得分算法很另类,它将根据你代码的总长度和特定字符的多少而定。在刚刚结束的测试赛中,有几个题目非常具有挑战性,参赛者提交的代码也是牛气冲天。

 
Power of 2
问题:
    输入数据含有多行,每行一个正整数。对每个数,检查看它是否是2的幂,是则输出yes,不是则输出no。
    你的程序不允许使用分号。
    规定0也是2的幂。

得分:
    S= length of code + number of whitespaces;
    score = (250000)/(S^2);


样例输入:
2
3
4
5
0

样例输出:
yes
no
yes
no
yes

目前的最好结果为76分:
main(t){while(~scanf("%d",&t)&&puts(t&t-1?"no":"yes")){}}

 
Count 1 2 3
问题:
    写一个程序,该程序运行后打印出从1到50 000的整数。
    你不允许使用循环语句和跳转语句(for、while、goto)。
    你不允许使用#define 。

得分:
    S= length of code – number of whitespaces;
    score = 11 + (500*400)/(S^2);

目前的最好结果为124分,仔细体会这段代码,非常的牛:
n;main(){n<5e4&&main(printf("%dn",++n));}

 
Segmentation Fault
问题:
    写一个程序,该程序运行后打印出从1到5 000 000的整数。
    你不允许使用循环语句和跳转语句(for、while、goto)。
    你不允许使用#define 。

得分:
    S= length of code - numer of whitespaces;
    score = 51 + (500*1600)/(S^2);

这道题和上道题的区别就是:不加改进的递归会导致堆栈溢出。
目前的最好结果为234分,仔细观察这段代码,看他是怎样避免堆栈溢出的:
j;main(i){i>1e5||printf("%dn",++j)+main(i+1);i<2&j<5e6&&main(1);}

27 条评论

发表评论

9  +  1  =