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.
fuente
'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111'
a'1'*100
permitido? ¿Requiere hacer ya que el comportamiento es el mismo?Respuestas:
Python 2.7, puntaje 2013
Este programa se puede utilizar como referencia, y se le permite tomar el siguiente código y modificarlo y luego publicarlo en sus propias soluciones.
En retrospectiva, tal vez también debería haber usado regex para el manejo de cotizaciones, pero creo que en su estado actual puede ser suficiente para impulsar a las personas al problema.
Por qué elegí Python 2.7: pensé que sería más fácil probar si hice que el programa se bloqueara con la
exec
palabra clave.Este código toma el programa como
in.txt
.Pensé que al menos debería poner en marcha a quien quiera participar escribiendo un analizador de citas (que también maneja los comentarios) y un breve ejemplo de cómo la expresión regular, cuando se combina con el analizador de citas, realmente puede cambiar el juego en términos de La complejidad de este problema.
Nota: todavía hay mucho margen de mejora en este minificador. Al igual que podría jugar con sangría, nombres de variables y eliminar el paréntesis cuando se usan mis palabras clave, como
print
oyield
.Salida del programa:
fuente