গল্ফিং পাইথনের স্ট্রিং লিটারেলস


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'

চ্যালেঞ্জ

পাইথনের সংক্ষিপ্ততম আক্ষরিক উপস্থাপনা আউটপুট দেওয়ার জন্য একটি মুদ্রণযোগ্য এএসসিআইআই স্ট্রিং দেওয়া চ্যালেঞ্জটি ।

স্ট্রিং মেকানিকের উপর বিশদ

স্ট্রিং ব্যবহার সীমায়িত করা যেতে পারে ', ", '''এবং """। একটি স্ট্রিং শেষ হয় যখন প্রারম্ভিক ডিলিমিটারটি আবার আনসকেপড হিট হয়।

যদি একটি স্ট্রিং আক্ষরিক শুরু হয় '''বা """এটি ডিলিমিটার হিসাবে গ্রাস করা হয়। অন্যথায় 'বা "ব্যবহৃত হয়।

চরিত্রগুলি \তাদের সামনে রেখে কিছুটা রক্ষা পাওয়া যায় । এটি স্ট্রিংয়ের মধ্যে অক্ষরটি সন্নিবেশ করায় এবং এর কোনও বিশেষ অর্থ মুছতে পারে। উদাহরণস্বরূপ, 'a \' b'মাঝখানে 'পালিয়ে গেছে এবং এভাবে আক্ষরিক শেষ হয় না, এবং ফলাফলটি স্ট্রিং হয়a ' b

Allyচ্ছিকভাবে, একটি rবা Rপ্রারম্ভিক ডিলিমিটারের আগে beোকানো যেতে পারে। এটি করা হয়ে গেলে, পালানোর \ফলাফলটি প্রদর্শিত হবে। উদাহরণস্বরূপ, r'a \' b'মূল্যায়ন a \' b। এ কারণেই a ' bসীমিত করা যায় নাr'

পালাতে '''বা""" , কেবল একটি চরিত্রের পালাতে হবে।

এই আক্ষরিকগুলি একত্রে একত্রিত করা যায়, যা তাদের বিষয়বস্তুগুলিকে একত্র করে।

বিধি

  • ইনপুটটি গল্ফের স্ট্রিং। কেবল প্রিন্টযোগ্য এএসসিআইআই, তাই কোনও নতুন লাইন বা অন্যান্য বিশেষ অক্ষর নেই।
  • আউটপুটটি গল্ফড স্ট্রিং আক্ষরিক। যদি একাধিক সমাধান থাকে তবে একটি আউটপুট।
  • চ্যালেঞ্জ, অ- মধ্যে প্রক্রিয়া সহজ করার জন্য 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
একটি ভাষা ট্যাগ সহ ভাল চ্যালেঞ্জের দুর্দান্ত উদাহরণ।
অ্যাডম


@ 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
চমৎকার কাজ! পরীক্ষার মামলার জন্য ধন্যবাদ, আমি এটিকে চ্যালেঞ্জের মধ্যে সংশোধন করেছি।
পূর্বকুডারী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.