Antecedentes
Los minificadores se usan, comúnmente, cuando se sirve JavaScript en su navegador web. Se usa comúnmente para reducir la cantidad de bytes que deben enviarse. Ahorrar ancho de banda es útil por razones obvias. Algunas personas usan ofuscadores (que intencionalmente hacen que el código sea más difícil de leer), no estoy hablando de eso.
Estaremos minificando Python 2
Estaba debatiendo si usar JavaScript o Python para la experiencia de minificación y decidí usar Python por dos razones: el espacio en blanco es importante y creo que eso agregará una dinámica interesante al problema. Además, el uso de Python 2.7 proporcionará otra dinámica, como eliminar lo superfluo ()
durante una impresión (es decir, print("Hello world")
vs. print"Hello world"
). Personalmente, hubiera preferido abrirlo a cualquier idioma, pero para algunos idiomas este proceso no tendrá mucho sentido. Y, qué idioma decide minificar afectará directamente su puntaje (y si el idioma puede ser minificado).
Especificaciones
Su objetivo es solo modificar el código de una manera que no cambie su funcionalidad de ninguna manera. Por supuesto, puede cambiar los nombres de las variables (dentro de su programa minificador) siempre que no afecte la salida (realice un seguimiento del alcance ). Aunque le estoy dando un programa específico, no optimice para el caso de prueba ya que todas las lagunas estándar están prohibidas.
Puntuación : duración del programa después de minificarlo.
Entrada : cualquier programa Python 2.7 (que no contenga errores)
Salida : una versión minificada.
Aunque su código debe poder acomodar todas las entradas válidas de Python 2.7, es necesario probar su script contra algo para demostrar su efectividad.
Haga clic aquí para ver el programa de ejemplo.
Hacer el problema más accesible
Siéntase libre de usar o modificar cualquier código que se encuentre dentro de mi solución (que figura a continuación). Hice esto para ayudarlo a comenzar con el manejo básico de cotizaciones; sin embargo, puede expandirlo a sangría, etc.
Ejemplos de formas de minificar Python
Todo el espacio en blanco podría reemplazarse con la cantidad mínima posible (reconozco que en Python puede hacer algunas cosas difíciles con pestañas , pero lo dejaré a usted para decidir si implementarlo o no).
Ejemplo
El seguimiento:
def print_a_range(a):
for i in range(a):
print(i)
Podría ser:
def print_a_range(a):
for i in range(a):
print(i)
Técnicamente, si solo hay una línea dentro de un bucle, puede comprimirla aún más:
def print_a_range(a):
for i in range(a):print(i) #Note, you can also remove the `()` here.
Sin embargo, hay otra forma de minimizar el espacio en blanco en Python:
El seguimiento:
print ([a * 2 for a in range(20) if a % 2 == 0])
Podría ser:
print([a*2for a in range(20)if a%2==0])
Tenga en cuenta que no hay necesidad de un espacio entre 2
y for
. Las variables, funciones y palabras clave no pueden comenzar con un número. Entonces, el intérprete de Python está de acuerdo <num><keyword>
, no hay espacio. También debe tener en cuenta que no tiene que haber un espacio entre )
y if
.
Tenga en cuenta que no debe cambiar la salida del programa. Entonces:
print"f(x)=x*2 is a great equation!"
La declaración de impresión anterior debería permanecer igual porque eliminar el espacio entre 2
y is
modificaría la salida.
'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111'
a '1'*100
permitido? ¿Requiere hacer ya que el comportamiento es el mismo?