배경
파이썬 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''\''''
이러한 추가 사례에 대해 Anders Kaseorg 에게 감사드립니다 .
\\'"\\'\
-> "\\\\'\"\\\\'\\"
''"""''"""''
-> '''''"""''"""'\''''
u'
그리고 b'
?
b
일반 문자열과 결합 할 수 없으므로 방금 제외했습니다.
"
또는'
->로 시작하거나 끝나는 문자열은 어떻습니까?"""t"'e"'s"'t"'s"'t"'r"'i"'n"'g'''