गोल्फिंग पायथन स्ट्रिंग शाब्दिक


21

पृष्ठभूमि

पायथन 3 में कई प्रकार के स्ट्रिंग साहित्यिक हैं। उदाहरण के लिए, स्ट्रिंग this 'is' an exa\\m/pleको इस प्रकार दर्शाया जा सकता है:

'this \'is\' an exa\\\\m/ple'
"this 'is' an exa\\\\m/ple"
r"this 'is' an exa\\m/ple"
'''this 'is' an exa\\\\m/ple'''
"""this 'is' an exa\\\\m/ple"""
r'''this 'is' an exa\\m/ple'''
r"""this 'is' an exa\\m/ple"""

जैसा कि आप देख सकते हैं, स्ट्रिंग्स के लिए अलग-अलग सीमांकक का उपयोग करके कुछ पात्रों के लिए आवश्यक भागने को बदलकर तारों को लंबा या छोटा किया जा सकता है। कुछ सीमांकक का उपयोग सभी तारों के लिए नहीं किया जा सकता है: r'ऊपर गायब है (स्पष्टीकरण के लिए बाद में देखें)। कोडिंग गोल्फ में आपके तार जानना बहुत उपयोगी है।

एक में कई स्ट्रिंग शाब्दिक जोड़ सकते हैं:

'this \'is\' an ''''exa\\\\m/ple'''
"this 'is' an "r'exa\\m/ple'

चुनौती

पायथन में अपने सबसे छोटे शाब्दिक प्रतिनिधित्व को प्रस्तुत करने के लिए एक मुद्रण योग्य ASCII स्ट्रिंग को चुनौती दी गई है ।

स्ट्रिंग यांत्रिकी पर विवरण

तार का उपयोग कर सीमांकित किया जा सकता है ', ", '''और """। एक स्ट्रिंग तब समाप्त होती है जब आरंभिक सीमांकक को फिर से मारा जाता है।

यदि एक स्ट्रिंग शाब्दिक के साथ शुरू होता है '''या """इसे सीमांकक के रूप में सेवन किया जाता है। अन्यथा 'या "उपयोग किया जाता है।

वर्णों को \उनके सामने रखकर भाग सकते हैं। यह स्ट्रिंग में चरित्र को सम्मिलित करता है और इसके किसी विशेष अर्थ को समाप्त करता है। उदाहरण के लिए, 'a \' b'बीच 'में बच जाता है और इस प्रकार शाब्दिक रूप से समाप्त नहीं होता है, और परिणामस्वरूप स्ट्रिंग है a ' b

वैकल्पिक रूप से, प्रारंभिक सीमांकक से पहले एक rया Rडाला जा सकता है। यदि ऐसा किया जाता है, \तो परिणाम में पलायन दिखाई देगा। उदाहरण के लिए, का r'a \' b'मूल्यांकन करता है a \' b। यही कारण है कि a ' bइसे सीमांकित नहीं किया जा सकता है r'

बचने के लिए '''या """, किसी एक पात्र को भागने की जरूरत है।

इन शाब्दिकों को एक साथ समेटा जा सकता है, जो उनकी सामग्री को समेटता है।

नियम

  • इनपुट गोल्फ के लिए स्ट्रिंग है। केवल मुद्रण योग्य ASCII, इसलिए कोई नया अंक या अन्य विशेष वर्ण नहीं।
  • आउटपुट गॉल्फ़्ड स्ट्रिंग शाब्दिक है। यदि कई समाधान हैं, तो आउटपुट एक।
  • चुनौती को सरल बनाने के लिए, गैर- rतार में इसके अलावा कोई भी बच नहीं जाता है \\, \'और \"इसे अवैध माना जाता है। उन्हें आउटपुट में उपयोग नहीं किया जाना चाहिए, भले ही पायथन में '\m'बराबर हो '\\m'। यह विशेष एस्केप कोड को संसाधित करने की आवश्यकता को दूर करता है जैसे कि \n
  • गोल्फिंग पायथन स्ट्रिंग्स के लिए निर्मित भवन को बंद कर दिया गया है। अजगर की reprअनुमति है, क्योंकि यह वैसे भी भद्दा है।
  • मानक नियम लागू होते हैं।

उदाहरण इनपुट / आउटपुट

मैंने इन्हें सत्यापित करने की पूरी कोशिश की, लेकिन अगर गलतियाँ हों तो मुझे बताएं। यदि मामलों में कई वैध आउटपुट हैं, तो वे सभी इनपुट के नीचे सूचीबद्ध हैं।

test
 -> 'test'
 -> "test"
te\st
 -> 'te\\st'
 -> "te\\st"
 -> r'te\st'
 -> r"te\st"
te'st
 -> "te'st"
te"st
 -> 'te"st'
t"e"s't
 -> 't"e"s\'t'
te\'st
 -> "te\\'st"
 -> r'te\'st'
 -> r"te\'st"
te\'\"st
 -> r'te\'\"st'
 -> r"te\'\"st"
t"'e"'s"'t"'s"'t"'r"'i"'n"'g
 -> """t"'e"'s"'t"'s"'t"'r"'i"'n"'g"""
 -> '''t"'e"'s"'t"'s"'t"'r"'i"'n"'g'''
t"\e"\s"\t"\s'\t"\r"\i"\n"\g
 -> r"""t"\e"\s"\t"\s'\t"\r"\i"\n"\g"""
 -> r'''t"\e"\s"\t"\s'\t"\r"\i"\n"\g'''
t"""e"""s"""'''t'''s'''"""t"""r"""'''i'''n'''g
 -> 't"""e"""s"""'"'''t'''s'''"'"""t"""r"""'"'''i'''n'''g"
t\"""e\"""s\"""'''t'''s'''\"""t\"""r\"""'''i'''n'''g
 -> r"""t\"""e\"""s\"""'''t'''s'''\"""t\"""r\"""'''i'''n'''g"""
t"e"s"t"s"t"r"i"n"g"\'\'\'\'\'\'\'\
 -> r't"e"s"t"s"t"r"i"n"g"\'\'\'\'\'\'\'''\\'
 -> r't"e"s"t"s"t"r"i"n"g"\'\'\'\'\'\'\''"\\"
"""t"'e"'s"'t"'s"'t"'r"'i"'n"'g'''
 -> """\"""t"'e"'s"'t"'s"'t"'r"'i"'n"'g'''"""
 -> '''"""t"'e"'s"'t"'s"'t"'r"'i"'n"'g''\''''

इन अतिरिक्त मामलों के लिए एंडर्स कसेगोर को धन्यवाद :

\\'"\\'\
 -> "\\\\'\"\\\\'\\"
''"""''"""''
 -> '''''"""''"""'\''''

स्ट्रिंग्स के बारे में क्या जो शुरू या समाप्त होता है "या '-> """t"'e"'s"'t"'s"'t"'r"'i"'n"'g'''
रॉड

@ मैं एक परीक्षण के मामले के रूप में जोड़ दूँगा।
पुरकाकूदरी

5
एक भाषा टैग के साथ एक अच्छी चुनौती का अच्छा उदाहरण है।
एडम जूल

के बारे में u'और क्या b'?
caird coinheringaahing

@cairdcoinheringaahing वे गोल्फ के लिए कोई उपयोगी सुविधाएँ प्रदान नहीं करते हैं, और bनियमित स्ट्रिंग्स के साथ भी संयुक्त नहीं किया जा सकता है, इसलिए मैंने उन्हें बस छोड़ दिया।
पुरकाकूदरी

जवाबों:


7

पायथन 3 , 264 262 बाइट्स

f=lambda s,b='\\',r=str.replace:min(sum([['r'+d+s+d,d+r(r(s[:-1],b,b+b),d,d[1:]+b+d[0])+b*(s[-1:]in[b,d[0]])+s[-1:]+d][d in r(r(s+d[1:],b+b,'x'),b+d[0],b)or r(s,b+b,'')[-1:]==b:]for d in["'",'"',"'''",'"""']],[f(s[:k])+f(s[k:])for k in range(1,len(s))]),key=len)

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

यह काम करता है, लेकिन बिना संस्मरण के बहुत धीमा है, जिसे आप जोड़ सकते हैं

import functools
f=functools.lru_cache(None)(f)

यह परीक्षण मामलों में से एक के लिए एक बेहतर समाधान मिला:

t"e"s"t"s"t"r"i"n"g"\'\'\'\'\'\'\'\
 -> 't"e"s"t"s"t"r"i"n"g"'r"\'\'\'\'\'\'\'"'\\'
 -> r't"e"s"t"s"t"r"i"n"g"\'\'\'\'\'\'\'''\\'

इस उत्तर के पिछले संस्करणों ने निम्नलिखित पर गलत परिणाम दिए, जिन्हें परीक्षण मामलों के रूप में जोड़ा जा सकता है:

\\'"\\'\
 -> "\\\\'\"\\\\'\\"
''"""''"""''
 -> '''''"""''"""'\''''

1
अच्छा काम! परीक्षण के मामले के लिए धन्यवाद, मैंने इसे चुनौती में सही किया है।
पुरकाकूदरी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.