Фон
Минифайеры, как правило, используются при обслуживании JavaScript в вашем веб-браузере. Обычно он используется для уменьшения количества байтов, которые должны быть отправлены. Экономия полосы пропускания полезна по очевидным причинам. Некоторые люди используют obfuscaters (которые намеренно затрудняют чтение кода), я не говорю о них.
Мы будем минимизировать Python 2
Я спорил о том, использовать ли JavaScript или Python для минимизации опыта, и я выбрал Python по двум причинам: пустое пространство имеет значение, и я думаю, что это добавит интересную динамику к проблеме. Кроме того, использование Python 2.7 обеспечит другую динамику, такую как удаление лишних ()
во время печати (т.е. print("Hello world")
против print"Hello world"
). Лично я бы предпочел открыть его на любом языке, но для некоторых языков этот процесс не имеет большого смысла. И какой язык вы решите минимизировать, будет напрямую влиять на ваш счет (и если язык даже можно будет минимизировать).
Спекуляции
Ваша цель состоит в том, чтобы модифицировать код только таким образом, чтобы он никоим образом не изменил его функциональность. Конечно, вы можете изменять имена переменных (внутри вашей минимизирующей программы), если это не влияет на вывод (отслеживайте область видимости ). Хотя я даю вам конкретную программу, пожалуйста, не оптимизируйте ее для тестового случая, так как все стандартные лазейки запрещены.
Оценка : длина программы после ее минимизации.
Ввод : любая программа на Python 2.7 (без ошибок)
Вывод : минимизированная версия.
Хотя ваш код должен быть в состоянии вместить все допустимые входные данные Python 2.7, необходимо проверить ваш скрипт на предмет чего-то, чтобы доказать его эффективность.
Нажмите здесь, чтобы посмотреть пример программы.
Делая проблему более доступной
Не стесняйтесь использовать или изменять любой код, найденный в моем решении (см. Ниже). Я сделал это, чтобы вы начали с базовой обработки цитат; однако вы можете расширить его до отступа и т. д.
Примеры способов минимизации Python
Все пустое пространство может быть заменено минимально возможным количеством (я признаю, что в Python вы можете делать некоторые хитрые вещи с помощью вкладок , но я оставлю это на ваше усмотрение, чтобы решить, применять его или нет).
пример
Следующее:
def print_a_range(a):
for i in range(a):
print(i)
Может быть:
def print_a_range(a):
for i in range(a):
print(i)
Технически, если внутри цикла есть только одна строка, вы можете сжать ее еще больше:
def print_a_range(a):
for i in range(a):print(i) #Note, you can also remove the `()` here.
Тем не менее, есть еще один способ уменьшить пробелы в Python:
Следующее:
print ([a * 2 for a in range(20) if a % 2 == 0])
Может быть:
print([a*2for a in range(20)if a%2==0])
Обратите внимание, что между 2
и for
. Не должно быть пробела . Переменная, функции и ключевые слова не могут начинаться с цифры. Итак, интерпретатор Python в порядке <num><keyword>
, без пробела. Вы также должны заметить, что между )
и if
.
Обратите внимание, вы не должны изменять вывод программы! Так:
print"f(x)=x*2 is a great equation!"
Вышеприведенный оператор печати должен остаться прежним, поскольку удаление пробела между 2
и is
приведет к изменению вывода.
'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111'
в '1'*100
разрешено? Требовать поступить так же, как поведение?