tło
Python 3 ma wiele rodzajów literałów łańcuchowych. Na przykład ciąg this 'is' an exa\\m/ple
może być reprezentowany jako:
'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"""
Jak widać, użycie różnych ograniczników dla ciągów może wydłużyć lub skrócić ciągi, zmieniając odstępy wymagane dla niektórych znaków. Niektórych ograniczników nie można używać dla wszystkich ciągów: r'
brakuje go powyżej (wyjaśnienie znajduje się później). Znajomość łańcuchów jest bardzo przydatna w golfie kodowym.
Można także łączyć wiele literałów łańcuchowych w jeden:
'this \'is\' an ''''exa\\\\m/ple'''
"this 'is' an "r'exa\\m/ple'
Wyzwanie
Wyzwaniem jest, biorąc pod uwagę ciąg ASCII do wydrukowania, wygenerowanie najkrótszej dosłownej reprezentacji w Pythonie.
Szczegóły dotyczące mechaniki strun
Łańcuchy mogą być rozdzielane za pomocą '
, "
, '''
i """
. Łańcuch kończy się, gdy początkowy ogranicznik zostanie ponownie uderzony bezkolizyjnie.
Jeśli literał łańcuchowy zaczyna się od '''
lub """
jest używany jako separator. W przeciwnym razie '
lub "
jest używany.
Postacie można uciec, stawiając \
przed nimi. To wstawia znak do łańcucha i eliminuje wszelkie specjalne znaczenie, jakie może mieć. Na przykład, 'a \' b'
pośrodku '
jest znak ucieczki, a zatem nie kończy się literałem, a wynikowy ciąg znaków to a ' b
.
Opcjonalnie jeden z r
lub R
może być wstawiony przed początkowym ogranicznikiem. Jeśli tak się stanie, \
w wyniku pojawi się znak ucieczki . Na przykład r'a \' b'
ocenia na a \' b
. Dlatego a ' b
nie może być rozdzielany przez r'
.
Ucieczki '''
lub """
jeden tylko musi uciec jeden z bohaterów.
Te literały można łączyć razem, co łączy ich zawartość.
Zasady
- Dane wejściowe to ciąg do golfa. Tylko ASCII do wydruku, więc nie ma nowego wiersza ani innych znaków specjalnych.
- Wynikiem jest dosłowny ciąg golfowy. Jeśli istnieje wiele rozwiązań, wypisz jedno.
- Aby uprościć wyzwanie, w nie-
r
ciągów żadnych ucieczek z wyjątkiem\\
,\'
i\"
są uznawane za nieważne. Nie można ich używać w danych wyjściowych, nawet jeśli'\m'
są one równe'\\m'
w Pythonie. Eliminuje to potrzebę przetwarzania specjalnych kodów ucieczki, takich jak\n
. - Wbudowane do gry w golfa ciągi Python są niedozwolone. Python
repr
jest dozwolony, ponieważ i tak jest gówniany. - Obowiązują standardowe zasady gry w golfa .
Przykładowe wejścia / wyjścia
Starałem się jak najlepiej to sprawdzić, ale daj mi znać, jeśli występują błędy. Jeśli istnieje wiele prawidłowych danych wyjściowych do przypadków, wszystkie są wymienione poniżej danych wejściowych.
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''\''''
Podziękowania dla Andersa Kaseorga za te dodatkowe przypadki:
\\'"\\'\
-> "\\\\'\"\\\\'\\"
''"""''"""''
-> '''''"""''"""'\''''
u'
i b'
?
b
nie można ich nawet łączyć ze zwykłymi strunami, więc po prostu je pominąłem.
"
lub'
->"""t"'e"'s"'t"'s"'t"'r"'i"'n"'g'''