Lý lịch
Python 3 có nhiều loại chuỗi ký tự. Ví dụ: chuỗi this 'is' an exa\\m/ple
có thể được biểu diễn dưới dạng:
'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"""
Như bạn có thể thấy, sử dụng các dấu phân cách khác nhau cho các chuỗi có thể kéo dài hoặc rút ngắn chuỗi bằng cách thay đổi lối thoát cần thiết cho một số ký tự nhất định. Một số dấu phân cách không thể được sử dụng cho tất cả các chuỗi: r'
bị thiếu ở trên (xem phần giải thích sau). Biết chuỗi của bạn là rất hữu ích trong mã golf.
Người ta cũng có thể kết hợp nhiều chuỗi ký tự thành một:
'this \'is\' an ''''exa\\\\m/ple'''
"this 'is' an "r'exa\\m/ple'
Thử thách
Thách thức là, đưa ra một chuỗi ASCII có thể in được, để đưa ra biểu diễn bằng chữ ngắn nhất của nó trong Python.
Chi tiết về cơ học chuỗi
Strings có thể được phân tách '
, "
, '''
và """
. Một chuỗi kết thúc khi dấu phân cách bắt đầu được nhấn lại không được thoát.
Nếu một chuỗi ký tự bắt đầu bằng '''
hoặc """
nó được sử dụng như là dấu phân cách. Nếu không '
hoặc "
được sử dụng.
Nhân vật có thể được trốn thoát bằng cách đặt một \
trước họ. Điều này chèn ký tự trong chuỗi và loại bỏ bất kỳ ý nghĩa đặc biệt nào nó có thể có. Ví dụ, ở 'a \' b'
giữa '
được thoát và do đó không kết thúc bằng chữ và chuỗi kết quả là a ' b
.
Tùy chọn, một trong r
hoặc R
có thể được chèn trước dấu phân cách bắt đầu. Nếu điều này được thực hiện, việc thoát \
sẽ xuất hiện trong kết quả. Ví dụ, r'a \' b'
đánh giá để a \' b
. Đây là lý do tại sao a ' b
không thể được phân định bởi r'
.
Để trốn thoát '''
hoặc """
, người ta chỉ cần thoát khỏi một trong các nhân vật.
Những chữ này có thể được nối với nhau, nối các nội dung của chúng.
Quy tắc
- Đầu vào là chuỗi để chơi gôn. Chỉ có thể in ASCII, do đó không có dòng mới hoặc ký tự đặc biệt nào khác.
- Đầu ra là chuỗi golf. Nếu có nhiều giải pháp, đầu ra một.
- Để đơn giản hóa các thách thức, trong phi
r
chuỗi bất kỳ thoát trừ\\
,\'
và\"
được coi là không hợp lệ. Chúng không được sử dụng trong đầu ra, mặc dù'\m'
bằng với'\\m'
Python. Điều này loại bỏ sự cần thiết phải xử lý mã thoát đặc biệt như\n
. - Các chuỗi tích hợp để chơi gôn Python không được phép. Python
repr
được cho phép, vì dù sao nó cũng nhảm nhí. - Luật golf tiêu chuẩn được áp dụng.
Ví dụ đầu vào / đầu ra
Tôi đã cố gắng hết sức để xác minh những điều này, nhưng hãy cho tôi biết nếu có sai sót. Nếu có nhiều đầu ra hợp lệ cho các trường hợp, tất cả chúng đều được liệt kê bên dưới đầu vào.
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''\''''
Cảm ơn Anders Kaseorg vì những trường hợp bổ sung này:
\\'"\\'\
-> "\\\\'\"\\\\'\\"
''"""''"""''
-> '''''"""''"""'\''''
u'
và b'
?
b
thậm chí không thể kết hợp với các chuỗi thông thường, vì vậy tôi chỉ bỏ qua chúng.
"
hoặc'
->"""t"'e"'s"'t"'s"'t"'r"'i"'n"'g'''