স্বেচ্ছাসেবী-দৈর্ঘ্য টার্নারি স্কোয়ারফ্রি শব্দ


9

স্ট্রিংটি স্কোয়ারফ্রি হয় যদি এটিতে পরপর দু'বার কোনও স্ট্রিং থাকে না।

3-অক্ষরের বর্ণমালা ব্যবহার করে একটি নির্বিচারে দীর্ঘ স্কোয়ারফ্রি শব্দ থাকা সম্ভব।

একটি প্রোগ্রাম যা stdin থেকে একটি ধনাত্মক পূর্ণসংখ্যা এন গ্রহণ এবং দৈর্ঘ্য কোন squarefree শব্দ এন, টি অক্ষর ব্যবহার ছাপে লিখুন A, Bএবং C

সংক্ষিপ্ততম কোড জিতেছে।

উত্তর:


4

গল্ফস্ক্রিপ্ট ( 40 27 টি অক্ষর)

~1,{.{!}%+}2$*1,/<{,65+}%n+

থিও-মোর্স ক্রমের 1-এর রান-দৈর্ঘ্য: উইকিপিডিয়ায় বর্ণিত একটির মধ্যে পদ্ধতির একটি তুচ্ছ বৈকল্পিক।

যদি অতিরিক্ত চিহ্ন সম্পর্কে newline অগ্রহণযোগ্য প্রতিস্থাপন দ্বারা একটি অক্ষর খরচে মুছে ফেলা হতে পারে nসঙ্গে ''


6

পাইথন, 94

n=input()
x=[0]
exec"x+=[1-y for y in x];"*n
print''.join('ABC'[x[i+1]-x[i]]for i in range(n))

এটি উইকিপিডিয়া থেকে থু – মোর্স সিকোয়েন্স পদ্ধতিটি ব্যবহার করে।

দক্ষ সংস্করণ (100 টি অক্ষর):

n=input()
x=[0]
while x==x[:n]:x+=[1-y for y in x]
print''.join('ABC'[x[i+1]-x[i]]for i in range(n))

1
exec"x+=[1-y for y in x];"*nদক্ষতার ব্যয়ে 6 টি অক্ষর বাঁচায় - তবে আরে এটি গল্ফ!
gnibbler

4

পাইথন, 129 125 119

লিঙ্কযুক্ত উইকি পৃষ্ঠায় বর্ণিত জন লেচের পদ্ধতিটি ব্যবহার করা।

s='A'
n=input()
while len(s)<=n:s=''.join('ABCBCACABBCAABCCABBCACABABCBCACABBCAABC'[ord(t)%5::3]for t in s)
print s[:n]

1
আপনি এর সাথে কয়েকটি অক্ষর সংরক্ষণ করতে পারেন:'ABCBCACABBCAABCCABBCACABABCBCACABBCAABC'[ord(t)%5::3]
grc

while s[:n]==s:আরও 1 টি সঞ্চয় করে
gnibbler

3

পাইথন 2 - 112 টি অক্ষর

এটি বেশ অদক্ষ। এটি প্রয়োজনের চেয়ে অনেক বেশি দীর্ঘ স্ট্রিং উত্পন্ন করে এবং তারপরে এটি কেটে দেয়। উদাহরণস্বরূপ অন্তর্বর্তী sজন্য n=762748517 (13 হয় এন ) অক্ষর দীর্ঘ

s='A'
n=input()
exec"s=''.join('ABCBCACABBCAABCCABBCACABABCBCACABBCAABC'[ord(t)%5::3]for t in s);"*n
print s[:n]

2

গণিত 159 140 134

সম্পাদনা করুন : পুনরাবৃত্তি ( NestWhile) ব্যবহার করে একটি সম্পূর্ণ পুনর্লিখন । অনেক দ্রুত এবং কোনও অপচয় করার প্রচেষ্টা নেই।

কোড

g@n_:=StringTake[NestWhile[#~StringReplace~{"A"-> "ABCBACBCABCBA","B"-> "BCACBACABCACB",
     "C"->"CABACBABCABAC"}&,"ABC",StringLength[#]<n&],n]

ব্যবহার

দশ মিলিয়ন অক্ষর সহ একটি ত্রৈমাসিক বর্গক্ষেত্র মুক্ত শব্দ তৈরি করতে এটি প্রায় 1/40 সেকেন্ড সময় নেয়

g[10]
g[53]
g[506]
AbsoluteTiming[g[10^6];]

ফলাফল

যাচাইকরণ

f স্ট্রিংটি বর্গমুক্ত কিনা তা পরীক্ষা করবে।

f[s_]:=StringFreeQ[s, x__~~x__]

উপরের ফলাফলগুলি এবং একটি কেস যা "সিসি" স্ট্রিংটিতে উপস্থিত রয়েছে তা পরীক্ষা করা হচ্ছে।

f@Out[336]
f@Out[337]
f@Out[338]
f["ABCBACBCABCBABCACBACCABCACBCABACBABCABACBCACBACABCACBA"]

সত্য
সত্য
সত্য
মিথ্যা

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.