כיצד ניתן לייעל את התוכנית?

עמוד

ברוכים הבאים לאתר תחרויות קודגורו! פורומים חידות כיצד ניתן לייעל את התוכנית?

מוצגות 3 תגובות – 1 עד 3 (מתוך 3 סה״כ)
  • מאת
    תגובות
  • #77145
    CodeGuru
    מנהל בפורום

    התוכנית הבאה פותרת חידה.

    int b,p,w;

    int g(int d, int l)
    {
     long long wa[ 6]={1<<1,1<<26,1<<3,1<<24,1<<9,1<<18};
     char sol[ 6]= {'e','w','s','n','d','u'};
     int ca[ 6]={0111111111,0444444444,0007007007,0700700700,0000000777,0777000000};

     do w=(w+2)%6; while (d–&1); if (++d) w^=1;
     do {p=p*wa[ w]%((1<<27)-1); if (p&(b|ca[ w])) return(0); b ^= p;} while (l–);
     return(sol[ w]);
    }

    void main()
    {
     int s,i,d1,l=0x1298f; //b10010100110001111;
     long long d;
     char sol[17];

     for (s=1; s<3; s++)
      for (d=0; d<(long long)1<<34; d+=(long long)1<<(0<<1)) {
       for (b=p=s,d1=w=0,i=16; i>=0; i–)
        if (!(sol[ i]=g(d>>(i<<1)&3,l>>i&1))) break;
       if (i<0){for (i=17;i;) printf("%c",sol); putchar('n');}
      }
    }

    ניתן לשפר אותה כך שתפתור את החידה הרבה יותר מהר.

    כיצד ניתן לעשות זאת בשינוי מספר תווים מזערי?

    #78199
    yoav zilberman
    משתתף

    מישהוא יכול לתרגם לג'אווה אני לא מבין כלום….

    #78183
    CodeGuru
    מנהל בפורום

    רצ"ב תרגום לג'אווה

    public

    class Riddle {

    static int b,p,w;

    static char g(int d, int l)

    {

    int []wa = {1<<1,1<<26,1<<3,1<<24,1<<9,1<<18};

    char[]sol= {'e','w','s','n','d','u'};

    int []ca = {0111111111,0444444444,0007007007,0700700700,0000000777,0777000000};

    do w=(w+2)%6; while ((d–&1)!=0); if (++d!=0) w^=1;

    do {p=(int)(((long)(p)*wa[ w])%((1<<27)-1)); if ((p&(b|ca[ w]))!=0) return(0); b ^= p;} while (l–!=0);

    return(sol[ w]);

    }

    public static void main(String[] args) {

    int s,i,l=0x1298f; //b10010100110001111;

    char[] sol=new char[17];

    for (s=1; s<3; s++)

    for (long d=0; d<(long)1<<34; d+=(long)1<<(0<<1)) {

    b=s; p=s; w=0;

    for (i=16; i>=0; –i)

    if (0==(sol[ i]=g((int)((d>>(i<<1))&3),(l>>i)&1))) break;

    if (i<0){for (i=17;i!=0;) System.out.print(sol); System.out.println();}

    }

    }

    }

מוצגות 3 תגובות – 1 עד 3 (מתוך 3 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.