バックグラウンド
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'
ありません(説明については後述)。あなたの弦を知ることは、コードゴルフで非常に役立ちます。
複数の文字列リテラルを1つに結合することもできます。
'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のみであるため、改行やその他の特殊文字は使用できません。
- 出力は、ゴルフの文字列リテラルです。複数のソリューションがある場合は、1つを出力します。
- 非で、挑戦を簡単にするために
r
、文字列以外の任意のエスケープを\\
、\'
そして\"
無効とみなされます。Pythonで'\m'
同等であっても、出力で使用しないでください'\\m'
。これにより、などの特別なエスケープコードを処理する必要がなくなり\n
ます。 - Python文字列のゴルフ用の組み込みは許可されていません。
repr
とにかくくだらないので、Python は許可されています。 - 標準のコードゴルフ規則が適用されます。
入力/出力の例
これらを確認するために最善を尽くしましたが、間違いがあるかどうかを教えてください。ケースに対する有効な出力が複数ある場合、それらはすべて入力の下にリストされます。
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'''