c99 - 252 ký tự
#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]);}
Cải thiện nhẹ bằng cách tận dụng tính chất vòng tròn của hoán vị. Phiên bản này luôn xây dựng chiến lược mua giống như vòng lặp, vì vậy nó ít ngẫu nhiên hơn phiên bản trước (271 ký tự), nhưng tôi tin rằng nó vẫn đáp ứng được thông số kỹ thuật.
Yêu cầu một nền tảng có hoạt động /dev/random. Tôi đã có thể loại bỏ khoảng 8 bằng cách bỏ qua các \0s trong chuỗi lớn, nhưng libc của tôi dường như không xử lý các công %4scụ in ấn theo cách mà trang man nói.
Shuffle là xấu, nhưng làm theo cách đó ngăn tôi khỏi phải kiểm tra các điều kiện "Foo mua cho Foo" .
Có thể đọc được
#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]);
}