পাইথন 2 , 779 801 বাইট
আপনার উত্সটি পড়ার অনুমতি রয়েছে তা দেখানোর জন্য চ্যালেঞ্জটি সম্পাদনা করা হলেও আমি ইতিমধ্যে এটি ছাড়াই আমার সমাধান তৈরি করেছিলাম। সুতরাং, এটি সম্ভব তা দেখাতে, আমি এটি শেষ করেছি। উত্স ফাইলটি পড়া হয়নি:
s='s=%r;print s%%s\nfrom random import*;L=4;f=open(__file__,"wa"[L>5]);R=randint\nf.write("\\n".join((s%%s).split("\\n")[1:5:2]).replace("4",`map(ord,s%%s)`))\nif L>5:exec\'b=[];h=%%d\\nwhile~-h:b+=[h%%%%1000];h/=1000\\nwhile b:r,p,n=b[-3:];b=b[:-3];L=[L[:p]+L[p+1:],L[:p]+[r]+L[p+n:]][n<2if L else 1]\\nprint"".join(map(chr,L))\'%%1\n\nn=R(0,2);p=R(0,len(L if L>5else s%%s));r=R(0,255);f.write("%%03d"*3%%(n,p,r))';print s%s
from random import*;L=4;f=open(__file__,"wa"[L>5]);R=randint
f.write("\n".join((s%s).split("\n")[1:5:2]).replace("4",`map(ord,s%s)`))
if L>5:exec'b=[];h=%d\nwhile~-h:b+=[h%%1000];h/=1000\nwhile b:r,p,n=b[-3:];b=b[:-3];L=[L[:p]+L[p+1:],L[:p]+[r]+L[p+n:]][n<2if L else 1]\nprint"".join(map(chr,L))'%1
n=R(0,2);p=R(0,len(L if L>5else s%s));r=R(0,255);f.write("%03d"*3%(n,p,r))
এটি অনলাইন চেষ্টা করুন! (দ্রষ্টব্য যে এটি উত্সটি পরিবর্তন করবে না work এটি কাজ করার জন্য আপনাকে এটিকে স্থানীয়ভাবে চালাতে হবে)
রূপান্তরগুলি কাজ করে তা দেখানোর জন্য, এখানে একটি পরীক্ষা প্রোগ্রাম রয়েছে (বর্তমানে সর্বদা 100
জন্য চয়ন করার জন্য সেটআপ করা হয়েছে r
, এবং এটি প্রতিটি তালিকার সংমিশ্রণের জন্য n
এবং p
প্রাথমিক তালিকার জন্য ফলাফল মুদ্রণ করে ))
ব্যাখ্যা:
s='s=%r;print s%%s...';print s%s...
প্রথম লাইনটি আপনার ক্লাসিক কুইন, তবে এর পরে কী হবে তার জন্য অ্যাকাউন্ট করতে অনেক বেশি সময় লাগবে।
from random import*;L=4;f=open(__file__,"wa"[L>5]);R=randint
র্যান্ডম পূর্ণসংখ্যার জন্য আমদানি করুন। L
উত্স কোডের অর্ডিনালের তালিকায় পরিণত হবে, তবে প্রাথমিকভাবে এটি একটি পূর্ণসংখ্যা যা উত্সের অন্য কোথাও ব্যবহৃত হয় না স্ট্রিং প্রতিস্থাপনের জন্য অনুমতি দেয়। নতুন উত্স লিখতে ফাইলটি খুলুন। পরে চালানো হয়, এটি পরিবর্তে সংযোজনে খুলবে।
f.write("\n".join((s%s).split("\n")[1:5:2]).replace("4",`map(ord,s%s)`))
কোডের প্রথম এবং তৃতীয় লাইনগুলি সরান। 4
অধ্যক্ষগুলির তালিকা সহ উপরেরটি প্রতিস্থাপন করুন ।
if L>5:exec'b=[];h=%d\nwhile~-h:b+=[h%%1000];h/=1000\nwhile b:r,p,n=b[-3:];b=b[:-3];L=[L[:p]+L[p+1:],L[:p]+[r]+L[p+n:]][n<2if L else 1]\nprint"".join(map(chr,L))'%1
n=R(0,2);p=R(0,len(L if L>5else s%s));r=R(0,255);f.write("%03d"*3%(n,p,r))
টুকরো:
if L>5:
- প্রথম নির্বাহের সময় এই লাইনটি এড়িয়ে যায়। পরে, L
একটি তালিকা হবে, এবং এই চলবে। আমি exec
শেষটি ব্যাখ্যা করব , কারণ এটি প্রথমবার চালানো হয়নি।
n
- একটি এলোমেলো সংখ্যা 0-2। এটি নির্ধারণ করে যে কোন পরিবর্তনটি ঘটে (0 = sertোকান, 1 = প্রতিস্থাপন করুন, 2 = মুছুন)।
p
- তালিকার একটি এলোমেলো অবস্থান যা পরিবর্তনটি ঘটবে।
r
- তালিকায় orোকানো বা প্রতিস্থাপনের জন্য একটি এলোমেলো নম্বর
f.write("%03d"*3%(n,p,r))
- উত্স ফাইলটির শেষে 3 টি র্যান্ডম সংযুক্ত করুন। প্রতিটি রান, এটি একটি পূর্ণসংখ্যার সাথে যুক্ত হবে যা ঘটেছে এমন প্রাথমিক উত্সের সমস্ত পরিবর্তনকে এনকোড করে।
exec'b=[];h=%d...'%1...
- এলোমেলো নম্বর পান ( %1
পরে রান করার পরে পাওয়া যাবে ), তালিকায় পরিবর্তনগুলি প্রয়োগ করুন এবং মুদ্রণ করুন।
while~-h:b+=[h%%1000];h/=1000
- শীর্ষস্থানীয়দের জন্য অ্যাকাউন্টিং, এ পর্যন্ত তৈরি র্যান্ডমগুলির একটি তালিকা তৈরি করুন 1
যা নেতৃস্থানীয় শূন্যগুলির সাথে সমস্যাগুলি প্রতিরোধ করে।
while b:r,p,n=b[-3:];b=b[:-3]
- এই পুনরাবৃত্তির জন্য র্যান্ডমগুলি বরাদ্দ করুন।
L=[L[:p]+L[p+1:],L[:p]+[r]+L[p+n:]][n<2if L else 1]
- (0 = সন্নিবেশ, 1 = প্রতিস্থাপন, 2 = মুছুন)
print"".join(map(chr,L))
- পরিবর্তিত উত্স মুদ্রণ করুন।