首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >假日礼品交换

假日礼品交换
EN

Code Golf用户
提问于 2011-02-11 00:18:26
回答 9查看 1.1K关注 0票数 11

另一个问题来自我们的内部golfing...this --去年假期前后的一个问题。

问题

安迪,芭比,卡尔,滴滴,厄尔和弗兰正在为对方买礼物。画出交换礼物的名字。

  1. 每个人买一份礼物,收到一份礼物。
  2. 没人会买自己的礼物。
  3. 多次运行解决方案应该会产生不同的结果(给定者-接收者对在每次运行时不应该是可预测的或相同的)。

输入

没有。

输出

格式如本例所示:

安迪为芭比买芭比买Carl卡尔买Didi滴滴买Earl厄尔买Fran弗兰买安迪

EN

回答 9

Code Golf用户

发布于 2019-03-02 23:19:40

Japt,41字节

代码语言:javascript
复制
`AÌ)B¼C¤E¤FÎÂDi¹`qe ö¬ê1 ò mq` ¿ys f 

-两个字节感谢奥利弗!

试试看!

这是我在高层所采取的方法:

  • 解压缩包含参与者名称的字符串
  • 将字符串拆分为数组
  • 洗牌
  • 将每个人分配给具有下一个最高索引的人
  • 数组中的最后一个人被分配给第一个

几年前,我为我的工作创建了一个“秘密圣诞老人”程序,我对这个问题有了一点了解。我们最后请了几个求职者来解决这个问题:)

票数 4
EN

Code Golf用户

发布于 2011-02-13 03:48:34

c99 -252个字符

代码语言:javascript
复制
#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“的条件。

可读性:

代码语言:javascript
复制
#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]);
}
票数 3
EN

Code Golf用户

发布于 2011-02-11 03:17:55

Python-118个字符

代码语言:javascript
复制
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]

Python-120chars

代码语言:javascript
复制
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]
票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档