Palpites para a Mega Sena da virada!!!

Aqui é o lugar para bater papo e trocar idéias sobre os mais variados assuntos

Moderador: Moderadores

yugi386
Usuário Nível 2
Usuário Nível 2
Mensagens: 82
Registrado em: 24 Jul 2008 10:36
Localização: Minas Gerais

Palpites para a Mega Sena da virada!!!

Mensagem por yugi386 »

Saudações!

Prezados amigos,

Para quem quiser aqui estão todas as combinações para a Mega Sena: http://www.4shared.com/archive/ESZ-xNuO ... -sena.html
São 51 arquivos .TXT com todos os 50.063.860 jogos. Para quem tiver curiosidade em como eles foram calculados basta ver o código abaixo.
Se rodar o código você terá não só os arquivos .TXT mas também um .DBF com todos os jogos.

Código: Selecionar todos

/*
----------------------------------------------------------------------------------------------------------------	
  MEGA SENA - TODOS OS JOGOS!!!
----------------------------------------------------------------------------------------------------------------	
*/

FUNCTION MAIN

	local tot := array(60), ct, n1:=1, n2:=1, n3:=1, temp := array(3), temp2 := "", matriz := {}, 	vet := array(6), contador:=1,;
		  t1, t2, t3, limite:=0, nome, joh
	private jogada := array(0)

	REQUEST DBFCDX
	RDDSETDEFAULT("DBFCDX")

	// Para Harbour 3.4 suporte a UTF-8
	REQUEST HB_LANG_PT
	HB_LANGSELECT( 'PT' )
	REQUEST HB_CODEPAGE_UTF8EX
	hb_cdpSelect( "UTF8EX" )
	// **********************

	// Iniciando e gerando tabela [jogo]

	cls	
	for ct := 1 to 60
		tot[ct] := strzero(ct,2) + space(1)
	next

	aadd( matriz, {"jogadaz","C",18,0} )
	dbCreate("jogo", matriz) 	
	close all
	use jogo exclusive
	go top
	index on jogadaz tag jogada to jogada
	set order to 1
	go top

	// Gerando combinações para 3 números

	? "Iniciando a Geração de Dados para Mega Sena"

	do while.t.
	
		if tot[n1] <> tot[n2]
			if tot[n1]<> tot[n3]
				if tot[n2] <> tot[n3]

					temp[1] := tot[n1]
					temp[2] := tot[n2]
					temp[3] := tot[n3]
			
					asort(temp)
			
					temp2 := temp[1] + temp[2] + temp[3]
			
					if ascan(jogada, temp2) == 0
						aadd(jogada,temp2)
					endif	

				endif
			endif
		endif
		
		++n1
		
		if n1 > 60
			n1 := 1
			++n2
		endif	
		
		if n2 > 60
			n2 := 1
			++n3
			? n3	
			?? " - "
			?? time()
		endif
		
		if n3 > 60
			exit
		endif	

	enddo
	
	? "Total de variações para 3 números.: " + str(len(jogada))	// total de variações para 3 números
	asort(jogada)		

	// calculando as jogadas de fato
	
	n1 := 1
	n2 := 1
	limite := len(jogada)
	
	? "Povoando a tabela de dados... "

	do while.t.
		t1 := substr(jogada[n1],1,3)
		t2 := substr(jogada[n1],4,3)
		t3 := substr(jogada[n1],7,3)
		
		if at(t1,jogada[n2])==0 
			if at(t2,jogada[n2])==0
				if at(t3,jogada[n2])==0

					vet[1] := t1
					vet[2] := t2
					vet[3] := t3
					vet[4] := substr(jogada[n2],1,3)
					vet[5] := substr(jogada[n2],4,3)
					vet[6] := substr(jogada[n2],7,3)
			
					asort(vet)
			
					temp2 := vet[1] + vet[2] + vet[3] + vet[4] + vet[5] + vet[6]
		
					go top
					seek temp2
					if.not.found()
						append blank
						replace jogadaz with temp2
					endif

				endif
			endif		
		endif
	
		++n1
		if n1 > limite
			n1 := 1
			++n2
			if n2 % 50 == 0
				? n2
				?? " - " + str(limite)
				?? " - " + str(LASTREC())
				?? " - " + time()
			endif
		endif

		if n2 > limite
			exit
		endif	
	enddo

	// Gerando os arquivos com os resultados dos jogos

	contador := 1
        go top

	for ct :=1 to 51

		nome := "jogo" + strzero(ct,2) + ".txt"

		set printer on
		set printer to &nome
		set device to printer
		set console off

		joh := 0
		primeiro := .t.
			do while .not.eof()
				if primeiro
					?? strzero(contador,8)
					primeiro := .f.
				else
					? strzero(contador,8)
				endif
				?? (" : ")
				?? jogo->jogadaz
				skip
				++ contador
				++ joh
				if joh == 1000000
					exit
				endif
			enddo

		set printer off
		set printer to 
		set device to screen
		set console on	

		? ct
	next

	close all	
	? "fim"
	inkey(0)

Return nil
OBS: demora um pouco pra gerar os arquivos.

abs,

Yugi.
Responder