Estás harto de todos los desafíos de codegolf. Por lo tanto, decide escribir un programa que automáticamente desarrolle algún código de Python para usted. Hay 3 casos de prueba:
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)
Reglas:
Su programa no debe apuntar al código que publiqué específicamente, y debería funcionar con cualquier código de Python 2. Me reservo el derecho de cambiar el código fuente que está siendo codegolf. Puede suponer que no hay cadenas de varias líneas (por lo que no tiene que crear un analizador completo) y que no se llama a los locales ().
La salida de su programa debe ejecutarse de manera idéntica al código fuente original. (Es decir, debe producir la misma salida. Los nombres de variables y las construcciones de lenguaje se pueden cambiar, siempre que la salida permanezca igual)
Puede usar STDIO o un archivo para hacer su entrada / salida del código fuente.
Su puntaje será la suma de los bytes de la salida de su programa.
(El código mencionado anteriormente se ha tomado de http://rosettacode.org/ bajo la Licencia de Documentación Libre GNU 1.2 )
if __name__ == '__main__':
afectaría el comportamiento en algunos contextos pero no en otros. Para otro ejemplo, si la entrada no oculta supone que lee un int de stdin y lanza un tipo de excepción si se le da algo más, ¿podría la entrada golfed lanzar un tipo diferente de excepción si se le da un número entero?random_long_variable=0;print locals()
:?Respuestas:
Python 2.7, 794
He tenido la intención de construir un minificador para Python por un tiempo, así que esta es una buena oportunidad para investigar el problema.
El programa utiliza una combinación de análisis de expresiones regulares y operaciones de análisis de Python. El espacio en blanco se minimiza. Las variables definidas por el usuario se reemplazan por una variable de una sola letra (¡que no está en uso!). Finalmente, el
while True
declaración se pone a dieta.Los tres casos de prueba se verifican como funcionando correctamente. Me podría imaginar algunos ejemplos patológicos que podrían dar lugar a errores en el código generado, pero el algoritmo debería ser robusto en la mayoría de las circunstancias.
Resultados
Salida
Código
fuente
sed, 1074 (antes 1390)
Tipo de respuesta muy suave, de fruta baja, para que la pelota ruede:
Reemplazar
<--TAB-->
con TABpersonajes realesDeficiencia obvia:
Como podemos asumir que no hay cadenas de varias líneas, solo eliminamos los espacios iniciales / finales de los operadores si no hay
'
o"
en la línea dada. Esto podría mejorarse, pero <murmura algo sobre sed regex siempre siendo codicioso> .Prueba de la siguiente manera:
fuente
Python 3.4, 1134
Este programa debería funcionar bien para la mayoría de los programas. Curiosamente, el caso de prueba Sp3000 es mucho más fácil de optimizar para mi programa que sus programas. La entrada se acepta a través del archivo especificado en el primer argumento. El archivo real se modifica.
Cómo funciona:
Primero, este programa verifica si su programa interactúa con el usuario o si usa aleatoriamente. Si lo hace, el programa no se modifica. A continuación, se ejecuta el programa. El programa luego se reemplaza con
print "output"
. Finalmente, si el programa es más corto que su salida, no se modifica.Programa de Sp3000, optimizado:
Programa de bonificación súper de Sp3000, optimizado:
La versión optimizada solo tiene un descuento del 0,001% del tiempo.
fuente
argv
,input
yrandom
, que su código rompería. ;)print id(0)
es bueno.