मनमाना-लम्बाई टर्नरी स्क्वायरफ्री शब्द


9

यदि कोई पंक्ति में दो बार कोई विकल्प नहीं है, तो एक स्ट्रिंग वर्गाकार है

3-अक्षर वर्णमाला का उपयोग करके एक मनमाने ढंग से लंबे वर्गफ्री शब्द का होना संभव है।

एक प्रोग्राम है जो stdin से एक सकारात्मक पूर्णांक n स्वीकार करता है और लंबाई में से किसी squarefree शब्द एन, अक्षरों का उपयोग प्रिंट लिखें A, Bऔर C

सबसे छोटा कोड जीतता है।

जवाबों:


4

GolfScript ( 40 27 वर्ण)

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

दृष्टिकोण थ्यू-मोरी अनुक्रम में 1s की रन-लंबाई: विकिपीडिया में वर्णित लोगों में से एक पर एक तुच्छ संस्करण है।

यदि अतिरिक्त अनुगामी न्यूलाइन अस्वीकार्य है, तो इसे एक वर्ण के 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 चार्ट बचाता है - लेकिन हे यह गोल्फ है!
सूक्ति

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 है n ) वर्ण लंबा

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"]

सच्चा
सच्चा
सच्चा
झूठा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.