Este es un desafío de practicar la optimización del golf en Python: trucos y accesos directos reutilizables para eliminar algunos caracteres. Muchos estarán familiarizados con los golfistas de Python y usarán ideas comunes de los Consejos de Python . Algunos de estos usan funciones específicas de Python que quizás no sepa que existen a menos que las haya visto, así que eche un vistazo a los consejos si está atascado.
Objetivo: hay diez problemas, cada uno de los cuales es un fragmento de referencia del código de Python para que lo optimices y una descripción del código. Su objetivo es reescribirlo para que sea más corto pero funcionalmente equivalente.
Su puntaje, que está tratando de minimizar, es la longitud total de su código en todos los fragmentos. La longitud de los fragmentos de referencia es de 150. Tiebreaker es la publicación más antigua.
Publicar respuestas: para cada problema, publique su código y su recuento de caracteres. Puede publicar el fragmento de referencia si no encontró algo más corto. Se pretende que no mire las respuestas de los demás cuando publique las suyas. Marque con spoiler cada problema individual, incluidos los recuentos de caracteres individuales. Puedes dejar el recuento total revelado. Siéntase libre de deshacer su solución o publicar nuevas soluciones no contaminadas.
Detalles sobre la legalidad: la equivalencia funcional significa que el código se puede reemplazar en un programa sin afectar su comportamiento (ignorando cosas como el uso de memoria y la precedencia del operador como parte de una expresión). Las expresiones deben producir valores equivalentes por ==
. Tenga en cuenta que 1.0==1==True
. Su código no debe tener efectos secundarios a menos que se indique lo contrario. No pretendo que los problemas sean específicos de la versión, pero por si acaso, puede especificar una versión de Python para cada problema.
Problema 1: siga iterando mientras la lista L
tenga al menos 7 elementos
# 16 chars
while len(L)>=7:
Problema 2 : Verifique si dos flotadores x
y y
ambos son positivos.
# 11 chars
x>0 and y>0
Problema 3 : si Boolean b
es verdadero, elimine el primer elemento de L
. De lo contrario, déjelo sin cambios.
# 12 chars
if b:L=L[1:]
Problema 4 : Verifique si todos los elementos de una lista L
de números no vacía son iguales. Para este problema, está bien modificar la lista.
# 22 chars
all(x==L[0]for x in L)
Problema 5 : agregue un número n
al final de una lista L
solo si L
ya contiene ese número.
# 16 chars
if n in L:L+=[n]
Problema 6 : Exprese el signo de un flotador x
: +1
para positivo, 0
para 0, -1
para negativo.
# 20 chars
abs(x)/x if x else 0
Problema 7 Continúe un bucle mientras el primer elemento de L
, una lista de booleanos, sea True
. También pare si L
está vacío.
# 17 chars
while L and L[0]:
Problema 8 : Continúe un ciclo siempre que n
sea mayor que 1. Se n
garantiza que el número sea un entero positivo.
# 10 chars
while n>1:
Problema 9 : Verifique si un número entero representado como una cadena s
es negativo (es decir, comienza con '-').
# 9 chars
s[0]=='-'
Problema 10 : Convertir un booleano b
a "Win"
/ "Lose"
, con True
-> "Win"
y False
-> "Lose"
.
# 17 chars
["Lose","Win"][b]
Advertencia: Spoilers a continuación, no se desplace hacia abajo si desea resolverlos usted mismo.
Si solo quiere saber la puntuación óptima para un problema:
Problema 1:
12
Problema 2:
5 5
Problema 3:
7 7
Problema 4:
13
Problema 5:
13
Problema 6:
8
Problema 7:
12
Problema 8:
9 9
Problema 9:
5 5
Problema 10:
15
Respuestas:
Total:
10410199 caracteresProblema 1
Problema 2
Problema 3
Problema 4
Problema 5
Problema 6
Problema 7
Problema 8
Problema 9
Problema 10
fuente
Tamaño total:
128122120117116115111107104Problema 1
Siga iterando mientras la lista
L
tenga al menos 7 elementos.Problema 2
Compruebe si dos flotadores
x
yy
ambos son positivos.Problema 3
Si Boolean
b
es verdadero, elimine el primer elemento deL
. De lo contrario, déjelo sin cambios.Problema 4
Compruebe si todos los elementos de una lista
L
de números no vacía son iguales. Para este problema, está bien modificar la lista.Problema 5
Agregue un número
n
al final de una listaL
solo siL
ya contiene ese número.Problema 6
Exprese el signo de un flotador
x
:+1
para positivo,0
para 0,-1
para negativo.Problema 7
Continúe un bucle mientras el primer elemento de
L
, una lista de booleanos, seaTrue
. También pare siL
está vacío.Problema 8
Continúe un ciclo siempre que
n
sea mayor que 1. Sen
garantiza que el número sea un entero positivo.Problema 9
Compruebe si un número entero representado como una cadena
s
es negativo (es decir, comienza con '-').Problema 10
Convierta un booleano
b
a"Win"
/"Lose"
, conTrue
->"Win"
yFalse
->"Lose"
.fuente
Total:
106104102 caracteresProblema 1
Problema 2
Problema 3
Problema 4
Problema 5
Problema 6
Problema 7
Problema 8
Problema 9
Problema 10
fuente
b
es 0, 1 o 2, y todo lo que puede hacer es(b-1)*"Hello"or b*"Goodbye"or"Good Afternoon"
)~b*"Hello"
.["Good Afternoon","Goodbye","Hello"][b]
ganaría: PTotal: 99 bytes
Problema 1
Problema 2
Problema 3
Problema 4
Problema 5
Problema 6
Problema 7
Problema 8
Problema 9
Problema 10
fuente
Total: 106
fuente
[L[0]]
?Tamaño total:
# 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # 9 # 10123 121 120116fuente
Total: 121
Primeros intentos:
Problema 1
Problema 2
Problema 3
Problema 4
Problema 5
Problema 6
Problema 7
Problema 8
Problema 9
Problema 10
fuente