स्ट्रिंग के घूर्णी समरूपता


9

एक घुमाव "एक स्ट्रिंग को दो टुकड़ों में विभाजित करके और उनके क्रम को उलट कर बनाया जाता है" । किसी ऑब्जेक्ट को किसी ऑपरेशन के तहत सममित किया जाता है यदि ऑब्जेक्ट उक्त ऑपरेशन को लागू करने के बाद अपरिवर्तित रहता है। तो, एक "घूर्णी समरूपता" तथ्य यह है कि एक स्ट्रिंग "रोटेशन" के बाद अपरिवर्तित रहती है।

एक गैर खाली स्ट्रिंग को देखते हुए sसे केवल अक्षर से मिलकर aकरने के लिए z, उत्पादन स्ट्रिंग के घूर्णी समरूपता के सर्वोच्च क्रम।

परीक्षण के मामलों:

input        output
a            1
abcd         1
abab         2
dfdfdfdfdfdf 6

ये है । बाइट्स जीत में सबसे छोटा जवाब। मानक खामियां लागू होती हैं।



1
पहले सीएमसी के रूप में पूछा गया: chat.stackexchange.com/transcript/message/37509699#37509699
जॉन ड्वोरक

यह स्ट्रिंग के आकार की तुलना में छोटे सममित घुमावों की संख्या खोजने के समान है। जैसा कि @ 0 'बताते हैं कि वे एक चक्रीय समूह बनाते हैं इसलिए उच्चतम क्रम समूह के आकार को खोजने के समान है। इससे उस कार्य की व्याख्या हो जाएगी जो वर्तमान में बहुत स्पष्ट है।
तदर्थ गार्फ हंटर

जवाबों:


8

रेटिना , 15 बाइट्स

(^.+?|\1)+$
$#1

इसे ऑनलाइन आज़माएं!

एक स्ट्रिंग को दोहराते हुए पूरे स्ट्रिंग से मेल खाता है (कम सब्सट्रेटिंग को असहमति के कारण प्राथमिकता दी जाती है .+?) और पूरे स्ट्रिंग को हमारे द्वारा उपयोग किए गए पुनरावृत्ति की संख्या के साथ बदल देता है।


ओह, बेशक, लालची। और यहाँ मेरे साथ संघर्ष कर रहा था .*(.+)$(?<=^(\1)*)...
नील

5

बधाई हो!
लीक

@LeakyNun यह आपका समाधान था, है ना?
एरिक आउटगॉल्फ

वास्तव में, यह था।
लीक नून

क्या आपका नाम गौंटलेट संदर्भ है?
user2357112

@ user2357112 नहीं, यह आउटगोल्फिंग को संदर्भित करता है अर्थात जब आप एक समाधान पोस्ट करते हैं जो दूसरे पोस्ट किए गए समाधान से छोटा होता है।
1913


2

पायथन, 31 बाइट्स

lambda s:len(s)/(s+s).find(s,1)

के पहले अशून्य सूचकांक का पता लगाएं sमें s+sबाहर कितनी दूर हम प्राप्त करने के लिए यह बारी बारी से करने के लिए है आंकड़ा करने के लिए sवापस, तो की लंबाई विभाजित sहै कि संख्या से। विचारों के आधार पर मैंने अन्यत्र देखा


2

प्रोलोग (एसडब्ल्यूआई) , 64 बाइट्स

A+B:-findall(X,(append(X,Y,A),append(Y,X,A)),[_|Z]),length(Z,B).

इसे ऑनलाइन आज़माएं!

एक विधेय को परिभाषित करता है +/2जो अपने पहले तर्क ( A) के रूप में एक स्ट्रिंग (चरित्र कोड की सूची के रूप में) लेता है और Bउच्चतम क्रम सममित रोटेशन के क्रम में अपना दूसरा तर्क ( ) सेट करता है ।

व्याख्या

यह कार्यक्रम इस तथ्य का उपयोग करता है कि एक स्ट्रिंग पर सममित रोटेशन का सेट एक चक्रीय समूह है और इसलिए सममित रोटेशन के सेट का क्रम उच्चतम क्रम सममित रोटेशन के क्रम के बराबर है। इस प्रकार यह प्रोग्राम इनपुट स्ट्रिंग पर सममित घुमावों की कुल संख्या का पता लगाकर वांछित परिणाम की गणना करने में सक्षम है।

कोड स्पष्टीकरण

भारी उठाने का बहुमत findall/3विधेय के लिए एक कॉल द्वारा किया जाता है । findall/3विधेय पहला तर्क (के लिए सभी विभिन्न संभावित मान पाता है Xइस मामले में) ऐसी है कि अभिव्यक्ति दूसरा तर्क के रूप में दिया (सच है (append(X,Y,A),append(Y,X,A)), कि के बारे में अधिक बाद में)। अंत में यह Xअंतिम तर्क ( [_|Z]) में सूची के रूप में इनमें से प्रत्येक संभावित मूल्यों को संग्रहीत करता है ।

अभिव्यक्ति findall/3को दूसरे तर्क के रूप में पारित किया गया है, (append(X,Y,A),append(Y,X,A))यह append/3निर्दिष्ट करने के लिए विधेय का उपयोग करता है कि Xकुछ अभी तक अपरिभाषित के साथ Yसमान होना चाहिए A, इनपुट स्ट्रिंग के बराबर होना चाहिए , और उसी के Yसाथ समरूप Xहोना भी समान होना चाहिए A। इसका मतलब यह है किX कुछ उपसर्ग Aऐसे होने चाहिए कि यदि इसे सामने से हटाकर Aपीछे जोड़ा जाए तो परिणामी स्ट्रिंग समान है AXइस संपत्ति के साथ एस के सेट में लगभग एक-से-एक पत्राचार है, जिसके सममित घुमावों के साथ A। हमेशा डबल काउंटिंग का एक मामला होता है जो इस तथ्य के कारण होता है कि दोनों खाली स्ट्रिंग और Aउपसर्ग हैंAकि 0 के रोटेशन के अनुरूप है A। चूंकि 0-rotation की Aहमेशा सममिति होती है, जिससे Xs की परिणामी सूची की लंबाई findall/3सममित रोटेशन की संख्या से अधिक होगी A

डबल काउंटिंग समस्या को हल करने के लिए, मैं findall/3विधेय के तीसरे तर्क पर मेल खाते पैटर्न का उपयोग करता हूं । प्रोलॉग सूचियों में उनके सिर (पहले तत्व) और उनकी पूंछ (बाकी) के जोड़े के रूप में दर्शाया गया है। इस प्रकार [_|Z]एक सूची का प्रतिनिधित्व करता है जिसकी पूंछ बराबर होती है Z। इसका मतलब यह है कि लंबाई की लंबाई विधेय Zद्वारा पाए जाने वाले उपसर्गों की संख्या से कम है findall/3और इस प्रकार सममितिक घूर्णन की संख्या के बराबर है A। अंत में, मैं लंबाई तक length/2सेट Bकरने के लिए विधेय का उपयोग करता हूं Z


2

जावास्क्रिप्ट (ईएस 6), 42 41 बाइट्स

@ L4m2 के लिए 1 बाइट का धन्यवाद सहेजा गया

s=>s.length/s.match`(.+?)\\1*$`[1].length

परीक्षण के मामलों


f=s=>s.length/s.match`(.+?)\\1*$`[1].length
l4m2




0

हास्केल , 49 बाइट्स

g x=sum[1|a<-[1..length x],drop a x++take a x==x]

इसे ऑनलाइन आज़माएं!

हास्केल , 49 बाइट्स

g x=sum[1|(a,_)<-zip[1..]x,drop a x++take a x==x]

इसे ऑनलाइन आज़माएं!

व्याख्या

यह इंगित किए गए सरल समाधान @ 0 'का उपयोग करता है। चूंकि स्ट्रिंग के घूर्णन एक चक्रीय समूह बनाते हैं उच्चतम क्रम तत्व समूह के आकार के समान होता है, इसलिए हम सममित घुमावों की संख्या ज्ञात करके इकाई का क्रम प्राप्त कर सकते हैं।

कोड सरल एक सूची की समझ रखता है और मूल स्ट्रिंग को संरक्षित करने वाले घुमाव की संख्या की गणना करता है।


आप इस तरह से 3 बाइट्स को बचाने के लिए drop<>takeउपयोग (++)करने के बजाय उपयोग कर सकते हैं ।

@BMO (<>)प्रस्तावना में नहीं है, हास्केल I के साथ काम करने के संस्करण में।
तदर्थ गार्फ हंटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.