Link: http://macacochefe.blogspot.com/2007/08/code-contest-em-tempos-de-mega-sena.html
Em resposta do desafio do Rodrigo Sol, que eu li no blog do José Oliveira e no blog do Daniel Martins, que consiste em rodar 100000 jogadas de números aleatórios de 1 a 60 e ver quais os que saíram mais.
from random import randrange
from itertools import groupby
from operator import itemgetter
x = [item for item in sorted([(k, len(list(g))) for k, g in groupby(sorted([randrange(1,61) for item in xrange(0,100000)]))],key=itemgetter(1),reverse=True)][:6]
print(x)
O código ficou comprido, mas eu achei razoavelmente fácil de ler (bom, fui eu quem escreveu, sou suspeito). Algumas coisas legais do python: o randrange (gerar números aleatórios numa range. Existe também o randint para esse fim, com a diferença que o randint inclui o último número e o randrange pára um número antes do fim do range. Além disso, o randrange me pareceu um pouquinho mais rápido). O groupby parece coisa de banco de dados, e é mesmo uma pitada de álgebra relacional aplicada aqui.
Aliás, essa não é a primeira vez que eu faço algum código relacionado à mega-sena: usando Python mesmo, e a planilha de resultados que se pode obter no site da caixa, eu verifiquei quais os números que tinham saído mais vezes. Até a última vez que eu verifiquei, o número mais comum era o 42.
Por falar em groupby e no módulo itertools, no Python Cookbook existe uma implementação dos algoritmos de junção de banco de dados usando esses carinhas. Se você gostar de banco de dados como eu, vale a pena conferir.
Subscribe: 



