Фон
У Python 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 для виведення його найкоротшого буквального представлення на Python.
Деталі про механіку струн
Рядки можуть бути розділені з допомогою '
, "
, '''
і """
. Рядок закінчується, коли стартовий роздільник розміщений знову без зміни.
Якщо літеральний рядок починається з '''
або """
він використовується як роздільник. Інакше '
або "
використовується.
Символів можна уникнути, поставивши \
перед собою а. Це вставляє символ у рядок і виключає будь-яке особливе значення, яке воно може мати. Наприклад, в 'a \' b'
середині '
вибирається і, таким чином, не закінчується буквальним, і результуюча рядок є a ' b
.
Необов’язково, один із r
або R
може бути вставлений перед початковим роздільником. Якщо це зроблено, \
в результаті з’явиться втеча . Наприклад, r'a \' b'
оцінює до a \' b
. Ось чому a ' b
не можна обмежуватись r'
.
Щоб втекти '''
або """
, потрібно лише втекти одному з персонажів.
Ці буквари можуть бути об'єднані разом, що об'єднує їхній зміст.
Правила
- Вхід - це рядок для гольфу. Друкується лише ASCII, тому немає нових рядків та інших спеціальних символів.
- Вихід - це літеральний гольф-рядок. Якщо є кілька рішень, виведіть одне.
- Щоб спростити виклик, у
r
рядках будь-які втечі, крім\\
,\'
і\"
вважаються недійсними. Вони не повинні використовуватися у вихідних даних, навіть якщо'\m'
вони рівні'\\m'
в Python. Це усуває необхідність обробляти спеціальні коди евакуації, такі як\n
. - Вбудовані для гольфу струни Python заборонені. Python
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''\''''
Дякуємо Андерсу Касеоргу за такі додаткові випадки:
\\'"\\'\
-> "\\\\'\"\\\\'\\"
''"""''"""''
-> '''''"""''"""'\''''
u'
і b'
?
b
навіть не можуть поєднуватися зі звичайними струнами, тому я просто їх покинув.
"
або'
->"""t"'e"'s"'t"'s"'t"'r"'i"'n"'g'''