Contexte
Les minificateurs sont couramment utilisés lors de la diffusion de JavaScript dans votre navigateur Web. Il est couramment utilisé pour réduire le nombre d'octets à envoyer. La sauvegarde de la bande passante est utile pour des raisons évidentes. Certaines personnes utilisent des obscurcisseurs (qui rendent intentionnellement le code plus difficile à lire), je ne parle pas de ceux-ci.
Nous allons réduire Python 2
Je débattais sur l'utilisation ou non de JavaScript ou de Python pour l'expérience de minification et j'ai choisi Python pour deux raisons: les espaces blancs sont importants et je pense que cela ajoutera une dynamique intéressante au problème. De plus, l'utilisation de Python 2.7 fournira une autre dynamique, telle que la suppression superflue ()
lors d'une impression (c.-à-d. print("Hello world")
Vs print"Hello world"
). J'aurais personnellement préféré l'ouvrir à n'importe quelle langue, mais pour certaines langues, ce processus n'aurait pas beaucoup de sens. Et, quelle langue vous décidez de minimiser aura un impact direct sur votre score (et si la langue peut même être minimisée).
Spécifications
Votre objectif est de modifier uniquement le code d'une manière qui ne changera en rien sa fonctionnalité. Vous pouvez, bien sûr, changer les noms de variables (dans votre programme de minification) tant que cela n'affecte pas la sortie (gardez une trace de la portée ). Bien que je vous donne un programme spécifique, veuillez ne pas optimiser le scénario de test car toutes les failles standard sont interdites.
Score : durée du programme après l'avoir minimisé.
Entrée : tout programme Python 2.7 (qui ne contient aucune erreur)
Sortie : une version réduite.
Bien que votre code devrait pouvoir accueillir toutes les entrées Python 2.7 valides, il est nécessaire de tester votre script par rapport à quelque chose afin de prouver son efficacité.
Cliquez ici pour voir l'exemple de programme.
Rendre le problème plus accessible
N'hésitez pas à utiliser ou à modifier tout code trouvé dans ma solution (listé ci-dessous). J'ai fait cela pour vous aider à démarrer avec la gestion de base des devis; cependant, vous pouvez l'étendre à l'indentation, etc.
Exemples de façons de réduire Python
Tous les espaces blancs pourraient être remplacés par le minimum possible (je reconnais qu'en Python, vous pouvez faire des choses délicates avec des onglets , mais je vous laisse le soin de décider de l'implémenter ou non).
Exemple
Le suivant:
def print_a_range(a):
for i in range(a):
print(i)
Pourrait être:
def print_a_range(a):
for i in range(a):
print(i)
Techniquement, s'il n'y a qu'une seule ligne dans une boucle, vous pouvez la compresser encore plus:
def print_a_range(a):
for i in range(a):print(i) #Note, you can also remove the `()` here.
Cependant, il existe une autre façon de réduire l'espace blanc en Python:
Le suivant:
print ([a * 2 for a in range(20) if a % 2 == 0])
Pourrait être:
print([a*2for a in range(20)if a%2==0])
Notez qu'il n'y a pas besoin d'espace entre 2
et for
. La variable, les fonctions et les mots clés ne peuvent pas commencer par un nombre. Ainsi, l'interpréteur Python est d'accord avec <num><keyword>
, pas d'espace. Vous devez également noter qu'il n'y a pas d'espace entre )
et if
.
Attention, vous ne devez pas modifier la sortie du programme! Donc:
print"f(x)=x*2 is a great equation!"
L'instruction print ci-dessus doit rester la même car la suppression de l'espace entre 2
et is
modifierait la sortie.
la source
'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111'
en est-il'1'*100
autorisé? Vous devez faire comme le comportement est le même?Réponses:
Score Python 2.7, 2013
Ce programme peut être utilisé comme référence, et vous êtes autorisé à prendre le code suivant et à le modifier, puis à le publier dans vos propres solutions.
Avec le recul, j'aurais peut-être dû aussi utiliser l'expression régulière pour la gestion des devis, mais je pense que dans son état actuel, cela pourrait suffire à faire démarrer le problème.
Pourquoi j'ai choisi Python 2.7: J'ai pensé qu'il serait plus facile de tester pour voir si j'ai fait planter le programme via le
exec
mot - clé.Ce code accepte le programme en tant que
in.txt
.J'ai pensé que je devrais au moins lancer la balle pour quiconque veut participer en écrivant un analyseur de devis (qui arrive également à gérer les commentaires) et un bref exemple sur la façon dont regex, lorsqu'il est combiné avec l'analyseur de devis, peut vraiment changer le jeu en termes de complexité de ce problème.
Remarque: il y a encore beaucoup de place à l'amélioration dans cette minifieuse. Comme vous pourriez jouer avec l'indentation, les noms de variables et la suppression des parenthèses lorsqu'ils sont utilisés avec mes mots clés, comme
print
ouyield
.Sortie du programme:
la source