Вы устали от всех проблем Codegolf. Следовательно, вы решили написать программу, которая автоматически добавит вам код Python. Есть 3 теста:
print quickSort([0,7,3,-1,8,10,57,2])
def quickSort(arr):
less = []
pivotList = []
more = []
if len(arr) <= 1:
return arr
else:
pivot = arr[0]
for i in arr:
if i < pivot:
less.append(i)
elif i > pivot:
more.append(i)
else:
pivotList.append(i)
less = quickSort(less)
more = quickSort(more)
return less + pivotList + more
for i in xrange(1, 101):
if i % 15 == 0:
print "FizzBuzz"
elif i % 3 == 0:
print "Fizz"
elif i % 5 == 0:
print "Buzz"
else:
print i
from sys import argv
def randomGenerator(seed=1):
max_int32 = (1 << 31) - 1
seed = seed & max_int32
while True:
seed = (seed * 214013 + 2531011) & max_int32
yield seed >> 16
def deal(seed):
nc = 52
cards = range(nc - 1, -1, -1)
rnd = randomGenerator(seed)
for i, r in zip(range(nc), rnd):
j = (nc - 1) - r % (nc - i)
cards[i], cards[j] = cards[j], cards[i]
return cards
def show(cards):
l = ["A23456789TJQK"[c / 4] + "CDHS"[c % 4] for c in cards]
for i in range(0, len(cards), 8):
print " ", " ".join(l[i : i+8])
if __name__ == '__main__':
seed = int(argv[1]) if len(argv) == 2 else 11982
print "Hand", seed
deck = deal(seed)
show(deck)
Правила:
Ваша программа не должна предназначаться для кода, который я опубликовал, и должна работать с любым кодом Python 2. Я оставляю за собой право вносить изменения в исходный код. Вы можете предположить, что многострочных строк нет (поэтому вам не нужно создавать полноценный парсер), и что localals () не вызывается.
Вывод вашей программы должен работать так же, как и исходный код. (А именно, он должен выдавать одинаковые выходные данные. Имена переменных и языковые конструкции могут быть изменены, если выходные данные остаются неизменными)
Вы можете использовать STDIO или Файл для ввода / вывода исходного кода.
Ваша оценка будет суммой байтов вывода вашей программы.
(Код, указанный выше, был взят с http://rosettacode.org/ под лицензией GNU Free Documentation License 1.2 )
if __name__ == '__main__':
повлияет на поведение в некоторых контекстах, но не в других. В другом примере, если вход ungolfed предполагает, что он читает int из stdin и генерирует исключение одного типа, если ему дано что-то другое, может ли ввод с вводом в гольф генерировать исключение другого типа, если ему дано нецелое число?random_long_variable=0;print locals()
?Ответы:
Python 2.7, 794
Я давно собирался создать минификатор для Python, так что это хорошая возможность исследовать проблему.
Программа использует сочетание анализа регулярных выражений и операций синтаксического анализатора Python. Пустое пространство минимизировано. Переменные, которые определены пользователем, заменяются однобуквенной переменной (которая не используется!). Наконец-то
while True
заявление ставится на диету.Все три теста подтверждают правильность работы. Я мог бы представить некоторые патологические примеры, которые могут привести к ошибкам в сгенерированном коде, но алгоритм должен быть устойчивым в большинстве случаев.
Результаты
Выход
Код
источник
Сед, 1074 (по сравнению с 1390)
Очень мягкий, низко висящий фруктовый тип ответа, чтобы заставить мяч двигаться:
Заменить
<--TAB-->
реальными TABперсонажамиОчевидный недостаток:
Поскольку мы не можем предполагать отсутствие многострочных строк, то мы удаляем только начальные / конечные пробелы из операторов, если их нет
'
или"
на данной строке. Это может быть улучшено, но <что-то бормотает о том, что sed regex всегда жадный> .Тест следующим образом:
источник
Python 3.4, 1134
Эта программа должна работать нормально для большинства программ. Как ни странно, тестовый пример Sp3000 гораздо проще оптимизировать для моей программы, чем для ваших программ. Ввод принимается через файл, указанный в первом аргументе. Фактический файл изменен.
Как это устроено:
Во-первых, эта программа проверяет, взаимодействует ли ваша программа с пользователем вообще или использует случайным образом. Если это так, программа не изменяется. Далее программа запускается. Затем программа заменяется на
print "output"
. Наконец, если программа короче, чем ее вывод, она не изменяется.Программа Sp3000, оптимизированная:
Супер бонусная программа Sp3000, оптимизированная:
Оптимизированная версия отключена только в .001% времени.
источник
argv
,input
иrandom
, которые ваш код сломается. ;)print id(0)
это хорошо.