Você está cansado de todos os desafios do codegolf. Portanto, você decide escrever um programa que irá automaticamente jogar algum código Python para você. Existem 3 casos de teste:
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)
Regras:
Seu programa não deve ter como alvo o código que eu postei especificamente e deve funcionar com qualquer código Python 2. Reservo-me o direito de alterar o código-fonte que está sendo codificado. Você pode assumir que não há seqüências de várias linhas (portanto, não é necessário criar um analisador completo) e que locals () não é chamado.
A saída do seu programa deve ser executada de maneira idêntica ao código fonte original. (Ou seja, ele deve produzir a mesma saída. Nomes de variáveis e construções de idioma podem ser alterados, desde que a saída permaneça a mesma)
Você pode usar o STDIO ou um arquivo para fazer sua entrada / saída do código fonte.
Sua pontuação será a soma dos bytes da saída do seu programa.
(O código listado acima foi retirado de http://rosettacode.org/ sob a GNU Free Documentation License 1.2 )
if __name__ == '__main__':
afetaria o comportamento em alguns contextos, mas não em outros. Por outro exemplo, se a entrada não-gasta pressupõe que lê um int a partir de stdin e lança um tipo de exceção se for dada outra coisa, a entrada golfed poderia lançar um tipo diferente de exceção se receber um número inteiro?random_long_variable=0;print locals()
:?Respostas:
Python 2.7, 794
Eu pretendo criar um minifier para Python por um tempo, portanto esta é uma boa oportunidade para investigar o problema.
O programa usa uma combinação de análise de expressão regular e operações do analisador Python. O espaço em branco é minimizado. As variáveis definidas pelo usuário são substituídas por uma única variável de letra (que não está em uso!). Finalmente, a
while True
declaração é colocada em uma dieta.Todos os três casos de teste são verificados como funcionando corretamente. Eu poderia imaginar alguns exemplos patológicos que poderiam resultar em erros no código gerado, mas o algoritmo deve ser robusto na maioria das circunstâncias.
Resultados
Resultado
Código
fonte
sed, 1074 (abaixo de 1390)
Resposta muito suave, tipo fruta baixa, para fazer a bola rolar:
Substitua
<--TAB-->
por TABcaracteres reaisDeficiência óbvia:
Como não podemos assumir cadeias de linhas múltiplas, apenas removeremos espaços iniciais / finais dos operadores se não houver
'
ou"
na linha especificada. Isso poderia ser melhorado, mas <murmura algo sobre o sed regex ser sempre ganancioso> .Teste da seguinte forma:
fonte
Python 3.4, 1134
Este programa deve funcionar bem para a maioria dos programas. Estranhamente, o caso de teste do Sp3000 é muito mais fácil de otimizar para o meu programa do que para os seus programas. A entrada é aceita através do arquivo especificado no primeiro argumento. O arquivo real é modificado.
Como funciona:
Primeiro, este programa verifica se seu programa interage com o usuário ou usa aleatoriamente. Se isso acontecer, o programa não será modificado. Em seguida, o programa é executado. O programa é então substituído por
print "output"
. Finalmente, se o programa for mais curto que sua saída, ele não será modificado.O programa Sp3000, otimizado:
O programa de super bônus do Sp3000, otimizado:
A versão otimizada está desativada apenas em 0,001% do tempo.
fonte
argv
,input
erandom
, que seu código quebraria. ;)print id(0)
é bom.