Vous en avez marre de tous les défis du codegolf. Par conséquent, vous décidez d'écrire un programme qui jouera automatiquement du code Python pour vous. Il existe 3 cas de test:
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)
Règles:
Votre programme ne doit pas cibler spécifiquement le code que j'ai publié et doit fonctionner avec n'importe quel code Python 2. Je me réserve le droit de modifier le code source en cours de golf. Vous pouvez supposer qu'il n'y a pas de chaînes multi-lignes (donc vous n'avez pas construit un analyseur complet), et que locals () n'est pas appelé.
La sortie de votre programme doit s'exécuter de la même manière que le code source d'origine. (À savoir, il doit produire la même sortie. Les noms de variables et les constructions de langage peuvent être modifiés, tant que la sortie reste la même)
Vous pouvez utiliser STDIO ou un fichier pour faire votre entrée / sortie du code source.
Votre score sera la somme des octets de la sortie de votre programme.
(Le code ci-dessus provient de http://rosettacode.org/ sous la licence GNU Free Documentation License 1.2 )
if __name__ == '__main__':
affecterait le comportement dans certains contextes mais pas dans d'autres. Pour un autre exemple, si l'entrée non golfée suppose qu'elle lit un entier dans stdin et lève un type d'exception si on lui donne autre chose, l'entrée golfée pourrait-elle lancer un type d'exception différent si on lui donne un non entier?random_long_variable=0;print locals()
:?Réponses:
Python 2.7, 794
J'avais l'intention de construire un minifieur pour Python depuis un moment, c'est donc une bonne occasion d'étudier le problème.
Le programme utilise un mélange d'analyse d'expressions régulières et d'opérations d'analyseur Python. L'espace blanc est minimisé. Les variables définies par l'utilisateur sont remplacées par une variable à une seule lettre (qui n'est pas utilisée!). Finalement, le
while True
déclaration est mise sur un régime.Les trois cas de test vérifient tous qu'ils fonctionnent correctement. Je pourrais imaginer quelques exemples pathologiques qui pourraient entraîner des erreurs dans le code généré mais l'algorithme devrait être robuste dans la plupart des circonstances.
Résultats
Production
Code
la source
sed, 1074 (contre 1390)
Type de réponse très doux, à faible pendaison, pour faire rouler la balle:
Remplacer
<--TAB-->
par de vrais TABpersonnagesLacune évidente:
Comme nous ne pouvons pas supposer de chaînes multi-lignes, nous ne supprimons les espaces de début / fin des opérateurs que s'il n'y en a pas
'
ou"
sur la ligne donnée. Cela pourrait être amélioré, mais <marmonne quelque chose à propos de regex sed toujours gourmand> .Testez comme suit:
la source
Python 3.4, 1134
Ce programme devrait bien fonctionner pour la plupart des programmes. Étrangement, le cas de test Sp3000 est beaucoup plus facile à optimiser pour mon programme que pour vos programmes. L'entrée est acceptée via le fichier spécifié dans le premier argument. Le fichier réel est modifié.
Comment ça fonctionne:
Tout d'abord, ce programme vérifie si votre programme interagit avec l'utilisateur ou utilise au hasard. Si tel est le cas, le programme n'est pas modifié. Ensuite, le programme est exécuté. Le programme est ensuite remplacé par
print "output"
. Enfin, si le programme est plus court que sa sortie, il n'est pas modifié.Le programme du Sp3000, optimisé:
Programme super bonus du Sp3000, optimisé:
La version optimisée n'est désactivée que 0,001% du temps.
la source
argv
,input
etrandom
que votre code casserait. ;)print id(0)
est un bon.