c99 - 252 karakter
#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]);}
Permütasyonun dairesel doğasından yararlanarak hafif iyileşme. Bu sürüm her zaman döngü benzeri bir satın alma stratejisi oluşturur, bu nedenle önceki (271 karakter) sürümden daha az rastgele, ancak yine de spesifikasyonu karşıladığına inanıyorum.
Çalışan bir platform gerektirir /dev/random. Ben \0büyük dize s atlayarak yaklaşık 8 kapalı vurmak gerekir , ama benim libc %4sadam sayfanın dediği gibi baskı belirteçleri ile uğraşmak gibi görünmüyor .
Karıştırma kötü, ama bu şekilde yapmak "Foo satın almak için Foo satın alma" koşullarını kontrol etmemi engelliyor .
Okunabilir:
#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]);
}