Arka fon
Python 3'ün birçok string string değişkeni var. Örneğin, dize this 'is' an exa\\m/ple
şu şekilde temsil edilebilir:
'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"""
Gördüğünüz gibi, dizgiler için farklı sınırlayıcılar kullanmak, belirli karakterler için gereken kaçış değerini değiştirerek dizeleri uzatabilir veya kısaltabilir. Bazı sınırlayıcılar tüm karakter dizileri için kullanılamaz: r'
yukarıda eksik (açıklama için daha sonra bakınız). Dizelerinizi bilmek, kod golfünde çok faydalıdır.
Ayrıca, birden çok dize değişmezi bire birleştirebilir:
'this \'is\' an ''''exa\\\\m/ple'''
"this 'is' an "r'exa\\m/ple'
Meydan okuma
Mücadeleye, yazdırılabilir bir ASCII dizgisi verildiğinde , Python'daki en kısa değişmez gösterimini göstermesi gerekiyor.
Tel mekaniği ile ilgili detaylar
Dizeleri kullanılarak ayrılmış olabilir '
, "
, '''
ve """
. Başlangıç sınırlayıcısına tekrar basılmadan basıldığında bir dize biter.
Bir dize değişmez ile başlar '''
veya """
sınırlayıcı olarak tüketilir. Aksi takdirde '
veya "
kullanılır.
Karakterler \
önlerinden bir tane koyarak kaçabilir . Bu, karaktere karakter ekler ve sahip olabileceği herhangi bir özel anlamı ortadan kaldırır. Örneğin 'a \' b'
, ortada '
kaçar ve dolayısıyla değişmez biter ve sonuçta ortaya çıkan dize a ' b
.
İsteğe bağlı olarak, başlangıç sınırlayıcısından önce r
veya bunlardan biri R
yerleştirilebilir. Bu yapılırsa, kaçış \
sonuçta görünecektir. Örneğin, r'a \' b'
değerlendirir a \' b
. Bu yüzden a ' b
sınırlandırılamaz r'
.
Kaçmak için '''
ya """
bir tek karakterlerden biri kaçmak gerekiyor.
Bu değişmezler, içeriğini birleştiren birlikte birleştirilebilir.
kurallar
- Giriş golf için dizedir. Yalnızca yazdırılabilir ASCII, bu nedenle yeni satırlar veya diğer özel karakterler yoktur.
- Çıktı golfed string değişmezdir. Birden fazla çözüm varsa, bir tane çıktı.
- Meseleyi basitleştirmek için,
r
iplerde olmayanlar hariç\\
, herhangi bir kaçış\'
ve\"
geçersiz sayılır. Python'a'\m'
eşit olsalar bile çıktıda kullanılmamalıdırlar'\\m'
. Bu gibi özel kaçış kodlarını işleme gereksinimini ortadan kaldırır\n
. - Python dizelerinin golf oynamaları için izin verilmez. Python'a
repr
izin verilir, çünkü zaten berbattır. - Standart kod-golf kuralları geçerlidir.
Örnek girişler / çıkışlar
Bunları doğrulamak için elimden geleni yaptım, ancak hatalar varsa bana bildirin. Durumlarda birden fazla geçerli çıktı varsa, tümü girişin altında listelenir.
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''\''''
Bu ek durumlar için Anders Kaseorg'a teşekkürler :
\\'"\\'\
-> "\\\\'\"\\\\'\\"
''"""''"""''
-> '''''"""''"""'\''''
u'
ve b'
?
b
normal dizelerle bile birleştirilemezler, bu yüzden onları dışarıda bıraktım.
"
da'
->"""t"'e"'s"'t"'s"'t"'r"'i"'n"'g'''