Subversion Repositories Integrator Subversion

Rev

Rev 106 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

package br.com.ec.domain.dto;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;

import br.com.ec.core.exception.NegocioException;
import br.com.ec.core.util.VerificadorUtil;

public class MegaDTO {
       
        private Integer primeiroFixo;
        private Integer segundoFixo;
        private Integer terceiroFixo;
        private Integer totalCombinacoes;
       
        private List<Integer> numerosEscolhidos = new ArrayList<Integer>();
        private List<MegaCombinacaoDTO> combinacoes = new ArrayList<MegaCombinacaoDTO>();
       
        public Integer getPrimeiroFixo() {
                return primeiroFixo;
        }
        public void setPrimeiroFixo(Integer primeiroFixo) {
                this.primeiroFixo = primeiroFixo;
        }
       
        public Integer getSegundoFixo() {
                return segundoFixo;
        }
        public void setSegundoFixo(Integer segundoFixo) {
                this.segundoFixo = segundoFixo;
        }
       
        public Integer getTerceiroFixo() {
                return terceiroFixo;
        }
        public void setTerceiroFixo(Integer terceiroFixo) {
                this.terceiroFixo = terceiroFixo;
        }
       
        public Integer getTotalCombinacoes() {
                return totalCombinacoes;
        }
        public void setTotalCombinacoes(Integer totalCombinacoes) {
                this.totalCombinacoes = totalCombinacoes;
        }
       
        public List<Integer> getNumerosEscolhidos() {
                return numerosEscolhidos;
        }
        public void setNumerosEscolhidos(List<Integer> numerosEscolhidos) {
                this.numerosEscolhidos = numerosEscolhidos;
        }
       
        public void adicionarNumero(Integer numero) {
                if (VerificadorUtil.estaNulo(numero)) {
                        throw new NegocioException("FAVOR INFORMAR O NÚMERO");
                }
                if (getNumerosEscolhidos().contains(numero)) {
                        throw new NegocioException("NÚMERO JÁ ADICIONADO ANTERIORMENTE");
                }
                getNumerosEscolhidos().add(numero);
        }
       
        public void retirarNumero(Integer numero) {
                getNumerosEscolhidos().remove(numero);
        }
       
        public List<MegaCombinacaoDTO> getCombinacoes() {
                return combinacoes;
        }
        public void setCombinacoes(List<MegaCombinacaoDTO> combinacoes) {
                this.combinacoes = combinacoes;
        }
       
        private void adicionarCombinacao(MegaCombinacaoDTO megaCombinacaoDTO) {
                Boolean repetida = false;
                for (MegaCombinacaoDTO combinacao : this.getCombinacoes()) {
                        if (combinacao.getSequencia().containsAll(megaCombinacaoDTO.getSequencia())) {
                                repetida = true;
                                break;
                        }
                }
                if (!repetida || this.getCombinacoes().isEmpty()) {
                        this.getCombinacoes().add(megaCombinacaoDTO);
                }
        }
       
        public void gerarCombinacoes() {
                Boolean criar = true;
                MegaDTO mega = new MegaDTO();
                Integer indicador = 0;
                while (criar) {
                        MegaCombinacaoDTO megaCombinacaoDTO = new MegaCombinacaoDTO();
                        if (VerificadorUtil.naoEstaNulo(getPrimeiroFixo())) {
                                megaCombinacaoDTO.getSequencia().add(getPrimeiroFixo());
                        }
                        if (VerificadorUtil.naoEstaNulo(getSegundoFixo())) {
                                megaCombinacaoDTO.getSequencia().add(getSegundoFixo());
                        }
                        if (VerificadorUtil.naoEstaNulo(getTerceiroFixo())) {
                                megaCombinacaoDTO.getSequencia().add(getTerceiroFixo());
                        }
                       
                        while (megaCombinacaoDTO.getSequencia().size() < 6) {
                                Random gerador = new Random();
                                Integer numeroGerado = gerador.nextInt(60);
                                if (getNumerosEscolhidos().contains(numeroGerado)) {
                                        megaCombinacaoDTO.adicionarNumero(numeroGerado);
                                }
                        }
                       
//                      System.out.println("ADICIONANDO: " + megaCombinacaoDTO.getSequencia());
                       
                        mega.adicionarCombinacao(megaCombinacaoDTO);
                        indicador++;
                        if (VerificadorUtil.naoEstaNulo(getTotalCombinacoes())) {
                                if (getTotalCombinacoes() <= indicador) {
                                        System.out.println(indicador);
                                        criar = false;
                                }
                        } else if (indicador > 100000) {
//                              System.out.println(indicador);
                                criar = false;
                        }
                }
               
                StringBuilder combinacoes = new StringBuilder();
                combinacoes.append("COMBINAÇÕES:");
                for (MegaCombinacaoDTO combinacao : mega.getCombinacoes()) {
                        combinacoes.append(combinacao.getSequencia());
                }
                this.setCombinacoes(mega.getCombinacoes());
               
        }
       
        public static void main(String[] args) {
                List<Integer> escolhidos = Collections.unmodifiableList(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20));
               
                Integer primeiroFixo = 10;
                Integer segundoFixo = 12;
                Integer terceiroFixo = 14;
               
                Boolean criar = true;
                MegaDTO mega = new MegaDTO();
                Integer indicador = 0;
                while (criar) {
                        MegaCombinacaoDTO megaCombinacaoDTO = new MegaCombinacaoDTO();
                        if (VerificadorUtil.naoEstaNulo(primeiroFixo)) {
                                megaCombinacaoDTO.getSequencia().add(primeiroFixo);
                        }
                        if (VerificadorUtil.naoEstaNulo(segundoFixo)) {
                                megaCombinacaoDTO.getSequencia().add(segundoFixo);
                        }
                        if (VerificadorUtil.naoEstaNulo(terceiroFixo)) {
                                megaCombinacaoDTO.getSequencia().add(terceiroFixo);
                        }
                       
                        while (megaCombinacaoDTO.getSequencia().size() < 6) {
                                Random gerador = new Random();
                                Integer numeroGerado = gerador.nextInt(60);
                                if (escolhidos.contains(numeroGerado)) {
                                        megaCombinacaoDTO.adicionarNumero(numeroGerado);
                                }
                        }
                       
                        mega.adicionarCombinacao(megaCombinacaoDTO);
                        indicador++;
                        if (indicador > 20000) {
                                System.out.println(indicador);
                                criar = false;
                        }
                }
               
                System.out.println("COMBINAÇÕES");
                for (MegaCombinacaoDTO combinacao : mega.getCombinacoes()) {
                        System.out.println(combinacao.getSequencia());
                }
        }
       
}