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ได้ ฉันควรจะสามารถเคาะออกประมาณ 8 โดยการละเว้น\0ในสตริงใหญ่ แต่ libc ของฉันดูเหมือนจะไม่ได้เกี่ยวข้องกับ%4sspecifiers พิมพ์วิธีที่หน้าคนพูด
สับไม่ดี แต่ทำมันที่ป้องกันไม่ให้ฉันทางจากที่มีการตรวจสอบ"ซื้อ 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]);
}