গল্ফিং এ উইজেল প্রোগ্রাম


65

রিচার্ড ডকিন্স তাঁর দ্য ব্লাইন্ড ওয়াচ মেকার গ্রন্থে একটি ওয়েসেল প্রোগ্রামের বর্ণনা দিয়েছেন । অ্যালগরিদম নিম্নলিখিত হিসাবে বর্ণনা করা যেতে পারে:

  1. 28 টি অক্ষরের এলোমেলো স্ট্রিং দিয়ে শুরু করুন। বৈধ অক্ষরগুলি সমস্ত বড় হাতের অক্ষর এবং স্থান space

  2. সেই স্ট্রিংয়ের 100 টি অনুলিপি তৈরি করুন, সেই চরিত্রটির প্রতি 5% সুযোগ দিয়ে এলোমেলো অক্ষর দ্বারা প্রতিস্থাপন করা হবে।

  3. প্রতিটি নতুন স্ট্রিংকে লক্ষ্য করুন "METHINKS IT IS LIKE A WEASEL" এর সাথে তুলনা করুন এবং স্ট্রিংয়ের অক্ষরের সংখ্যা অনুসারে প্রত্যেককে একটি স্কোর দিন যা সঠিক এবং সঠিক অবস্থানে রয়েছে।

  4. যদি নতুন স্ট্রিংগুলির কোনওটিরই পারফেক্ট স্কোর (28) থাকে তবে থামুন।

  5. পদক্ষেপ 3 থেকে সর্বোচ্চ-স্কোরিং স্ট্রিং চয়ন করুন আপনি কীভাবে টাই তৈরি করবেন তা আপনার উপর নির্ভর করে তবে কেবল একটি স্ট্রিং বেছে নেওয়া যেতে পারে। নির্বাচিত স্ট্রিং নিন এবং পদক্ষেপ 2 এ যান।

নীচের ফর্ম্যাটে প্রতিটি প্রজন্মের সর্বোচ্চ-স্কোরিং স্ট্রিংটি মুদ্রণের সময় বিজয়ীর সংক্ষিপ্ত কোড স্নিপেট হবে answer

এই বিন্যাসে উত্তর দয়া করে

লোকেরা যদি অন্য লোকের উত্তরগুলি পরীক্ষা করে সহায়তা করতে পারে তবে খুব সহায়ক হবে!


4
কোন অক্ষর অনুমোদিত? ইউনিকোড? ছোট হাতের?
অরিওল

4
আহ, আমি ডকিন্সকে ভালবাসি। একটি সাধারণ অ্যালগরিদমে দেখানো হয়েছে বিবর্তনের সৌন্দর্য এবং সম্ভাব্যতা।
ক্রંચার

"পদক্ষেপ 1.5" দিয়ে পদক্ষেপ 4 আরও ভাল প্রতিস্থাপন করা যেতে পারে যদি নতুন স্ট্রিংগুলির একটি নিখুঁত স্কোর থাকে (28), থামান "এবং" পদক্ষেপ 4) সর্বোচ্চ স্কোরিং স্ট্রিং নিন এবং 1.5 ধাপে যান? " এটি হল, যদি প্রাথমিক এলোমেলো স্ট্রিংটি বিজয়ী হয় তবে আমাদের কি ফ্যান আউট দরকার?
রব স্টার্লিং

1
আমি এখানে অপারেশন ক্রম হিসাবে কিছুটা বিভ্রান্ত। মূল স্ট্রিংয়ের উপর ভিত্তি করে আমরা 100 টি নতুন স্ট্রিংগুলি তৈরি করি সেই উদ্দেশ্যটি কি? অথবা এটি কি 100 টি নতুন স্ট্রিং রয়েছে প্রথম স্ট্রিংটি মূলের উপর ভিত্তি করে এবং প্রতিটি পরবর্তী স্ট্রিং পূর্ববর্তী স্ট্রিংয়ের উপর ভিত্তি করে? অ্যালগরিদমের বিবরণটি পূর্বেরটিকে বোঝায়, যখন নমুনা আউটপুটটি পরবর্তীকালের বলে মনে হয়।
ইসজি

2
নির্দেশাবলী বেশ পরিষ্কার, কিন্তু মূল স্ট্রিং লক্ষ্য হলে কি হবে?
খ্রিস্টান পামস্টেরেনা

উত্তর:


27

এপিএল (143)

0{⍵≢T←'METHINKS IT IS LIKE A WEASEL':c∇⍨1+⍺⊣⎕←(⍕⍺),':'c'-- score:',s⊣c←⊃c/⍨G=s←⌈/G←{+/⍵=T}¨c←{⍵{⍵:⍺⋄C[?27]}¨9≠?28/20}¨100⍴⊂⍵}⊃∘(C←27↑⎕A)¨?28/27

ব্যাখ্যা:

  • 0{... }⊃∘(C←27↑⎕A)¨?28/27: Cপ্রথম 27 টি বড় বড় অক্ষর সেট করা আছে। কেবল 26 টি আছে, তাই 27 তম উপাদানটি একটি স্থান হবে। এ থেকে 28 এলোমেলো আইটেম নির্বাচন করুন C। এটি প্রথম হবে । প্রথম (প্রজন্ম) হবে 0

  • ⍵≢T←'METHINKS IT IS LIKE A WEASEL: Tস্ট্রিং সেট 'METHINKS IT IS LIKE A WEASEL'। যতক্ষণ না সমান T:

    • {... }¨100⍴⊂⍵: 100 কপি করুন । এই প্রতিটি জন্য ...
      • 9≠?28/20: 1 থেকে 20 অবধি 28 টি র্যান্ডম সংখ্যা নির্বাচন করুন bit বিটমাস্ক করুন যেখানে প্রতিটি 1মানে র্যান্ডম সংখ্যাটি সমান নয় 9। (এর অর্থ ক এর ৫% সম্ভাবনা 0)।
      • ⍵{⍵:⍺⋄C[?27]}¨: প্রতিটি অক্ষরের জন্য , যদি সংশ্লিষ্ট বিটটি থাকে তবে 1সেই চিঠিটি রাখুন, অন্যথায় এটিকে এলোমেলোভাবে বেছে নেওয়া উপাদান দিয়ে প্রতিস্থাপন করুন C
    • c←: 100 টি রূপান্তরিত স্ট্রিংগুলিকে এতে সংরক্ষণ করুন c
    • G←{+/⍵=T}¨c: প্রতিটি উপাদানের জন্য c, স্কোর গণনা করুন (মিলিত অক্ষরের পরিমাণ T) এবং স্কোরগুলিকে সঞ্চয় করুন G
    • s←⌈/G: সর্বাধিক স্কোর এবং এটিতে সঞ্চয় করুন s
    • c←⊃c/⍨G=s: cযার স্কোর s(সর্বাধিক) এর সমান হতে প্রথম আইটেমটি নির্বাচন করুন এবং এটি cআবার জমা করুন।
    • ⎕←(⍕⍺),':'c'-- score:',s: প্রদত্ত বিন্যাসে প্রজন্মটি মুদ্রণ করুন ( বর্তমান প্রজন্মটি, cবর্তমানের সেরা স্ট্রিং, sস্কোর)
    • c∇⍨1+⍺: প্রজন্ম বৃদ্ধি করুন এবং বর্তমান সেরা স্ট্রিং ( c)টিকে ইনপুট হিসাবে ব্যবহার করে আবার মিউটেশন চালান ।

5
ব্যাখ্যা? এই বর্ণমালা স্যুপ মত দেখাচ্ছে! :)
টোস্টিমেলস 16

2
@ টোস্টিমাগলস: যুক্ত ব্যাখ্যা
মেরিনাস

1
এখন পর্যন্ত সেরা উত্তর, এটির সাথে একটি ব্যাখ্যা দিতে দুর্দান্ত।
নোয়েলকেড

1
@মারিনাস আপনি কি উইজার্ড?
টোস্টিমাগেলস 8:54

3
বুলক্র্যাপ, আপনি সবে এমএস ওয়ার্ড খোলেন এবং উইংডিংস ফন্ট ব্যবহার করেছেন
সোয়াগ

11

গণিত - 238 236 225

c:="@"~CharacterRange~"Z"~RandomChoice~28/."@"->" "
For[s=""<>c;i=0,{d,s}=Sort[{#~HammingDistance~"METHINKS IT IS LIKE A WEASEL",#}&@
StringReplace[s,_/;20Random[]<1:>c〚1〛]&~Array~100]〚1〛;
d>0Print[i++,":"s," -- score: ",28-d],]

উদাহরণ আউটপুট

0:  CYPMEIHADXRXVTFHERYOZNRVFCSQ  -- score: 0
1:  CYPMEIHADIRXVTFBERYOZNRVFCSQ  -- score: 1
2:  CYPMEIHA IRXVTFBIRYOZNRVFCSQ  -- score: 3
...
50:  METHINKS IT IS LIKE A WEASEL  -- score: 28

9

পাইথন (273)

from random import choice as c
n=range
a=map(chr,n(65,91)+[32])
s=map(c,[a]*28)
p=x=0
while p<28:
 p,s=max((sum(g==r for g,r in zip(y,'METHINKS IT IS LIKE A WEASEL')),y)for y in ([c(a+[x]*513)for x in s]for _ in n(100)));print '%d: %s -- score: %d' % (x,''.join(s),p);x+=1

6

কে, 173 167

o:"METHINKS IT IS LIKE A WEASEL"
i:0;{~x~o}{-1($i),": ",(r:a@*&b=c)," -- score: ",$c:max@b:+/'o=/:a:{x{if[0~*1?20;x[y]:*1?s];x}/!#x}'100#,x;i+:1;r}/28?s:"c"$32,65+!26;

/

0: FQRZPHACDIBHZOUUCYKKFBJWVNVI -- score: 1
1: FQRZP ACDITHCOUUCYKKFBJWVNVI -- score: 2
2: FQRZP AFDIT COUUCYKKFBJWVNVI -- score: 3
...
51: METHINKS IT IS LIKECA WEASEL -- score: 27
52: METHINKS IT IS LIKECA WEASEL -- score: 27
53: METHINKS IT IS LIKE A WEASEL -- score: 28

6

পাইথন: ২৮২ টি অক্ষরের কোনও আধা কলোন নেই

from random import*
g,r,l,c=0,0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ ",choice
k=map(c,[l]*28)
while(r!=28):
 r,k=max((sum(i==j for i,j in zip(t,"METHINKS IT IS LIKE A WEASEL")),t)for t in[[c(l)if random()<.05 else i for i in k]for i in[1]*100])
 print`g`+":","".join(k),"-- score:",`r`
 g+=1

278 এর সাথে:

from random import*;g,r,l,c=0,0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ ",choice;k=map(c,[l]*28)
while(r!=28):r,k=max((sum(i==j for i,j in zip(t,"METHINKS IT IS LIKE A WEASEL")),t)for t in[[c(l)if random()<.05 else i for i in k]for i in[1]*100]);print`g`+":","".join(k),"-- score:",`r`;g+=1

4
আপনার স্পষ্টভাবে ভাষাটি বলা উচিত এবং যেহেতু প্রশ্নটি কোড-গল্ফকে ট্যাগ করা হয়, তাই আপনার একটি অক্ষর গণনা সরবরাহ করা উচিত।
টিম সেগুইন

করবেন, টিপস সময় জন্য ধন্যবাদ।
নওলকড

এছাড়াও, অক্ষরের সংখ্যা আরও কমিয়ে আনতে আপনার সমস্ত অক্ষরের পরিবর্তনশীল নাম ব্যবহার করা উচিত।
ডুরকনবব

আরও কিছুটা নিচে নামার জন্য অপেক্ষা করা, এখনও কিছু সহজ জয় পেয়েছে। ধন্যবাদ।
নওলকড

1
সত্যিই কি সব একই অক্ষর দিয়ে শুরু করার কথা? :)
জোছিম ইসাকসন

5

জাভাস্ক্রিপ্ট, 277 246

c=m=>" ABCDEFGHIJKLMNOPQRSTUVWXYZ"[0|Math.random()*m];for(s=[k=28];e=k;s[--k]=c(27));for(;alert(k+++": "+s.join("")+" -- score: "+e),e<28;s=t)for(z=100;f=0,z--;f>e&&(t=n,e=f))n=s.map((h,p)=>(h=c(540)||h,f+=h=="METHINKS IT IS LIKE A WEASEL"[p],h))

(তীর ফাংশন সমর্থন প্রয়োজন; ইন্ডেন্টেশন কেবল পঠনযোগ্যতার জন্য যুক্ত করা হয়েছে)

// c() returns a random char using `m` as an index max
c=m=>" ABCDEFGHIJKLMNOPQRSTUVWXYZ"[0|Math.random()*m];

// generate base string `s`
for(s=[k=28];e=k;s[--k]=c(27));

// while score `e` is < 28
for(;alert(k+++": "+s.join("")+" -- score: "+e),e<28;s=t)
    for(z=100;f=0,z--;f>e&&(t=n,e=f))            // do 100 mutations; keep best score
        n=s.map((h,p)=>(                         // map `s` to `n` with 5% mutation
            h=c(540)||h,                         // change the char in 5% of cases
            f+=h=="METHINKS IT IS LIKE A WEASEL"[p],  // score++ if char matches
            h                                    // arrow function return character
        ))

পরিবর্তন করুন মুক্ত মনে alertকরার console.logযদি আপনি একটি আরো মনোরম সঞ্চালনের অভিজ্ঞতা চাই।

এখানে কিছু নিফটি গল্ফ বিট রয়েছে:

  • ফাংশনটি cবর্ণমালা স্ট্রিং থেকে একটি এলোমেলো অক্ষর প্রদান করে " ABC..."। ফাংশনটি এলোমেলোভাবে র্যান্ডম সূচক নির্বাচনের জন্য উপরের বাউন্ড হিসাবে ব্যবহার করে। বেস স্ট্রিং তৈরি করার সময় আমরা ব্যবহার করি 27, সুতরাং ফাংশনটি স্বাভাবিকভাবে আচরণ করে।

    তবে, আমরা 540 ইন র্যান্ডম এপার বাউন্ডের জন্য জিজ্ঞাসা করে এই আচরণটি আপত্তি করি h = c(540) || h। সময়ের মাত্র 5% cআসলে একটি স্ট্রিং ফিরে আসবে (কারণ 540 * .05 = 27); অন্যান্য 95% সময়ের মধ্যে, এলোমেলোভাবে নির্বাচিত সূচকটি স্ট্রিংয়ের দৈর্ঘ্যের বাইরে চলে যায়, সুতরাং ফাংশনটি ফিরে আসে undefined। এই মিথ্যা মানটির কারণে একটি লজিক্যাল-ওআর ক্যাসকেড হয় c(540) || h, তাই মূল mapমানটি hব্যবহৃত হয় (অর্থাত্ কোনও প্রতিস্থাপন ঘটে না)।

  • স্কোর-summing অপারেশন করে f+=h=="METHINKS IT IS LIKE A WEASEL"[p], যেখানে বলা আছে "যোগ trueকরতে fযদি বর্তমান mapচরিত্র hমিলে যায় pতম বেজি স্ট্রিং এর চরিত্র"। সংখ্যা-প্লাস-বুলিয়ান সংযোজন বুলিয়ান ফলাফলকে উভয়ই 0বা একটিতে জোর করে 1, যার অর্থ fকেবলমাত্র তখনই বাড়ানো হয় যখন লক্ষ্য WEASEL স্ট্রিংয়ের সাথে ম্যাচ হয়।


আপনি vকোডে বিবৃত কেন ? এটি অন্য কোথাও উল্লেখ করা হয়নি। আপনি নিজেকে 2 অক্ষর বাঁচাতে পারেন।?
ওয়েলওয়েস্ট

1
@ Eliseod'Annunzio vসঞ্চিত তীর ফাংশন একটি আর্গুমেন্ট c: c = (v => ...)। আপনি যদি তর্ক ছাড়াই একটি তীর ফাংশনটি সংজ্ঞায়িত করতে চান তবে এটির ()=>...পরিবর্তে দুটি অক্ষর ব্যয় হয় v=>..., সুতরাং কেবল অব্যবহৃত যুক্তিটি রাখাই ভাল।
অ্যাপসিলাররা

কোডের চালাক ব্যবহার!
ওয়েলওয়েস্ট

ভাল কৌশল k=s=[28]এবং ++আমার ধারণা ছিল না!
ডম হেস্টিংস

5

আর ( 245 239 238 টি অক্ষর)

t=strsplit("METHINKS IT IS LIKE A WEASEL","")[[1]]
h=sample
s=h(f<-c(LETTERS," "),28,T)
c=0
while(!all(s==t)){for(i in 1:100){z=ifelse(runif(28)<.05,h(f,1),s)
y=sum(s==t)
if(sum(z==t)>y)s=z}
cat(c<-c+1,": ",s," -- score: ",y,"\n",sep="")}

দেয়:

1: HSSSIMJM ETJISGBSCIELUYPLSED -- score: 7
2: HSSSIMJM ETJISGBSKIELUYPLSED -- score: 8
3: EETLITLM ETJISTBSKIELUYLLSEL -- score: 11

...

78: METHINKS IT IS LIKEEA WEASEL -- score: 27
79: METHINKS IT IS LIKEEA WEASEL -- score: 27
80: METHINKS IT IS LIKEEA WEASEL -- score: 27
81: METHINKS IT IS LIKE A WEASEL -- score: 28

আপনি 0: ...যদি প্রথম বারের জন্য 1 বার catবাড়ান তবে আপনি আপনার প্রথম লাইনটি কীভাবে পাবেন c? (+1 তবুও আমি আরও এক ঘন্টা ছোট করার জন্য চেষ্টা করছি এবং আমি এখনও করতে পারি না :))
প্লানাপাস

@ প্লানাপাস এটি সত্য, এটি একটি পুরানো সংস্করণ থেকে ছিল (যা কিছুটা দীর্ঘ ছিল)। হয় আমি শুরুতে এটি -1 এ পরিবর্তন করব, অথবা প্রথম লাইনে 1 ব্যবহার করব ...
হেনরিক

আমি আপনার কোড নিয়ে দুটি সমস্যা দেখছি। প্রথমত, ifelse(…,h(f,1),…)এটি একই র্যান্ডম চর দ্বারা সমস্ত নির্বাচিত পজিশন প্রতিস্থাপন করে। আপনি এই দিকের নিয়মগুলি ব্যাখ্যা করতে পারেন তবে এগুলি বাঁকানোর মতো মনে হয় তাই আমি কমপক্ষে এটি উল্লেখ করব। দ্বিতীয়ত, আপনি লুপের s=zমধ্যে প্রতিস্থাপন করেন 1:100, তাই আপনি একই স্ট্রিংয়ের 100 টি অনুলিপি তৈরি করছেন না, তবে কখনও কখনও একটি অনুলিপিও তৈরি করেন। এটি আমার কাছে কোনও নিয়ম ভঙ্গ করার মতো মনে হয়, কেবল এটি বাঁকানো নয়।
এমভিজি

5

সি 256

char c[101][29],s,n,z,b,j,i,w;g;main(){for(;w<28;printf("%d: %s -- score: %d\n",g++,c[b=n],w))for(i=w=0;i<101;i++)for(s=j=0;j<28&&!(i==b&&g);j++)(s+=(c[i][j]=g&&rand()%20?c[b][j]:(z=rand()%27)?'A'+z-1:' ')=="METHINKS IT IS LIKE A WEASEL"[j])>w?n=i,w=s:0;}

সাধারণ তিনটি লুপস, ইনিশিয়ালাইজেশন, পিতামাতার কাছ থেকে নতুন স্ট্রিং তৈরি করা এবং একই বিবৃতি দ্বারা গণনা করা স্কোর। এটি ইন্ডেন্টেশন সহ খুব বেশি পঠনযোগ্য নয়।

সি 252

i,g,n,b,o,s,w,z;char c[2929];main(){for(;(o=i%29)|i|w<28;(i=(i+1)%2929)||printf("%d: %s -- score: %d\n",g++,&c[b=n],w))(s+=o>27?-s:((i-o!=b||!g)&&(c[i]=g&&rand()%20?c[b+o]:(z=rand()%27)?'A'+z-1:' ')=="METHINKS IT IS LIKE A WEASEL"[o]))>w?n=i-o,w=s:0;}

একটি লুপ, একটি অ্যারে সহ সমস্ত 101 টি স্ট্রিং রয়েছে।

এই দ্বিতীয় সংস্করণটি নিয়মগুলি ভঙ্গ করে কারণ এটি স্টেপ 1 (সমতুল্য) পদক্ষেপ 1 থেকে মুদ্রণ করে, তবে এটি ছিল শেষ স্ট্রিংটি প্রিন্ট করা হয় না। আমি আকারে বিস্ফোরিত না করে কীভাবে এটি ঠিক করব কীভাবে স্ট্যাম্পড আছি। আমি এটি প্রেরণার জন্য যাইহোক পোস্ট করছি।

সি 256

struct{char d[29];}p,t,n;i,j=-1,z,s,w,g;main(){for(;w<28;j>1&&printf("%d: %s -- score: %d\n",g++,(p=n).d,w))for(;j++%100;p=j?p:t)for(s=0,i=28;i--;)(s+=(t.d[i]=j&&rand()%20?p.d[i]:(z=rand()%27)?'A'+z-1:' ')=="METHINKS IT IS LIKE A WEASEL"[i])>w?n=t,w=s:0;}

101 টি স্ট্রিং ধরে রাখার জন্য অ্যারে তৈরি করার পরিবর্তে ভিন্ন পদ্ধতির পরিবর্তে 100 বার স্ট্রিংটি পুনরায় জেনারেট করুন এবং সহজে অনুলিপি করার জন্য স্ট্রাক্ট অ্যাসাইনমেন্ট ব্যবহার করুন। -1 এ "পুনরাবৃত্তি 100 বার" কাউন্টার শুরু করার মাধ্যমে এবং কৌশলগতভাবে পোস্ট-ইনক্রিমেন্টের মাধ্যমে বেছে বেছে সাবধানতার সাথে পরিচালনা করার মাধ্যমে প্রাথমিককরণ করা হয় ization খুব ভিন্ন পদ্ধতির সত্ত্বেও এটি প্রথম প্রয়াসের মতোই শেষ হয় - 256 টি অক্ষর।


4

সি # - 436

namespace System.Linq{class W{static void Main(){var r=new Random();
Func<char>c=()=>(char)(r.Next(33,60)%59+32);var s="";
while(s.Length<28)s+=c();var a="METHINKS IT IS LIKE A WEASEL";int b=0;
while (s!=a){int m=-1;var f=s;for(int i=0;i<100;i++){
var l=string.Join("",s.Select(j=>(r.Next(20)!=0?j:c()).ToString()));
int o=Enumerable.Range(0,28).Sum(j=>l[j]==a[j]?1:0);if(o>m){f=l;m=o;}}
Console.WriteLine(b+++": "+(s=f)+" -- score: "+m);}}}}

এটি ভেঙে গেছে আপনার সিস্টেম ব্যবহার করা দরকার; বা ম্যানুয়ালি যোগ্যতা অর্জনকারী সিস্টেম।
ইটনাটালি

না, আপনি না। ideone.com/4alNSi
টিয়া

আহ ভাল। এনএস ঘোষণাকে ব্যবহারের জন্য দুঃখিত হিসাবে দেখেছে।
ইটনাটালি

3

লুয়া 5.1 (502)

সংক্ষিপ্ত সংস্করণ:

s,t,b,c,i,q,a,d,f="ABCDFGHJYUEGKSHNCOLPQIEJUSNC","METHINKS IT IS LIKE A WEASEL",1,math.random,table.insert,1,string.sub,100,28 while q~=f do r,p={},{} for x=1,d do i(r,s) i(p,0) e="" for o=1,f do if c(1,20)==1 then if c(1,27)==1 then e=e.." " else e=e..string.char(c(65,90)) end else e=e..a(r[x],o,o) end end r[x]=e for y=1,f do if a(r[x],y,y)==a(t,y,y) then p[x]=p[x]+1 end end if p[x]==f then s=r[x] end end for x=1,d do if p[x]>=q then s,q=r[x],p[x] end end print(b..":",s,"-- score: "..q) b=b+1 end

এবং সংস্করণ পড়ার পক্ষে সহজ (মন্তব্য সহ):

s,t,b,c,i,q,a,d,f="ABCDFGHJYUEGKSHNCOLPQIEJUSNC","METHINKS IT IS LIKE A WEASEL",1,math.random,table.insert,1,string.sub,100,28
--s=random string, t=target, b=counter, c=reference to math.random, i=reference to table.insert, q=top score,a=reference to string.sub, d=constant (100), f=constant (28)
while q~=f do
    r,p={},{}
    for x=1,d do  --add 100 copies to the table of strings
        i(r,s)
        i(p,0)
        e=""
        for o=1,f do  --for each character in string
            if c(1,20)==1 then  -- 5% chance
                if c(1,27)==1 then e=e.." " else e=e..string.char(c(65,90)) end  --set it to an ASCII char between 65 and 90 (A-Z) or a space character
            else
                e=e..a(r[x],o,o)
            end
        end
        r[x]=e  --current string = mutations
        for y=1,f do
            if a(r[x],y,y)==a(t,y,y) then p[x]=p[x]+1 end
        end  --for each char increment score if it is correct
        if p[x]==f then
            s=r[x]
        end  --if 28 then final string is this!
    end
    for x=1,d do
        if p[x]>=q then s,q=r[x],p[x] end  --if this is the highest score so far, then make the string equal to this
    end
    print(b..":",s,"-- score: "..q)  --print it!
    b=b+1  --add one to the counter!
end

সত্যই সত্য যদিও এটি অবশ্যই জিতবে না, আমি এই সমস্যার জন্য একটি যুক্তিসঙ্গত সংক্ষিপ্ত সমাধান খুঁজে পেয়ে এবং হ্রাস করতে পেরে খুশি হয়েছিলাম ! (যুক্তিসঙ্গত উপর জোর দেওয়া): পি


3

এসএএস - 374

%macro r;ranuni(7)%mend;%macro s;r=int(%r*27);substr(x,t,1)=byte(ifn(r,64+r,32));%mend;%macro y;char(y,t)=char(x,t)%mend;options nonotes nosource;data x;length x$28;do t=1to 28;%s;end;y="METHINKS IT IS LIKE A WEASEL";do z=1by 1;o=x;do i=1to 100;c=0;x=o;do t=1to 28;if %r<=.05then do;%s;end;c+%y;end;if c>m then do;m=c;v=x;end;end;x=v;put z":" x"-- score:" m;if m<28;end;run;

->

1 :GUUVLNUSILSRZLRBXVVCWXX HXKC -- score:2
2 :MUUVLNUSILSRZLRBXVMCWXX HXKC -- score:3
3 :MUUVLNESILSRILRBXVMCWXX HXKC -- score:4
4 :MEUVLNESILSRIRRBXVMCWXX HXKC -- score:5
....
95 :METHINKS IT IS LIKE A XEASEL -- score:27
96 :METHINKS IT IS LIKE A XEASEL -- score:27
97 :METHINKS IT IS LIKE A XEASEL -- score:27
98 :METHINKS IT IS LIKE A WEASEL -- score:28

লাইন ব্রেক / ইনডেন্ট / মন্তব্য সহ:

%macro r;
 ranuni(7)   /* seed 0 will make new each time (seed=clock), otherwise fixed results */
%mend;
%macro s;  /* does the rand char, used both to initialize and replace; */
 r=int(%r*27); 
 substr(x,t,1)=byte(ifn(r,64+r,32)); *r=0 becomes space otherwise upper char;
%mend;
%macro y;  /*compares using new to 9.2 CHAR function which is equivalent to substr(str,start,1) */
 char(y,t)=char(x,t)
%mend;
options nonotes nosource; /*cheapest way to get clean log */
data x;
 length x$28; /*annoyingly necessary*/
 do t=1to 28;%s;end; /*initialize string*/
 y="METHINKS IT IS LIKE A WEASEL"; /*compare string */
 do z=1by 1; /*start iterating */
  o=x; /*save this iteration's string */
  do i=1to 100;
   c=0; /*score for this iteration*/
   x=o; /*string to fudge about start out clean, reusing x so no params to macro*/
   do t=1to 28;
    if %r<=.05then do;%s;end; /*if 5% then change the char out */
    c+%y; /*score that character*/
   end;
   if c>m then do; /*if on better scoring line, save it */
    m=c;
    v=x;
   end;
  end;
  x=v; *for next iter - this is cheaper than other options involving o=v due to first iter;
  put z":" x"-- score:" m;
  if m<28; *quit at 28;
 end;
run;

3

সি 361 331

আর্টের সমাধান হিসাবে ভাল না, কিন্তু এখানে আমার (নবাগত) একটি সি সমাধানের চেষ্টা রয়েছে। আপনি নতুনলাইনগুলি এবং ট্যাবগুলি সরিয়ে ফেললে 361 টি অক্ষর।

char*w="METHINKS IT IS LIKE A WEASEL";char b[101][29];t,s,n,i,j,x,a;main(){for(;i<28;i++)b[0][i]=w[rand()%28];while(s<28){for(j=1;j<101;j++){x=0;for(i=0;i<28;i++){if(!(rand()%20))b[j][i]=w[rand()%28];else b[j][i]=b[0][i];if(b[j][i]==w[i])x++;}if(x>s){s=x;t=j;}}printf("%d: %s -- score %d\n",n++,b[t],s);for(;i>=0;--i){a=b[0][i];b[0][i]=b[t][i];b[t][i]=a;}t=0;}}

সম্পাদনা: নেস্টেড লুপটি পরিত্রাণ পেয়েছে এবং 1D অ্যারে ব্যবহার করেছে। আশা করছিল এটি আরও একটি বড় পার্থক্য তৈরি করবে, তবে এটি কেবল আমার 30 টি চরিত্র সংরক্ষণ করেছিল। কোডটি এখানে:

char*w="METHINKS IT IS LIKE A WEASEL";char b[2929];t,s,n,i,x;main(){for(;i<28;i++)b[i]=w[rand()%28];while(s<28){for(;i<2929;i++){if((i+1)%29){if(!(i%29))x=0;b[i]=rand()%20?b[i%29]:w[rand()%28]; x+=b[i]==w[i%29];if(x>s){s=x;t=i/29;}}}for(i=0;i<29;i++){x=b[i+t*29];b[i+t*29]=b[i];b[i]=x;}printf("%d: %s -- score %d\n",n++,b,s);t=0;}}

সম্পাদনা করুন: "গল্ফিং" কীভাবে করা হয়েছিল তা জানতে আগ্রহী যারা তাদের জন্য এটি মূল, অরোগল্ফড কোড। ওয়াল এবং সি 99 সক্ষম থাকা জিসিসির সাথে সংকলিত হওয়ার সময় কোডটি কোনও সতর্কতা তৈরি করে না। হতে পারে আপনি আমার মতো একজন গল্ফিং নবাগত বা আমার মতো সি নবাগত, অথবা আপনি কেবল কৌতুহলী। :) https://gist.github.com/cpx/97edbce4db3cb30c306a


3

scala, 347 341 337 অক্ষর:

import util.Random.{nextInt=>r}
val t="METHINKS IT IS LIKE A WEASEL"
def c="ABCDEFGHIJKLMNOPQRSTUVWXYZ "(r(27))
def s(a:String)=t.zip(a).map{x=>if(x._1==x._2) 1 else 0}.sum
def w(a:String,i:Int=0){println(f"$i%2d: $a -- score: ${s(a)}")
if(s(a)!=28){w((0 to 99).map{_=>a.map(o=>if(r(20)<1) c else o)}.sortBy(s).last,i+1)}}
w(t.map(_=>c))

=>

 0: PGSHWAEPALQFTCORUKANPNUTRVXH -- score: 2
 1: PGSHWAEPALQ TCOQUKANPNUTRVXH -- score: 3
...
47: METHINKS WT IS LIKE A WEASEL -- score: 27
48: METHINKS IT IS LIKE A WEASEL -- score: 28

উফ। আমি অ্যালগরিদমটি ভুলভাবে লিখেছি এবং পরিবর্তিত "একটি চরিত্রের প্রতি 5% সুযোগটি একটি এলোমেলো চরিত্রের সাথে প্রতিস্থাপন করা" পরিবর্তে আমি একটি একক এলোমেলো চরিত্রকে অনুমতি দিয়েছিলাম। ঠিক করবে.
রব স্টার্লিং

কিছুটা ঠিক করে ছাঁটা!
রব স্টার্লিং

স্কেল ২.১০-এ, চারটি অক্ষর সাশ্রয় করে println("%2d: %s -- score: %d".format(i,a,s(a))পরিবর্তিত হতে পারে println(f"$i%2d: $a%s -- score: ${s(a)}%d")!
রব স্টার্লিং

(('A'to'Z') toSeq): + '') == "ABCDEFGHIJKLMNOPQRSTUVWXYZ", এবং 2% s প্রিন্টিং স্ট্রিংয়ের জন্য 9 টি অক্ষর সংরক্ষণের জন্য প্রয়োজনীয় নয়
ক্রিস

@ ক্রিস আপনি স্ক্যালার কোন সংস্করণটি চালিয়েছেন? def c=(' '+:('A'to'Z'))(r(27))আমাকে দেয়error: type mismatch; found : Int required: scala.collection.generic.CanBuildFrom[scala.collection.immutable.IndexedSeq[Char],Char,?]
রব স্টারলিং

2

পিএইচপি 442

<? function r(){$n=rand(65,91);if($n==91) return ' ';else return chr($n);}function s($s){$c=0;$t='METHINKS IT IS LIKE A WEASEL';for($i=0;$i<28;$i++) if($s[$i]==$t[$i]) $c++;return $c;}function m($s){for($i=0;$i<28;$i++) if(rand(0,99)<5) $s[$i]=r();return $s;}$s='';for($i=0;$i<28;$i++) $s.=r();for($i=0;;$i++){$l=s($s);printf("%2d: %s -- score: %d\n",$i,$s,$l);if($l==28) break;$x=$s;for($j=0;$j<100;$j++){$t=m($s);if(s($t)>$l) $x=$t;}$s=$x;}

Readbly:

<?
//random char
function r(){
    $n=rand(65,91);
    if($n==91) return ' ';
    else return chr($n);
}
//score
function s($s){
    $c=0;
    $t='METHINKS IT IS LIKE A WEASEL';
    for($i=0;$i<28;$i++)
        if($s[$i]==$t[$i]) $c++;
    return $c;
}
//mutate
function m($s){
    for($i=0;$i<28;$i++)
    if(rand(0,99)<5) $s[$i]=r();
    return $s;
}
$s='';
for($i=0;$i<28;$i++) $s.=r();
for($i=0;;$i++){
    $l=s($s);
    printf("%2d: %s -- score: %d\n",$i,$s,$l);
    if($l==28) break;
    $x=$s;
    for($j=0;$j<100;$j++){
        $t=m($s);
        if(s($t)>$l) $x=$t;
    }
    $s=$x;
}

পরে অতিরিক্ত সাদা সরানোর if\for, এটা 436. এ আপনার কাছে পরীক্ষা পারে $n>90অন্য গৃহস্থালির কাজ জন্য
Einacio

আমি এটি পছন্দ করি, এটি আসলে পাঠযোগ্য। আমি আপনার r()এবং s()কার্যকারিতাগুলিতে কয়েকটি সম্ভাব্য উন্নতি পেয়েছি । মন্তব্যগুলির সাথে এখানে পরিবর্তনগুলি রয়েছে: ideone.com/4ecZQc
মিঃ ল্লামা

ওহ, এবং আপনার মুদ্রণ বিবৃতি সংক্ষিপ্ত করা যেতে পারে। %sসবসময় একই দৈর্ঘ্য এবং %dসমর্থনযোগ্য তাই আপনি যদি এর পরিবর্তে নিম্নলিখিত ব্যবহার করতে পারেন ছেড়ে দেওয়া হয়:printf("%2d: $s -- score: $l\n",$i);
জনাব লামা

2

জাভা (2৩২)

class C {public static void main(String[] a){String b="AAAAAAAAAAAAAAAAAAAAAAAAAAAA";for(int i=1;;i++){String c=w(b);int s=s(c);if(s==28)break;if(s(b)<s){b=c;System.out.println(i+": "+c+" -- score: "+s);}}}public static String w(String b) {StringBuffer c = new StringBuffer(b);int max = 0;for (int i=0;i<100;i++){for(int j=0;j<28;j++)if(Math.random()<.06){double d=Math.random();c.setCharAt(j,(char)(d==1?32:d*26+65));}String d=c.toString();int s=s(d);if(s>max){max=s;b=d;}}return b;}public static int s(String s){String b="METHINKS IT IS LIKE A WEASEL";int sum=0;for(int j=0;j<28;j++)sum+=s.charAt(j)==b.charAt(j)?1:0;return sum;}}

জাভা এমন একটি ভার্চুয়াল ভাষা .. :(


2

পাইথন ( 330 321)

def b(i,s):print i,':',''.join(s),'-- score:',p(s)
from random import*;a=" ABCDEFGHIJKLMNOPQRSTUVWXYZ";i,s,t=0,choice(a)*28,"METHINKS IT IS LIKE A WEASEL";p=lambda n:sum(n[c]==t[c]for c in range(28))
while p(s)<28:b(i,s);s=sorted([[(c,choice(a))[random()<.05]for c in s]for k in[1]*100],key=lambda n:p(n))[-1];i+=1
b(i,s)

পঠনযোগ্য সংস্করণ:

def b(i,s):
    print i,':',''.join(s),'-- score:',p(s)

import random as r
a=" ABCDEFGHIJKLMNOPQRSTUVWXYZ"
i,s,t=0,r.choice(a)*28,"METHINKS IT IS LIKE A WEASEL"
p=lambda n:sum(1for c in range(28)if n[c]==t[c])
while p(s)<28:
    b(i,s)
    s=sorted([[(c,r.choice(a))[r.random()<.05]for c in s]for k in[1]*100],key=lambda n:p(n))[-1];i+=1
b(i,s)

উদাহরণ আউটপুট:

0 : SSSSSSSSSSSSSSSSSSSSSSSSSSSS -- score: 3
1 : SSSQSSSSSSSSSSSSISSSSSSSSSSS -- score: 4
2 : SSSQISSSSSSSSSSSISSSSSSSSSSS -- score: 5
3 : SSSQISSSSSSSSSSSIKSSSSSSSSSS -- score: 6
4 : SMSQISSSSSSSISSSIKSSSSGSSSSS -- score: 7
...
53 : METHINKS IT IS UIKE A WEASEL -- score: 27
54 : METHINKS IT IS UIKE A WEASEL -- score: 27
55 : METHINKS IT IS LIKE A WEASEL -- score: 28

সম্পাদনা: এএমকে এবং টিমটেকস উত্তরের উপর ভিত্তি করে কয়েকটি অক্ষর সরানো হয়েছে


2
sum(1for c in range(28)if n[c]==t[c])sum(n[c]==t[c] for c in range(28))(-3 অক্ষর) থেকে সংক্ষিপ্ত করা যেতে পারে
এএমকে

1
5 অক্ষর সংরক্ষণ করুন, পরিবর্তন import random as rকরার জন্য from random import*এবং তারপর তিন সরানোরr.
Timtech

1
দুঃখিত, আমি পাইথন কথা বলি না আপনার নমুনা আউটপুটে লাইনের শূন্যটি কি কেবল একটি অদ্ভুত ঘটনা বা আপনার স্ক্রিপ্ট সবসময়ই সমস্ত দিয়ে শুরু হয় S? চ্যালেঞ্জটির এলোমেলো অক্ষরের একটি স্ট্রিং দিয়ে শুরু হওয়া দরকার।
ইসজি 20

এটি 28 এলোমেলো অক্ষর দিয়ে শুরু হয় তবে সেগুলি সর্বদা একই থাকে।
PSHegger

@ ইসজি লোল, এটি কখনও বলেনি যে প্রতিটি স্বতন্ত্র চরিত্রটি এলোমেলো হতে পারে! পিএইচগার: সমস্ত এস এর সাথে শুরু করা আপনার ভাষার নামের জন্য উপযুক্ত is)
ডোরকনব

2

পিএইচপি ( 381 397 323 319 312):

<? function s(&$s,&$i=0){$t='METHINKS IT IS LIKE A WEASEL';$i=0;$c=$s;$f=28;while($f--){$n=rand(0,26);$i+=($s[$f]=($c=='_'||!rand(0,19)?chr($n?$n+64:32):$s[$f]))==$t[$f];}}$s='_';s($s);$x=$y=0;do{$f=100;while($f--){$m=$s;s($m,$i);if($i>$y){$y=$i;$l=$m;}}printf("%2d: %s -- score: $y\n",$x++,$s=$l);}while($y<28);

পঠনযোগ্য সংস্করণ:

<?
function s(&$s, &$i = 0) {
    $t = 'METHINKS IT IS LIKE A WEASEL';
    $i = 0;
    $c = $s;
    $f = 28; while ($f--) {
        $n = rand(0, 26);
        $i += ($s[$f] = ($c == '_' || !rand(0, 19) ? chr($n ? $n + 64 : 32) : $s[$f])) == $t[$f];
    }
}

$s = '_';
s($s);
$x = $y = 0;

do {
    $f = 100; while ($f--) {
        $m = $s;
        s($m, $i);

        if ($i > $y) {
            $y = $i;
            $l = $m;
        }
    }

    printf("%2d: %s -- score: $y\n", $x++, $s = $l);
} while ($y < 28);

অনুকূলকরণের ক্রেডিট (319):

অনুকূলকরণের ক্রেডিট (312):

  • @ আইনাসিওর মন্তব্যসমূহ

আমি যৌথ জেনারেটর + র্যান্ডোমাইজার পছন্দ করি
আইনাসিও

আপনি উভয় পরিবর্তন হতে পারে forজন্য $f=N;while($f--){3 গৃহস্থালির কাজ প্রত্যেকের জন্য। এবং অন্য চরের জন্য:$n=rand(0,26);[...]chr($n?$n+64:32)
আইনাসিও

জেনারেটর + র্যান্ডমাইজার + স্কোর গণনা। :) ধন্যবাদ, আমি আপনার অনুকূলিতকরণ প্রয়োগ করেছি।
ভাই ফিলিপ

2

রুবি, 218

g,s,p,t=-1,'',1;while t!=28;t,b=-1;100.times{|i|m,n='',0
28.times{|j|n+=1if(m[j]=(rand<p ?[*?A..?Z,' '].sample: s[j]))=="METHINKS IT IS LIKE A WEASEL"[j]}
b,t=m,n if n>t};puts"#{g+=1}: #{s=b} -- score: #{t}";p=0.05;end

উদাহরণ রান

0: LRAZZMKL IKUOGEHLKPWEVNEAZWX -- score: 6
1: LRAZZMKL IKUIGEALKMWEVNEAZWX -- score: 7
2: HRAGZMKL IKUIGEALKMWEVNEAZWX -- score: 7
3: HVAGZMKL IKUISAALKYWEVNEAZWX -- score: 8
                  ...
48: METHIUKS IT IS LIKEIA WEASEL -- score: 26
49: METHINKS IT IS LIKEIA WEASEL -- score: 27
50: METHINKS IT IS LIKEIA WEASEL -- score: 27
51: METHINKS IT IS LIKE A WEASEL -- score: 28

2

রুবি - 225 202 203 198 চর

রুবি এখনও পর্যন্ত এই চ্যালেঞ্জের নীচে প্রতিনিধিত্ব করে বলে মনে হয়েছিল আমি চেষ্টা করে দেখব! উন্নতি স্বাগত জানায়।

g=-1
s=[]
puts"#{g+=1}: #{$.,s=(0..99).map{n=(r=0..27).map{|i|x=[' ',*?A..?Z].sample;rand<0.05?x:s[i]||=x};[r.count{|i|n[i]=='METHINKS IT IS LIKE A WEASEL'[i]},n*'']}.max;s} -- score: #$."until$.>27

আপনার আউটপুটে, "প্রজন্ম #" শুরু হয় 1তবে প্রশ্নটি নির্দিষ্ট করে 0। আপনি যদি দিয়ে থাকেন g=-1তবে তা ঠিক আছে। একটি স্মার্ট উপায় থাকতে পারে তবে আমি এটি সেভাবে করেছিলাম। চিয়ার্স, সহকর্মী রুবিগল্ফার।
ড্যারেন স্টোন

@ ড্যারেনস্টোন ভাল কল, ধন্যবাদ! একটি চরিত্র ব্যয় করে তবে আমি এর থেকে আরও ভাল উপায়ের কথা ভাবতে পারি না।
পল প্রেসিডেজ

1
স্ট্রিংয়ে কোডটি সরিয়ে আপনি 198 টি চর পেতে পারেন (একই প্রথম দুটি লাইন, তারপরে এটি বিশ্রামের জন্য)puts"#{g+=1}: #{$.,s=(0..99).map{n=(r=0..27).map{|i|x=[' ',*?A..?Z].sample;rand<0.05?x:s[i]||=x};[r.count{|i|n[i]=='METHINKS IT IS LIKE A WEASEL'[i]},n*'']}.max;s} -- score: #$."until$.>27
জাস্টিন

ভাল কল! আমি এটিকে সম্পাদনা করব
পল প্রেস্টিজ

2

রুবি, 206 200 199

q,i,*R=*-2..27
puts"#{i+=1}: #{$.,s=(-2..q).map{x=R.map{|j|!s||rand<0.05?[*?A..?Z,' '].sample: s[j]};[R.count{|i|x[i]=='METHINKS IT IS LIKE A WEASEL'[i]},x]}.max;q=97;s.join} -- score: #$."until$.>27

প্রথম লাইন কেবল সংজ্ঞায়িত করতে একটি অভিনব উপায় q=-2, i=-1এবং R=(0..27).to_a। সমস্ত কাজ ২ য় লাইনে করা হয়েছে:

puts"..."until$.>27 # Prints the string in quotes until we reach the desired score
     ^
     |
 +---+
 |
"#{i+=1}: #{...} -- score: #$."
   ^        ^               ^  
   +--------|---------------|-- Generation counter
 +----------+---------------|-- Current string
 |                          +-- Score of current string (interpolates the `$.` variable)
 |   
 #{$.,s=(-2..q).map{...}.max;q=97;s.join} # Generate the score & string
   ^         ^  ^   ^    ^   ^    ^
   +---------|--|---|----|---|----|------ Store the score; this variable makes
             |  |   |    |   |    |       string interpolation shorter.
             +--|---|----|---+----|------ `q` automatically takes care of generating
                |   |    |        |        the string vs randomizing the string.
                +---|----|--------|------  Make 100 (or 1 the first time) strings,
                    |    |        |        and compute their score.
                    |    +--------|------- Take the string with the max score.
 +------------------+             +------- `s` is stored as an array
 |
 x=R.map{...};[R.count{...},x] # Compute string and its score, store in array
   ^     ^    ^^       ^
   +-----|----|+-------|------ `R` is 0..27, we use the constant to save chars.
         |    +--------|------ `max` orders by first element, then second. We clearly want
         |             |       the highest score, so make the score first.
 +-------+-------------|------ Generate the string, store in `x`.
 |                     +------ Count the number of chars that overlap with 'METHINKS...'
 |                     |
 |                    {|i|x[i]=='METHINKS IT IS LIKE A WEASEL'[i]}
{|j|!s||rand<0.05?[*?A..?Z,' '].sample: s[j]}
    ^   ^         ^             ^       ^
    +---+---------|-------------|-------|---- 5% chance of randomizing, or 100% for
                  |             |       |     first string.
                  +-------------+-------|---- Sample from alphabet + ' '.
                                        +---- Don't alter the string 95% of the time

@ জ্যাচগেটস আপনাকে মন্তব্য করার স্টাইলটি পছন্দ করেছে
জাস্টিন

2

জাপট v2.0a0, 112 108 বাইট

ª(T=Si26õdI q¹ö28
_¬í¥`Ú0ˆks Š ‰ ¦ke a Øâel`u q)x
(OpW+`: {U} -- sÖ: `+(K=[U]xV¹WÄ
K<28©ßLÆ®p513 iT ö}ÃñV o

এটি অনলাইন চেষ্টা করুন!

-4 বাইট @ETH প্রডাকশন ধন্যবাদ।

আনপ্যাকড এবং কীভাবে এটি কাজ করে

U||(T=Si26õdI q) ö28  Initialize primary input
U||                   If U is not initialized...
        26õdI           Generate uppercase alphabets
              q         Convert to string
      Si                Add space
   (T=         )        Assign to variable T
                 ö28    Sample 28 random chars from T and form a string
                        Implicitly assign to U

_q í==`Ú0ˆks Š ‰ ¦ke a Øâel`u q)x  Match counting function
_                                  Declare a function...
 q í==                         )     Convert to array of chars and pair with the next,
                                     and map with equality...
      `Ú0ˆks Š ‰ ¦ke a Øâel`u q        "methinks it is like a weasel" to uppercase
                                        split into chars
                                x    Sum (true == 1, false == 0)
                                   Implicitly assign to V

(OpW+`: {U} -- sÖ: `+(K=[U]xV) W+1  Output and increment counter
(Op                           )      Output with newline...
   W+`: {U} -- sÖ: `+                 `{W}: {U} -- score: `
                         [U]xV         Call V on [U] and force cast to number
                      (K=     )        Assign to K
                                W+1  Add 1 to W and implicitly assign to W

K<28&&ßLo@Um_p513 iT ö}} ñV o  Termination check and recursion
K<28&&                         If the match count is less than 28...
      ß                          Recurse the program with...
          Um_                      Map over chars of U...
             p513 iT                 The char repeated 513 times plus T
                     ö}              Sample a char from it
       Lo@             }           Generate array of 100 of the above
                         ñV o      Sort by V, pop the largest, pass it as U

ভি 1.4.5 এ স্যুইচ সহ 106 বাইট
শেগি

2

জাপট -R , 94 বাইট

বুবলারের সমাধান থেকে কিছুটা অনুপ্রেরণার সাথে তবে ভিন্ন পদ্ধতির ।

;C±S ö28
ȶ`Ú0ks   ¦ke a Øâel`gY
@=#dÆ£20ö ?X:CöÃÃñ_¬xVÃo)ʶG}a@Np[X+':Uu '-²`sÖ:`G=U¬xV]¸

এটি পরীক্ষা করুন (অথবা এটি অনলাইন ব্যবহার করে দেখুন )


ব্যাখ্যা

লাইন 1

ফলাফল পরিবর্তনশীল নির্ধারিত হয় U

;C±S ö28
;C           :The lower case alphabet
  ±S         :Append a space and reassign result to C
     ö28     :Generate a string of 28 random characters

লাইন 2

ফলাফল পরিবর্তনশীল নির্ধারিত হয় V

ȶ`Ú...l`gY
È               :A function that takes 2 arguments; a string (X) and an integer (Y)
  `Ú...l`       :  The compressed string "methinks it is like a weasel"
         gY     :  Get the character at index Y
 ¶              :  Test for equality with X

লাইন 3

এই রেখার ফলাফলটি স্পষ্টতই নতুন লাইনের সাথে এবং আউটপুটটির সাথে যোগদান করেছে।

@=#dÆ£20ö ?X:CöÃÃñ_¬xVÃo)Ê¥G}a@Np[X+':Uu '-²`sÖ:`G=U¬xV]¸
@                           }a@                            :Repeat until true
                                 [                     ]   :Build an array containing ...
                                  X+':                     :  A colon appended to the number of the current iteration
                                      Uu                   :  The current value of U uppercased
                                         '-²               :  A hyphen repeated twice
                                            `sÖ:`          :  The compressed string "score: "
                                                   U¬      :  Split U to an array of characters
                                                      V    :   Pass each character X at index Y through function V
                                                     x     :   Reduce by addition
                                                 G=        :   Assign the result to variable G
                                                        ¸  :Join with spaces
                               Np                          :Push to N (initially an empty array)
  #d                                                       :100
    Æ                                                      :Generate the range [0,100) and pass each through a function
     £                                                     :  Map over each character X in U
      20ö                                                  :    Generate a random number in the range [0,20), which has a 5% chance of being 0 (falsey)
          ?X                                               :    If thruthy, return X
            :Cö                                            :    Else return a random character from C
               Ã                                           :  End mapping
                Ã                                          :End function
                 ñ_                                        :Sort by passing each through a function
                   ¬                                       :  Split to an array of characters
                     V                                     :  Pass each character X at index Y through function V
                    x                                      :  Reduce by addition
                      Ã                                    :End sorting
                       o                                   :Pop the last element
 =                      )                                  :Reassign to U
                         Ê                                 :Length
                          ¶G                               :Equal to G


1

রুবি - 410

#!/usr/bin/env ruby
C,RC=[32]+(65..90).to_a,->{C[rand(27)].chr}
T,CO,CH,OU,s,sc,a,aa,z,TR="METHINKS IT IS LIKE A WEASEL",->x{a=0;(0...28).each{|z|a+=1 if x[z]==T[z]};a},->{a[aa.rindex(sc)]},->x,y{print x;print " Score: ";puts y},(0...28).map{RC[]}.join,0,[0],[0],0,->{rand(20)==0}
until sc==28
a=[s]*100;aa=[0]*100;(0...100).each{|x|(0...28).each{|y|a[x][y]=RC[] if TR[]};z=CO[a[x]];aa[x]=CO[a[x]];OU[a[x],z]};sc=aa.max;s=CH[] end

সম্পাদনা * এটি বর্তমানে ব্যর্থ হচ্ছে (কিছু কারণে [[যে কোনও] 0 তে সেট করা হচ্ছে (টাইপ => ফিকনাম))। তবে, আসল নকশাটি সঠিক, আমার কেবল ত্রুটিটি এটির কারণ হতে হবে তা খুঁজে বের করতে হবে (এটি খুব রহস্যজনক)


1

পাইথন 284

from random import*
C=choice
A=map(chr,range(65,91)+[32])
s=[C(A)for i in[0]*28]
N=x=0
while N!=28:N,s=max((len([i for i,j in zip(X,"METHINKS IT IS LIKE A WEASEL")if i==j]),X)for X in[[c if random()<.95 else C(A)for c in s]for i in[0]*100]);print`x`+":",''.join(s),"-- score:",N;x+=1

1

জাভাস্ক্রিপ্ট - 312

ইতিমধ্যে উপরে একটি সংক্ষিপ্ত জেএস সমাধান রয়েছে তবে এটি পরীক্ষামূলক পয়েন্টার ফাংশন ব্যবহার করছে, তাই আমি ভেবেছিলাম যে কোনও জেএস পরিবেশে চলমান অন্য একটি সমাধান আমি নিক্ষেপ করব:

for(r=Math.random,R=function(){return'METHINKS CODZAWFLBUGYQRXVJP'[~~(r()*27)]},_=[],_.$=n=0,D=function(s){for(c=[],c.$=i=0;i<28;){c[i]=s&&r()<.95?s[i]:R();_=(c.$+=c[i]=='METHINKS IT IS LIKE A WEASEL'[i++])>_.$?c:_};return c},D();_.$<28;){for(j=0;j++<1e2;)D(_);console.log(n+++': '+_.join('')+' -- score: '+_.$)}

1

জাভা: 557 534

enum W{W;public static void main(String[]a){char[]c=new char[28],h,d[];int i,k,e,s=W.s(c);for(i=0;i<28;i++)c[i]=W.r();for(i=0;;){W.p(i++,h=c,s);if(s>27)break;d=new char[100][28];for(char[]b:d){for(k=0;k<28;k++)b[k]=Math.random()<.05?W.r():h[k];if((e=W.s(b))>s){s=e;c=b;}}}}int s(char[]c){int s=0,k;for(k=0;k<28;k++)if(c[k]=="METHINKS IT IS LIKE A WEASEL".charAt(k))s++;return s;}void p(int i,char[]c,int s){System.out.println(i+": "+new String(c)+" -- score: "+s);}char r(){int i=(int)(Math.random()*27);return(char)(i==26?32:i+65);}}

মোড়ানো:

enum W {
    W;

    public static void main(String[] a) {
        char[] c = new char[28], h, d[];

        int i, k, e, s = W.s(c);

        for(i = 0; i < 28; i++)
            c[i] = W.r();

        for(i = 0;;) {
            W.p(i++, h = c, s);

            if(s > 27)
                break;

            d = new char[100][28];

            for(char[] b : d) {
                for(k = 0; k < 28; k++)
                    b[k] = Math.random() < .05 ? W.r() : h[k];

                if((e = W.s(b)) > s) {
                    s = e;
                    c = b;
                }
            }
        }
    }

    int s(char[] c) {
        int s = 0, k;
        for(k = 0; k < 28; k++)
            if(c[k] == "METHINKS IT IS LIKE A WEASEL".charAt(k))
                s++;

        return s;
    }

    void p(int i, char[] c, int s) {
        System.out.println(i + ": " + new String(c) + " -- score: " + s);
    }

    char r() {
        int i = (int)(Math.random() * 27);
        return (char)(i == 26 ? 32 : i + 65);
    }
}

1

পিএইচপি 429 426 421 415

<? function t(){$a="ABCDEFGHIJKLMNOPQRSTUVWXYZ ";return $a{rand(0,26)};}$c='';$j=$g=0;$i=28;while($i--)$c.=t();function r($s){$i=28;while($i--)!rand(0,19)&&$s{$i}=t();return $s;}function s($s,&$r){$c="METHINKS IT IS LIKE A WEASEL";$i=28;$r=0;while($i--)$r+=$s{$i}==$c{$i};}while($g<28){$n='';$v=0;$i=100;while($i--){s($t=r($c),$a);($a>$v)&&($v=$a)&($n=$t);}($v>$g)&&($g=$v)&($c=$n);echo $j++.": $c -- score: $g\n";}

সুন্দর মুদ্রণ

<?php 
function t(){
    $a="ABCDEFGHIJKLMNOPQRSTUVWXYZ ";
    return $a{rand(0,26)};
}
$c='';
$j=$g=0;
$i=28;
while($i--)
    $c.=t();
function r($s){
    $i=28;
    while($i--)
        !rand(0,19)&&$s{$i}=t();
    return $s;
}
function s($s,&$r){
    $c="METHINKS IT IS LIKE A WEASEL";
    $i=28;
    $r=0;
    while($i--)
        $r+=+($s{$i}==$c{$i});
}
while($g<28){
    $n='';
    $v=0;
    $i=100;
    while($i--){
        s($t=r($c),$a);
        ($a>$v)&&($v=$a)&($n=$t);
    }
    ($v>$g)&&($g=$v)&($c=$n);
    echo $j++.": $c -- score: $g\n";
}

আমার পরের বারে কম ভার্বোস ভাষা লাগবে


সংক্ষিপ্ত পিএইচপি উত্তর এখন পর্যন্ত ভাল সম্পন্ন!
নয়েলকড

আরও ভাল হতে পারে তবে আমি
চিৎকার করে উঠি

আপনি সর্বদা ফিরে এসে আপনার উত্তর আপডেট করতে পারেন
নোয়েলকড

1

পাইথন 2.7 - 319 বাইট

অবশ্যই এটি সবচেয়ে ছোট নয়, তবে প্রোগ্রামটি মজাদার ছিল।

from random import*
a=map(chr,range(65,91))+[' ']
c,i,y=choice,0,{}
s=[c(a)for i in[0]*28]
while 1:
 for j in[0]*100:v=[c(a)if .05>random()else x for x in s];y[sum(1if'METHINKS IT IS LIKE A WEASEL'[k]==v[k]else 0for k in range(28))]=v
 v=max(y.keys());s=y[v];print"%d: %s -- score: %d"%(i,''.join(y[v]),v);i+=1
 if v==28:break

একটি পুনরাবৃত্তি ফাংশন ব্যবহার করে, সুতরাং যদি স্ট্রিংয়ের সাথে এক ধরণের অদ্ভুত বিচ্যুতি থাকে তবে এটি সর্বাধিক পুনরাবৃত্তির গভীরতায় পৌঁছে যেতে পারে।

ubuntu@ubuntu-OptiPlex-980:~$ python weasel.py
0: VPBHBSPWFTOG HAXSESCDNFPKWYE -- score: 1
1: VABHBSPWFTOG HAXSESCDNWPKWYE -- score: 2
2: VAWHBSPWFTOGIHAXSESSDNWPKWYE -- score: 3
3: VAWHBSPWFTOGIHAXSEFSGNWPKWYL -- score: 4
4: XAWHBSPYFTOGIHAXSEFSGNWPKWYL -- score: 4
5: XAWHBSKYFTOGIHAXSEFSGNWPKWYL -- score: 5
6: XAWHBSKYFTOGIHAXSEF GNWPKWYL -- score: 6
7: XAWHBSKYFTOGIHALSEF ANWPKWYL -- score: 8
8: XAKHBSKYFTTGIHALSEY ANWPKWYL -- score: 9
9: XAKHISKYFTTGIHALSEE ANWPKWYL -- score: 11
10: XAKHISKSFTTGIHALSEE ANWPKWYL -- score: 12
11: XAKHISKSFTTGIHALSBE ANWPKWKL -- score: 12
12: XAQHISKSFRT IHALSBE ANWPKWKL -- score: 13
13: XAQHISKSFIT IHALSBE ANWPKWKL -- score: 14
14: XAQHISKSFIT IHALSBE ANWPKWKL -- score: 14
15: XAQHISKSFIT IHALSBE ANWPKWKL -- score: 14
16: XALHISKSFIT ISALSBE ANWPKWKL -- score: 15
17: JALHISKSFIT ISALSBE ANWPAWKL -- score: 16
18: JALHISKSFIT ISALIBE ANWPAWKL -- score: 17
19: JALHISKSFIT ISALIBE ANWPAWKL -- score: 17
20: JALHISKSFIT ISALIBE ANWPAWKL -- score: 17
21: JALHISKSFIT ISALIKE ANWPAWYL -- score: 18
22: JALHISKSFIT IS LIKE ANWPAWYL -- score: 19
23: JALHISKSFIT IS LIKE ANWEAWYL -- score: 20
24: JALHISKSFIT IS LIKE ANWEAWYL -- score: 20
25: JALHISKSFIT IS LIKE ANWEAWZL -- score: 20
26: JALHISKS IT IS LIKE ANWEAAZL -- score: 21
27: JACHISKS IT IS LIKE ANWEASZL -- score: 22
28: JACHISKS IT IS LIKE ANWEASZL -- score: 22
29: MACHISKS IT IS LIKE ANWEASZL -- score: 23
30: MACHISKS IT IS LIKE ANWEASZL -- score: 23
31: MACHISKS IT IS LIKE AUWEASZL -- score: 23
32: MACHISKS IT IS LIKE AUWEASZL -- score: 23
33: MACHISKS IT IS LIKE AJWEASZL -- score: 23
34: MACHISKS IT IS LIKE A WEASZL -- score: 24
35: MACHISKS IT IS LIKE A WEASZL -- score: 24
36: MACHINKS IT IS LIKE A WEASZL -- score: 25
37: MACHINKS IT IS LIKE A WEASZL -- score: 25
38: MACHINKS IT IS LIKE A WEASZL -- score: 25
39: MBCHINKS IT IS LIKE A WEASZL -- score: 25
40: MBCHINKS IT IS LIKE A WEASZL -- score: 25
41: MBCHINKS IT IS LIKE A WEASZL -- score: 25
42: MBCHINKS IT IS LIKE A WEASZL -- score: 25
43: MBCHINKS IT IS LIKE A WEASZL -- score: 25
44: MBCHINKS IT IS LIKE A WEASZL -- score: 25
45: MECHINKS IT IS LIKE A WEASCL -- score: 26
46: MECHINKS IT IS LIKE A WEASCL -- score: 26
47: MECHINKS IT IS LIKE A WEASCL -- score: 26
48: MECHINKS IT IS LIKE A WEASCL -- score: 26
49: MECHINKS IT IS LIKE A WEASCL -- score: 26
50: MECHINKS IT IS LIKE A WEASCL -- score: 26
51: MEQHINKS IT IS LIKE A WEASCL -- score: 26
52: MEQHINKS IT IS LIKE A WEASCL -- score: 26
53: MEQHINKS IT IS LIKE A WEASCL -- score: 26
54: MEQHINKS IT IS LIKE A WEASCL -- score: 26
55: MEQHINKS IT IS LIKE A WEASCL -- score: 26
56: MEQHINKS IT IS LIKE A WEASCL -- score: 26
57: METHINKS IT IS LIKE A WEASCL -- score: 27
58: METHINKS IT IS LIKE A WEASCL -- score: 27
59: METHINKS IT IS LIKE A WEASCL -- score: 27
60: METHINKS IT IS LIKE A WEASCL -- score: 27
61: METHINKS IT IS LIKE A WEASCL -- score: 27
62: METHINKS IT IS LIKE A WEASCL -- score: 27
63: METHINKS IT IS LIKE A WEASCL -- score: 27
64: METHINKS IT IS LIKE A WEASCL -- score: 27
65: METHINKS IT IS LIKE A WEASEL -- score: 28

গল্ফিং সাহায্যের জন্য Sp3000 কে প্রচুর ধন্যবাদ thanks


1

জুলিয়া, 281 বাইট

Golfed:

r=n->['A':'Z',' '][rand(1:27,n)]
s=a->sum(a.=="METHINKS IT IS LIKE A WEASEL".data)
p=(z,a,s)->println(z,": ",join(a)," -- score: ",s)
a = r(28)
b = s(a)
z = 0
p(z,a,b)
while b<28
c=b
d=a
for i=1:100
e=[rand()<.95?i:r(1)[1]for i=a]
f=s(e)
if(f>c)
c=f
d=e
end
end
a=d
b=c
p(z,a,b)
z+=1
end

অ্যালগরিদম নিজেই খুব চালাক নয়, তবে এখানে কিছু দুর্দান্ত বিট রয়েছে। অন্য অক্ষর দিয়ে একটি অক্ষর সীমার মিশ্রন, তাহলে এটি মধ্যে সূচিবদ্ধ: ['A':'Z',' '][rand(1:27,n)]এবং Booleans থেকে একটি অ্যারের সমষ্টি গ্রহণ (সাধারণ, কিন্তু আমি এখনও ধারণা ভালবাসা): sum(a.=="METHINKS IT IS LIKE A WEASEL".data)। আমি 300 এর নিচে পেয়েছি খুশি!

Ungolfed:

randchar = n -> ['A':'Z',' '][rand(1:27,n)]
score = a -> sum(a.=="METHINKS IT IS LIKE A WEASEL".data)
myprint = (z,a,s) -> println(z,": ",join(a)," -- score: ",s)
currentarray = randchar(28)
currentscore = score(currentarray)
z = 0
myprint(z,currentarray,currentscore)
while currentscore < 28
    bestscore = currentscore
    bestarray = currentarray
    for i = 1:100
        temparray = [rand()<.95?i:randchar(1)[1]for i=currentarray]
        tempscore = score(temparray)
        if(tempscore > bestscore)
            bestscore = tempscore
            bestarray = temparray
        end
    end
    currentarray = bestarray
    currentscore = bestscore
    myprint(z,currentarray,currentscore)
    z+=1
end
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.