sfondo
Python 3 ha molti tipi di letterali stringa. Ad esempio, la stringa this 'is' an exa\\m/ple
può essere rappresentata come:
'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"""
Come puoi vedere, l'uso di delimitatori diversi per le stringhe può allungare o accorciare le stringhe modificando l'escaping necessario per alcuni caratteri. Alcuni delimitatori non possono essere usati per tutte le stringhe: r'
manca sopra (vedi più avanti per la spiegazione). Conoscere le tue corde è molto utile nel golf di codice.
Si possono anche combinare più letterali stringa in uno:
'this \'is\' an ''''exa\\\\m/ple'''
"this 'is' an "r'exa\\m/ple'
Sfida
La sfida è, data una stringa ASCII stampabile, di produrre la sua rappresentazione letterale più corta in Python.
Dettagli sulla meccanica delle corde
Stringhe possono essere delimitate utilizzando '
, "
, '''
e """
. Una stringa termina quando il delimitatore iniziale viene colpito di nuovo senza caratteri di escape.
Se una stringa letterale inizia con '''
o """
viene consumata come delimitatore. Altrimenti '
o "
viene utilizzato.
I personaggi possono essere sfuggiti posizionandoli \
prima di loro. Ciò inserisce il carattere nella stringa ed elimina qualsiasi significato speciale che può avere. Ad esempio, nel 'a \' b'
mezzo '
viene evaso e quindi non termina il valore letterale, e la stringa risultante è a ' b
.
Facoltativamente, uno r
o R
può essere inserito prima del delimitatore iniziale. In questo caso, la fuga \
apparirà nel risultato. Ad esempio, r'a \' b'
valuta a \' b
. Questo è il motivo per cui a ' b
non può essere delimitato da r'
.
Per scappare '''
o """
, basta sfuggire a uno dei personaggi.
Questi letterali possono essere concatenati insieme, il che concatena il loro contenuto.
Regole
- L'input è la stringa da golf. Solo ASCII stampabile, quindi nessuna nuova riga o altri caratteri speciali.
- L'output è il valore letterale della stringa golfizzata. Se ci sono più soluzioni, creane una.
- Per semplificare la sfida, in non
r
stringhe di eventuali fughe ad eccezione di\\
,\'
e\"
sono considerati non validi. Non devono essere usati nell'output, anche se'\m'
è uguale a'\\m'
in Python. Ciò elimina la necessità di elaborare codici di escape speciali come\n
. - Non sono consentiti i builtin per il golf delle stringhe Python. Python
repr
è permesso, dato che è comunque scadente. - Si applicano le regole standard del code-golf .
Esempi di ingressi / uscite
Ho fatto del mio meglio per verificarli, ma fatemi sapere se ci sono errori. Se ci sono più output validi per i casi, questi sono elencati sotto l'input.
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''\''''
Grazie ad Anders Kaseorg per questi casi aggiuntivi:
\\'"\\'\
-> "\\\\'\"\\\\'\\"
''"""''"""''
-> '''''"""''"""'\''''
u'
e b'
?
b
non possono nemmeno essere combinate con stringhe normali, quindi le ho lasciate fuori.
"
o'
->"""t"'e"'s"'t"'s"'t"'r"'i"'n"'g'''