另一个问题来自我们的内部golfing...this --去年假期前后的一个问题。
安迪,芭比,卡尔,滴滴,厄尔和弗兰正在为对方买礼物。画出交换礼物的名字。
没有。
格式如本例所示:
安迪为芭比买芭比买Carl卡尔买Didi滴滴买Earl厄尔买Fran弗兰买安迪
发布于 2019-03-02 23:19:40
`AÌ)B¼C¤E¤FÎÂDi¹`qe ö¬ê1 ò mq` ¿ys f -两个字节感谢奥利弗!
这是我在高层所采取的方法:
几年前,我为我的工作创建了一个“秘密圣诞老人”程序,我对这个问题有了一点了解。我们最后请了几个求职者来解决这个问题:)
发布于 2011-02-13 03:48:34
c99 -252个字符
#include <stdio.h>
#define G for(i=0;i<6;i++)
char*n="Andy\0Barb\0Carl\0Didi\0Earl\0Fran",*p[7];int i,j;int main()
{FILE*r=fopen("/dev/random","r");G p[i]=n+5*i;G{j=fgetc(r)%6;p[7]=p[j]
;p[j]=p[i];p[i]=p[7];}G printf("%s buys for %s\n",p[i],p[(i+1)%6]);}利用排列的循环性质,略为改进。这个版本总是建立一个循环样的购买策略,所以它比以前的版本(271字符)更少的随机性,但我相信它仍然符合规范。
需要一个具有工作/dev/random的平台。我应该可以通过在大字符串中省略\0s来敲掉大约8,但我的libc似乎并没有像手册中所说的那样与%4s打印说明符打交道。
洗牌是不好的,但这样做,使我不必检查"Foo购买为Foo“的条件。
#include <stdio.h>
char *n="Andy\0Barb\0Carl\0Didi\0Earl\0Fran",
*p[7]; /* 7th cell for temp */
int i,j;
int main(){
FILE*r=fopen("/dev/random","r");
for(i=0;i<6;i++)
p[i]=n+5*i; /* Initialize the pointers */
for(i=0;i<6;i++){
j=fgetc(r)%6; /* Poor numeric properties. Cest le Code Golf */
p[7]=p[j];
p[j]=p[i];
p[i]=p[7];
}
for(i=0;i<6;i++)
printf("%s buys for %s\n",p[i],p[(i+1)%6]);
}发布于 2011-02-11 03:17:55
from random import*;L="Andy Barb Carl Didi Earl Fran".split()
for i in sample(range(6),6):print L[i-1],"buys for",L[i]import random as R;L="Andy Barb Carl Didi Earl Fran".split();R.shuffle(L)
for i in range(6):print L[i-1],"buys for",L[i]https://codegolf.stackexchange.com/questions/838
复制相似问题