双色球(过滤历史数据+过滤连号+红球包含+篮球包含+大小分布)

1.彩票官网复制历史数据,存入文件

将数据复制出来,用excel处理,存入文件

彩票数据存入文件在这里插入图片描述

2.基本处理逻辑

1.红球组合
2.排除红球连号(自定义3、4、5、6个连续)
3.红蓝组合(自定义蓝球出现的可能,比如我想蓝号只出1或者12…)
4.解析历史数据,排除这些数据
5.定义大小分布,以一个数为中间数,大于他包含几个,小于他的包含几个,再次过滤不满足此条件的数据
6.定义一个包含的过滤,数据中,红球包含某些数字,否则过滤
7.将结果输出到文件中

package com.pgf.doblecolorball;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.math.MathUtil;

/*
作者:pgf
时间:2019年12月19日
描述:TODO
*/
public class SixAndOne {
	/*往期数据文件*/
	private static final String HISTORY_PATH = "D:\\winBall.txt";
	private static final int BALL_LENGTH = 7;
	private static final String REG = ",";
	/*高低区分数*/
	private static final int Midd = 15;
	/**红球号码**/
	private static final String[] RED_BALLS = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32"};
	
	/**预测蓝球号码**/
	//private static final String[] BLUE_BALLS1 = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16"};
	private static final String[] BLUE_BALLS = {"14"};

	/**排除包含号码**/
	private static final String[][] FILETERS2 = {
			{"1","2"},{"2","3"},{"3","4"},{"4","5"},{"5","6"},{"6","7"},{"7","8"},
			{"8","9"},{"9","10"},{"10","11"},{"11","12"},{"12","13"},{"13","14"},
			{"14","15"},{"15","16"},{"16","17"},{"17","18"},{"18","19"},{"19","20"},
			{"20","21"},{"21","22"},{"22","23"},{"23","24"},{"24","25"},{"25","26"},
			{"26","27"},{"27","28"},{"28","29"},{"29","30"},{"30","31"},{"31","32"},
			{"32","33"},{"33","34"}};
	
	private static final String[][] FILETERS3 = {{"1","2","3"},{"2","3","4"},{"3","4","5"},{"4","5","6"},{"5","6","7"},
			{"6","7","8"},{"7","8","9"},{"8","9","10"},{"9","10","11"},{"10","11","12"},
			{"11","12","13"},{"12","13","14"},{"13","14","15"},{"14","15","16"},{"15","16","17"},
			{"16","17","18"},{"17","18","19"},{"18","19","20"},{"19","20","21"},{"20","21","22"},
			{"21","22","23"},{"22","23","24"},{"23","24","25"},{"24","25","26"},{"25","26","27"},
			{"26","27","28"},{"27","28","29"},{"28","29","30"},{"29","30","31"},{"30","31","32"}};
	
	private static final String[][] FILETERS4 = {{"1","2","3","4"},{"2","3","4","5"},{"3","4","5","6"},{"4","5","6","7"},{"5","6","7","8"},
											   {"6","7","8","9"},{"7","8","9","10"},{"8","9","10","11"},{"9","10","11","12"},{"10","11","12","13"},
											   {"11","12","13","14"},{"12","13","14","15"},{"13","14","15","16"},{"14","15","16","17"},{"15","16","17","18"},
											   {"16","17","18","19"},{"17","18","19","20"},{"18","19","20","21"},{"19","20","21","22"},{"20","21","22","23"},
											   {"21","22","23","24"},{"22","23","24","25"},{"23","24","25","26"},{"24","25","26","27"},{"25","26","27","28"},
											   {"26","27","28","29"},{"27","28","29","30"},{"28","29","30","31"},{"29","30","31","32"}};
	
	private static final String[][] FILETERS5 = {{"1","2","3","4","5"},{"2","3","4","5","6"},{"3","4","5","6","7"},{"4","5","6","7","8"},
												{"5","6","7","8","9"},{"6","7","8","9","10"},{"7","8","9","10","11"},{"8","9","10","11","12"},
												{"9","10","11","12","13"},{"10","11","12","13","14"},{"11","12","13","14","15"},{"12","13","14","15","16"},
												{"13","14","15","16","17"},{"14","15","16","17","18"},{"15","16","17","18","19"},{"16","17","18","19","20"},
												{"17","18","19","20","21"},{"18","19","20","21","22"},{"19","20","21","22","23"},{"20","21","22","23","24"},
												{"21","22","23","24","25"},{"22","23","24","25","26"},{"23","24","25","26","27"},{"24","25","26","27","28"},
												{"25","26","27","28","29"},{"26","27","28","29","30"},{"27","28","29","30","31"},{"28","29","30","31","32"}};
	
	private static final String[][] FILETERS6 = {{"1","2","3","4","5","6"},{"2","3","4","5","6","7"},{"3","4","5","6","7","8"},{"4","5","6","7","8","9"},
										{"5","6","7","8","9","10"},{"6","7","8","9","10","11"},{"7","8","9","10","11","12"},{"8","9","10","11","12","13"},
							{"9","10","11","12","13","14"},{"10","11","12","13","14","15"},{"11","12","13","14","15","16"},{"12","13","14","15","16","17"},
							{"13","14","15","16","17","18"},{"14","15","16","17","18","19"},{"15","16","17","18","19","20"},{"16","17","18","19","20","21"},
							{"17","18","19","20","21","22"},{"18","19","20","21","22","23"},{"19","20","21","22","23","24"},{"20","21","22","23","24","25"},
							{"21","22","23","24","25","26"},{"22","23","24","25","26","27"},{"23","24","25","26","27","28"},{"24","25","26","27","28","29"},
							{"25","26","27","28","29","30"},{"26","27","28","29","30","31"},{"27","28","29","30","31","32"}};
	
	
	/*红球包含*/
	private static final String[] FILETER5 = {"10","12"};	
	
	
	/*高低分布,模拟大于Midd的M,小于等于Midd的N,M+N=6*/
	private static final int[] HIGH_LOW = {2,4};
	
	
	public static void main(String[] args) throws Exception{
		long tStart = System.currentTimeMillis()/1000;
		/*创建线程解析文件*/
		ReadWinBall readWinBall = new ReadWinBall();
		FutureTask<String> task = new FutureTask<>(readWinBall);
		new Thread(task).start();
		/*红球组合*/
		List<String[]> redCombined = combinedMbaseFromTotalArr(RED_BALLS, 6);
		List<String[]> blueCombined = combinedMbaseFromTotalArr(BLUE_BALLS, 1);
		/*红球过滤连号后*/
		List<String[]>redClean = new ArrayList<>();
		List<String[]>redAndBlueClean = new ArrayList<>();
		
		/*happyDatas*/
		List<String[]>happyDatas = new ArrayList<>();
		List<String>finalWinDatas = new ArrayList<>();
		
		/*过滤结果*/
		//1.红球排除filters连号 
		System.out.println("---------------红球过滤开始--------------");
		long start = System.currentTimeMillis()/1000;
		for (String[] item : redCombined) {
			if(dataFileter(item, FILETERS2,FILETERS3,FILETERS4,FILETERS5,FILETERS6)){
				redClean.add(item);
//				if(containEle(item, new String[]{"1","2","4","5"})){
//					System.out.println(Arrays.toString(item));
//				}
			}
		}
		long end = System.currentTimeMillis()/1000;
		System.out.println("---------------红球过滤结束--------------耗时(秒):"+(end-start)+"  ==组合记录总数:"+redClean.size());
		
		System.out.println("---------------红蓝组合开始--------------");
		long start1 = System.currentTimeMillis();
		for(int i=0;i<redClean.size();i++){
			for (int j=0; j<blueCombined.size();j++) {
				/*合并红蓝*/
				String[] item = twoArrsMerge(redClean.get(i), blueCombined.get(j));
				
				redAndBlueClean.add(item);			
			}
		}
		long end1 = System.currentTimeMillis();
		System.out.println("---------------红蓝组合结束--------------耗时(豪秒):"+(end1-start1));

		
		task.get();
		//System.out.println(get);
		List<String[]> winDatas = readWinBall.list;
		//BufferedWriter wr = new BufferedWriter(w);
		System.out.println("---------------过滤历史出球开始--------------");
		long start2 = System.currentTimeMillis();
		for (String[] item : redAndBlueClean) {
			if(winEle(winDatas, item)){
				if(FILETER5.length > 0){
					if(containEle(item, FILETER5)){						
						//happyDatas.add(Arrays.toString(item));
						happyDatas.add(item);
					}else{
						//happyDatas.add(Arrays.toString(item));
						happyDatas.add(item);
					}
				}
				
				
			}
		}
		long end2 = System.currentTimeMillis();
		System.out.println("---------------过滤历史出球结束--------------耗时(毫秒:)"+(end2-start2));
		System.out.println("---------------高低分配开始--------------");
		long start3 = System.currentTimeMillis();
		for (String[] item : happyDatas) {
			//String[] data = item.split("REG");
			if(highLowRegion(HIGH_LOW[0], HIGH_LOW[1], item)){
				finalWinDatas.add(Arrays.toString(item));
			}
			
		}
		long end3 = System.currentTimeMillis();
		System.out.println("---------------高低分配结束--------------耗时(豪秒)"+(end3-start3));
		
		System.out.println("---------------写入文件开始--------------");
		FileUtil.writeLines(finalWinDatas, new File("D:\\money.txt"), "utf-8");
		System.out.println("---------------写入文件结束--------------");
		System.out.println("总记录:"+finalWinDatas.size());
		long tEnd= System.currentTimeMillis()/1000;
		System.out.println("总耗时(秒):"+(tEnd-tStart));
	}
	

	/**
	 * 过滤数据高低分布
	 *时间: 2019年12月20日
	 *描述: 红球的数字高低个数分配
	 * @param high
	 * @param low
	 * @param arr
	 * @return
	 */
	public static boolean highLowRegion(int high,int low,String[] arr){
		if(high+low != (BALL_LENGTH-1)){
			throw new RuntimeException("高低分配之和必须等于6");
		}

		int highN = 0;
		for (int i=0; i<BALL_LENGTH-1;i++) {
			int intValue = Integer.valueOf(arr[i].trim()).intValue();
			if(intValue>Midd){
				highN++;
			}
		}
		if(highN != high)return false;
		return true;
	}
	
	
	/**
	 * 
	 *时间: 2019年12月19日
	 *描述: 过滤数据
	 * @param a 抽取数组
	 * @param fileters 过滤器
	 * @return true可用数据,false已被过滤
	 */
	public static boolean dataFileter(String [] a,String[][] ... fileters){
		//重复集合,如果a集合 加上fileter的集合 大小=长度相加 size = a 那么包含fileter
		for (String[][] item : fileters) {
			Set<String> bSetOld = new HashSet(Arrays.asList(a));  // b 集合
			int bSize = bSetOld.size();
			for(int i=0;i<item.length;i++){//二维数组
				//System.out.println(Arrays.toString(item[i]));
				Set<String> bSetNew = new HashSet(Arrays.asList(a));
				bSetNew.addAll(Arrays.asList(item[i]));
				/*如果包含filters数据,直接返回false*/
				if(bSize == bSetNew.size()){
					//System.out.println("=====过滤数据======"+Arrays.asList(item[i]));
					return false;
				}
			}	
		}
		return true;
	}
	


	
	/**
	 * 字符数组转为int数组
	 *时间: 2019年12月19日
	 *描述: TODO
	 * @param arrs
	 * @return
	 */
	public static int[] StringToInt(Object[] arrs){
		int[] ints = new int[arrs.length];
		for(int i=0;i<arrs.length;i++){
			ints [i] = Integer.parseInt((String)arrs[i]);
		}
		return ints;
		
	}
	
	
	/**
	 * 
	 *时间: 2019年12月19日
	 *描述: 组合m选n
	 * @param datas 基础数据组合
	 * @param m 选择个
	 * @return
	 */
	public static List<String[]> combinedMbaseFromTotalArr(String[] datas, int m){
		return MathUtil.combinationSelect(datas, m);
	}
	
	/**
	 * 两个数组合并
	 *时间: 2019年12月19日
	 *描述: TODO
	 * @param a
	 * @param b
	 * @return
	 */
	public static String[] twoArrsMerge(String[] a,String[] b){
		String[] res = new String[BALL_LENGTH];
		List<String>list = new ArrayList(Arrays.asList(a));
        list.addAll(Arrays.asList(b));
        for(int i=0;i<list.size();i++){        	
        	res[i] = list.get(i);
        }
        return res;
	}
	
	/**
	 * 包含的数字
	 *时间: 2019年12月20日
	 *描述: TODO
	 * @param arr
	 * @param ele
	 * @return
	 */
	public static boolean containEle(String[] arr,String[] ele){
		Set<String> bSetOld = new HashSet(Arrays.asList(arr));  // b 集合
		int bSize = bSetOld.size();
		bSetOld.addAll(Arrays.asList(ele));
		/*如果包含filters数据,直接返回false*/
		if(bSize == bSetOld.size()){			
			return true;
		}else{
			return false;
		}
	}
	

	/**
	 * 解析历史数据文件
	 * @author Administrator
	 *
	 */
	private static class ReadWinBall implements Callable<String>{
		private List<String[]>list = new ArrayList<>();
		@Override
		public String call() throws Exception {
			System.out.println("---------------解析往期出球文件开始--------------");
			long start = System.currentTimeMillis();
			File file = new File(HISTORY_PATH);
			BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "utf-8"));
			String data = null;
			while((data=br.readLine()) != null){
				String[] datas = data.split(",");
				for(int i=0;i<datas.length;i++){
					datas[i] = datas[i].trim();
				}
				list.add(datas);
			}
			long end = System.currentTimeMillis();
			System.out.println("---------------解析往期出球文件结束--------------耗时(毫秒)"+(end-start));
			return "1";
		}
		
	}
	
	/**
	 * 过滤往期数据
	 *时间: 2019年12月19日
	 *描述: TODO
	 * @param res
	 * @param ele
	 * @return
	 */
	public static boolean winEle(List<String[]>res,String[] ele){
		//Arrays.sort(ele);
		for (String[] item : res) {
			//Arrays.sort(item);
			if(Arrays.equals(item, ele)){
				return false;
			} 
		}
		return true;
	}
	
	
}

在这里插入图片描述

最新一期的数据

发布了10 篇原创文章 · 获赞 0 · 访问量 216

猜你喜欢

转载自blog.csdn.net/u011042377/article/details/103631547
今日推荐