Задний план
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. Это избавляет от необходимости обрабатывать специальные escape-коды, такие как\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''\''''
Спасибо Anders Kaseorg за эти дополнительные случаи:
\\'"\\'\
-> "\\\\'\"\\\\'\\"
''"""''"""''
-> '''''"""''"""'\''''
u'
и b'
?
b
даже не могут быть объединены с обычными струнами, поэтому я просто не учел их.
"
или'
->"""t"'e"'s"'t"'s"'t"'r"'i"'n"'g'''