पहचान
इसलिए मैं अपना समय बर्बाद कर रहा हूं फिर से प्रत्यय छंटाई एल्गोरिदम पर शोध कर रहा हूं, हाथ से और कोड में नए विचारों का मूल्यांकन कर रहा हूं। लेकिन मैं हमेशा अपने प्रत्ययों के प्रकार को याद रखने के लिए संघर्ष करता हूँ! क्या आप बता सकते हैं कि मेरे प्रत्यय किस प्रकार के हैं?
वामपंथी-सबसे क्या?
बहुत सारे प्रत्यय एल्गोरिदम (एसएआईएस, केए, मेरे अपने डावरे) समूह को क्रमबद्ध करने के लिए विभिन्न प्रकारों में प्रत्यय लगाते हैं। दो बुनियादी प्रकार हैं: एस-प्रकार और एल-टाइप प्रत्यय। एस-टाइप प्रत्यय वे प्रत्यय हैं जो लेक्सिकोग्राफिक रूप से कम ( एस मॉलर) निम्न प्रत्यय की तुलना में कम होते हैं और एल-टाइप अगर यह लेक्सिकोग्राफिक रूप से अधिक ( एल एगर) है। एक बाएं-सबसे एस-प्रकार ( एलएमएस-प्रकार ) बस इतना है: एक एस-टाइप प्रत्यय जो एल-टाइप प्रत्यय से पहले है ।
इन एलएमएस-प्रकार के प्रत्ययों के बारे में विशेष बात यह है कि एक बार जब हम उन्हें हल करते हैं तो हम रैखिक समय में अन्य सभी प्रत्ययों को क्रमबद्ध कर सकते हैं! है ना कमाल?
चुनौती
एक स्ट्रिंग को देखते हुए यह एक विशेष चरित्र द्वारा समाप्त किया जाता है जो उस स्ट्रिंग में किसी भी अन्य चरित्र से कम है (उदाहरण के लिए, नल से भी छोटा)। प्रत्येक प्रत्यय के लिए एक प्रकार का संक्षारक चार आउटपुट।
आप स्वतंत्र रूप से जो चार जो प्रकार के लिए उपयोग करने के लिए चुन सकते हैं, लेकिन मैं पसंद करते हैं L, S and *के लिए L-, S- and LMS-typeजब तक वे कर रहे हैं के रूप में सभी प्रिंट करने योग्य ( 0x20 - 0x7E)।
उदाहरण
स्ट्रिंग mmiissiissiippiआउटपुट को देखते हुए (उपयोग करते समय L, S and *):
LL*SLL*SLL*SLLL
उदाहरण के लिए पहले Lइस तथ्य के कारण है कि mmiissiissiippi$लेक्सिकोग्राफिक रूप से अधिक है miissiissiippi$( $जोड़ा गया न्यूनतम चरित्र का प्रतिनिधित्व करता है):
L - mmiissiissiippi$ > miissiissiippi$
L - miissiissiippi$ > iissiissiippi$
* - iissiissiippi$ < issiissiippi and preceeded by L
S - issiissiippi$ < ssiissiippi$
L - ssiissiippi$ > siissiippi$
L - siissiippi$ > iissiippi$
* - iissiippi$ < issiippi$ and preceeded by L
S - issiippi$ < ssiippi$
L - ssiippi$ > siippi$
L - siippi$ > iippi$
* - iippi$ < ippi$ and preceeded by L
S - ippi$ < ppi$
L - ppi$ > pi$
L - pi$ > i$
L - i$ > $
कुछ और उदाहरण:
"hello world" -> "L*SSL*L*LLL"
"Hello World" -> "SSSSL*SSLLL"
"53Ab§%5qS" -> "L*SSL*SLL"
लक्ष्य
मैं पीटर कॉर्डेस को परेशान करने के लिए यहाँ नहीं हूं (मैं कुछ समय में स्टैकओवरफ़्लो पर ऐसा करने जा रहा हूं); मैं बहुत आलसी हूँ इसलिए यह कोर्स कोड-गोल्फ है ! बाइट्स जीत में सबसे छोटा जवाब।
संपादित करें: वर्णों का क्रम उनके बाइट मान द्वारा दिया गया है। इसका मतलब है कि तुलना सी की तरह होनी चाहिए strcmp।
Edit2: जैसा कि टिप्पणियों में कहा गया है कि आउटपुट प्रत्येक इनपुट चरित्र के लिए एक एकल वर्ण होना चाहिए। जबकि मैंने यह मान लिया था कि इसे "रिटर्न ए स्ट्रिंग" के रूप में समझा जाएगा, ऐसा लगता है कि कम से कम 1 उत्तर एकल पात्रों की सूची देता है। मौजूदा उत्तरों को अमान्य न करने के लिए, मैं आपको एकल वर्णों (या पूर्णांकों की सूची, जो केवल परिणाम या छपने पर मुद्रित होता है) को वापस करने की अनुमति दूंगा।
रैखिक समय के लिए युक्तियाँ:
- यह 2 समानांतर फॉरवर्ड पुनरावृत्तियों में या एकल पिछड़े पुनरावृत्ति में किया जा सकता है।
- प्रत्येक प्रत्यय की स्थिति केवल पहले 2 वर्णों पर और दूसरी प्रकार पर निर्भर करती है।
- इनपुट को रिवर्स दिशा में स्कैन करना आप एल या एस को इस तरह निर्धारित कर सकते हैं:
$t=$c<=>$d?:$t(पीएचपी 7), जहां पिछले और पिछले प्रकार$cका वर्तमान चार्ट$dहै$t। - मेरा PHP उत्तर देखें । कल मैं इनाम का पुरस्कार दूंगा।
c++स्टाइल स्ट्रिंग्स के लिए नल बाइट । इसे बाइनरी डेटा के रूप में सोचें।
*मतलब है?
*अर्थ है कि संबंधित प्रत्यय प्रकार का है left most s-type। A S-type suffix that is preceeded by a L-type suffix.।