import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ZhiXuan {
public static void main(String[] args) {
String bBit = "1,4,5,7,9";
bBit = bBit.replace(" ", "");
String[] bar = bBit.split(",");
List<String> bCode = Arrays.asList(bar);
String sBit = "4,5,7,9,3,8,2";
sBit = sBit.replace(" ", "");
String[] sar = sBit.split(",");
List<String> sCode = Arrays.asList(sar);
String gBit = "4,5,7,9,3";
gBit = gBit.replace(" ", "");
String[] gar = gBit.split(",");
List<String> gCode = Arrays.asList(gar);
List<String> combine = getCombine(bCode, sCode, gCode);
//跨度
Integer[] k = {0,1,2,3,4,5,6,7,8,9};
List<Integer> kua = Arrays.asList(k);
//和值
Integer[] h = {5,25,7,17,27,10,20,3, 13, 23,2,12,22,6};
List<Integer> he = Arrays.asList(h);
//胆码
Integer[] d = {3,0,1,2};
List<Integer> dan = Arrays.asList(d);
//保留二码
String st = "00,11,22,33,44,55,66,77, 88, 99,01, 12, 23, 34, 45, 56, 67, 78, 89,02, 13, 24, 35, 46, 57, 68, 79,03, 14, 25, 36, 47, 58, 69,04, 15, 26, 37, 48, 59,05, 16, 27, 38, 49,06, 17, 28, 39,07, 18, 29,08, 19,09";
st = st.replace(" ", "");
String[] t = st.split(",");
List<String> towCode = Arrays.asList(t);
List<String> kTowCode = getDTowCode(towCode, dan);
System.out.println("kTowCode: " + kTowCode.toString());
//排除二码
String st1 = "00,99,11,88,66";
String[] t1 = st1.split(",");
List<String> rTowCode = Arrays.asList(t1);
//断组
String[][] duan = {{"049", "523", "678"}};
List<String[]> duanzu = Arrays.asList(duan);
//List<String[]> duanzu = new ArrayList<>();
//任意两码差
Integer[] cha1 = {1, 2, 5, 8,9};
List<Integer> cha = Arrays.asList(cha1);
//十个差
Integer[] chas = {0, 1, 3};
List<Integer> cha2 = Arrays.asList(chas);
//杀号
Integer[] kills = {4,5,7,9};
List<Integer> kill = Arrays.asList(kills);
//区间1:[000,249],2:[250,499],3:[500,749],4:[750,999]
Integer q = null;
//组三 标志:0:所有值,3:组三,6:组六
Integer cha3 = 0;
/**
* @param combine 组六
* @param kua 跨度
* @param he 和值
* @param dan 胆码
* @param kTowCode 保留两码
* @param rTowCode 移除两码
* @param duanzu 断组
* @param cha 任意两码差
* @param cha2 十个差
* @param q 区间
* @param kill 杀码
* @param cha3 组三,组六,全部
* @return
*/
List<String> data = calculation(combine, kua, he, dan, kTowCode, rTowCode, null, cha, null, q, kill, cha3);
System.out.println("data:[" + data.size() + "] " + data.toString().replace("[", "").replace("]", "").replace(" ", ""));
List<String> threeData = getFlagData(data, 3);
if (threeData != null && threeData.size() > 0) {
System.out.println("组三:共" + threeData.size() + "注,投资:" + threeData.size() * 2 + " 元");
for (int i = 0; i < threeData.size(); i++) {
String code = threeData.get(i);
Integer a = getHe(code);
Integer b = getKua(code);
String tcha = getTCha(code);
String lu = getLu(code);
System.out.println(code + ": " + ", 和: " + a + ", 均值: " + getMean(a) + ", 跨:" + b + ", 码差:" + tcha + ", 路数:" + lu);
}
}
System.out.println("————————————————————");
List<String> sixData = getFlagData(data, 6);
if (sixData != null && sixData.size() > 0) {
System.out.println("组六:共" + sixData.size() + "注,投资:" + sixData.size() * 2 + " 元");
for (int i = 0; i < sixData.size(); i++) {
String code = sixData.get(i);
Integer a = getHe(code);
Integer b = getKua(code);
String tcha = getTCha(code);
String lu = getLu(code);
System.out.println(code + ": " + ", 和: " + a + ", 均值: " + getMean(a) + ", 跨:" + b + ", 码差:" + tcha + ", 路数:" + lu);
}
}
}
/**
* @param combine 组六
* @param kua 跨度
* @param he 和值
* @param dan 胆码
* @param kTowCode 保留两码
* @param rTowCode 移除两码
* @param duanzu 断组
* @param cha 任意两码差
* @param cha2 十个差
* @param q 区间
* @param kill 杀码
* @param cha3 组三,组六,全部
* @return
*/
public static List<String> calculation(
List<String> combine,
List<Integer> kua,
List<Integer> he,
List<Integer> dan,
List<String> kTowCode,
List<String> rTowCode,
List<String[]> duanzu,
List<Integer> cha,
List<Integer> cha2,
Integer q,
List<Integer> kill,
Integer cha3) {
List<String> data = null;
if (combine != null) {
data = combine;
}
if (kTowCode != null) {
data = keepT(data, kTowCode, rTowCode);
}
if (cha != null) {
data = getCT(data, cha);
}
if (dan != null) {
data = getD(data, dan);
}
if (he != null) {
data = getHe(data, he);
}
if (kua != null) {
data = getKua(data, kua);
}
if (duanzu != null) {
for (int i = 0; i < duanzu.size(); i++) {
String[] d = duanzu.get(i);
data = duanZu(data, d);
}
}
if (q != null) {
data = getInterval(data, q);
}
if (kill != null) {
data = killCT(data, kill);
}
if (cha3 != null) {
data = getFlagData(data, cha3);
}
if (cha2 != null) {
data = getCTSH(data, cha2);
}
data = removeDuplicate(data);
return data;
}
/**
* 获取均值
*
* @param num
* @return
*/
public static Long getMean(Integer num) {
Long mean = null;
try {
double a = (double) num;
mean = Math.round(a / 3);
} catch (Exception es) {
es.printStackTrace();
}
return mean;
}
/**
* 获取路数
*
* @param num
* @return
*/
public static String getLu(String num) {
StringBuilder str = new StringBuilder();
try {
String a = num.substring(0, 1);
String b = num.substring(1, num.length() - 1);
String c = num.substring(num.length() - 1, num.length());
List<String> nums = new ArrayList<>();
nums.add(a);
nums.add(b);
nums.add(c);
String zero = "0369";
String one = "147";
String tow = "258";
for (int i = 0; i < nums.size(); i++) {
if (zero.contains(nums.get(i))) {
str.append("0");
}
if (one.contains(nums.get(i))) {
str.append("1");
}
if (tow.contains(nums.get(i))) {
str.append("2");
}
}
} catch (Exception es) {
es.printStackTrace();
}
return str.toString() + "路";
}
/**
* 获取任意两码差
*
* @param num
* @return
*/
public static String getTCha(String num) {
String cha = null;
try {
int a = Integer.parseInt(num.substring(0, 1));
int b = Integer.parseInt(num.substring(1, num.length() - 1));
int c = Integer.parseInt(num.substring(num.length() - 1, num.length()));
String cha1 = Math.abs(a - b) + "";
String cha2 = Math.abs(a - c) + "";
String cha3 = Math.abs(b - c) + "";
cha = cha1 + cha2 + cha3;
} catch (Exception es) {
es.printStackTrace();
}
return cha;
}
/**
* 获取和值
*
* @param num
* @return
*/
public static Integer getHe(String num) {
Integer sum = null;
try {
int a = Integer.parseInt(num.substring(0, 1));
int b = Integer.parseInt(num.substring(1, num.length() - 1));
int c = Integer.parseInt(num.substring(num.length() - 1, num.length()));
sum = a + b + c;
} catch (Exception es) {
es.printStackTrace();
}
return sum;
}
/**
* 获取跨
*
* @param num
* @return
*/
public static Integer getKua(String num) {
Integer k = null;
try {
int a = Integer.parseInt(num.substring(0, 1));
int b = Integer.parseInt(num.substring(1, num.length() - 1));
int c = Integer.parseInt(num.substring(num.length() - 1, num.length()));
String strs = getSort(a, b, c);
int min = Integer.parseInt(strs.substring(0, 1));
int max = Integer.parseInt(strs.substring(strs.length() - 1, strs.length()));
k = max - min;
} catch (Exception es) {
es.printStackTrace();
}
return k;
}
/**
* list去重
*
* @param list
* @return
*/
public static List removeDuplicate(List list) {
List listTemp = new ArrayList();
for (int i = 0; i < list.size(); i++) {
if (!listTemp.contains(list.get(i))) {
listTemp.add(list.get(i));
}
}
return listTemp;
}
public static List<String> getCombine(List<String> bCode, List<String> sCode, List<String> gCode) {
List<String> result = new ArrayList<>();
for (int i = 0; i < 10; i++) {
if (bCode.contains(i + "")) {
continue;
}
for (int j = 0; j < 10; j++) {
if (sCode.contains(j + "")) {
continue;
}
for (int k = 0; k < 10; k++) {
if (gCode.contains(k + "")) {
continue;
} else {
result.add(i + "" + j + "" + k);
}
}
}
}
return result;
}
public static List<String> getInterval(List<String> list, Integer flag) {
Integer[] interval = new Integer[2];
if (flag == 1) {
interval[0] = 0;
interval[1] = 249;
}
if (flag == 2) {
interval[0] = 250;
interval[1] = 499;
}
if (flag == 3) {
interval[0] = 500;
interval[1] = 749;
}
if (flag == 4) {
interval[0] = 750;
interval[1] = 999;
}
List<String> r = new ArrayList<>();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
int num = Integer.parseInt(str);
if (num >= interval[0] && num <= interval[1]) {
r.add(list.get(i));
}
}
}
return r;
}
/**
* 判断组三,组六
*
* @param list
* @param cha
* @return
*/
public static List<String> getFlagData(List<String> list, Integer cha) {
List<String> r = new ArrayList<>();
if (cha == 0) {
return list;
} else {
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
int a = Integer.parseInt(str.substring(0, 1));
int b = Integer.parseInt(str.substring(1, str.length() - 1));
int c = Integer.parseInt(str.substring(str.length() - 1, str.length()));
Integer cha1 = Math.abs(a - b);
Integer cha2 = Math.abs(a - c);
Integer cha3 = Math.abs(b - c);
//组三
if (cha == 3) {
if (cha1 == 0 || cha2 == 0 || cha3 == 0) {
r.add(list.get(i));
}
}
//组六
if (cha == 6) {
if (cha1 != 0 && cha2 != 0 && cha3 != 0) {
r.add(list.get(i));
}
}
}
}
}
return r;
}
/**
* 根据胆码找两码
*
* @param list
* @param dan
* @return
*/
public static List<String> getDTowCode(List<String> list, List<Integer> dan) {
List<String> r = new ArrayList<>();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
int a = Integer.parseInt(str.substring(0, 1));
int b = Integer.parseInt(str.substring(str.length() - 1, str.length()));
boolean flag = false;
if (dan.contains(a)) {
flag = true;
}
if (dan.contains(b)) {
flag = true;
}
if (flag) {
r.add(list.get(i));
}
}
}
return r;
}
/**
* 任意两码差
*
* @param list
* @param cha
* @return
*/
public static List<String> getCT(List<String> list, List<Integer> cha) {
List<String> r = new ArrayList<>();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
int a = Integer.parseInt(str.substring(0, 1));
int b = Integer.parseInt(str.substring(1, str.length() - 1));
int c = Integer.parseInt(str.substring(str.length() - 1, str.length()));
Integer cha1 = Math.abs(a - b);
Integer cha2 = Math.abs(a - c);
Integer cha3 = Math.abs(b - c);
boolean flag = false;
if (cha.contains(cha1)) {
flag = true;
}
if (cha.contains(cha2)) {
flag = true;
}
if (cha.contains(cha3)) {
flag = true;
}
if (flag) {
r.add(list.get(i));
}
}
}
return r;
}
/**
* 十个差
*
* @param list
* @param cha
* @return
*/
public static List<String> getCTSH(List<String> list, List<Integer> cha) {
List<String> r = new ArrayList<>();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
int a = Integer.parseInt(str.substring(0, 1));
int b = Integer.parseInt(str.substring(1, str.length() - 1));
int c = Integer.parseInt(str.substring(str.length() - 1, str.length()));
Integer cha1 = Math.abs(a - b);
Integer cha2 = Math.abs(a - c);
Integer cha3 = Math.abs(b - c);
if (cha.contains(cha1)) {
r.add(c + "" + a + "" + b);
}
if (cha.contains(cha2)) {
r.add(b + "" + a + "" + c);
}
if (cha.contains(cha3)) {
r.add(a + "" + b + "" + c);
}
}
}
return r;
}
/**
* 杀号
*
* @param list
* @param k
* @return
*/
public static List<String> killCT(List<String> list, List<Integer> k) {
List<String> r = new ArrayList<>();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
int a = Integer.parseInt(str.substring(0, 1));
int b = Integer.parseInt(str.substring(1, str.length() - 1));
int c = Integer.parseInt(str.substring(str.length() - 1, str.length()));
boolean flag = false;
if (k.contains(a)) {
flag = true;
}
if (k.contains(b)) {
flag = true;
}
if (k.contains(c)) {
flag = true;
}
if (!flag) {
r.add(list.get(i));
}
}
}
return r;
}
/**
* 跨度
*
* @param list
* @param k
* @return
*/
public static List<String> getKua(List<String> list, List<Integer> k) {
List<String> r = new ArrayList<>();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
int a = Integer.parseInt(str.substring(0, 1));
int b = Integer.parseInt(str.substring(1, str.length() - 1));
int c = Integer.parseInt(str.substring(str.length() - 1, str.length()));
String strs = getSort(a, b, c);
int min = Integer.parseInt(strs.substring(0, 1));
int max = Integer.parseInt(strs.substring(strs.length() - 1, strs.length()));
int tk1 = max - min;
if (k.contains(tk1)) {
r.add(list.get(i));
}
}
}
return r;
}
/**
* 和
*
* @param list
* @param h
* @return
*/
public static List<String> getHe(List<String> list, List<Integer> h) {
List<String> r = new ArrayList<>();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
int a = Integer.parseInt(str.substring(0, 1));
int b = Integer.parseInt(str.substring(1, str.length() - 1));
int c = Integer.parseInt(str.substring(str.length() - 1, str.length()));
int sum = a + b + c;
if (h.contains(sum)) {
r.add(list.get(i));
}
}
}
return r;
}
/**
* 胆码
*
* @param list
* @param d
* @return
*/
public static List<String> getD(List<String> list, List<Integer> d) {
List<String> r = new ArrayList<>();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
for (int j = 0; j <= str.length() - 1; j++) {
//因为i的最大数是str长度-1,这里要+1;
Integer s = Integer.parseInt(str.substring(j, j + 1));
if (d.contains(s)) {
r.add(list.get(i));
}
}
}
}
return r;
}
/**
* 保留两码,排除两码
*
* @param list
* @param k
* @param rm
* @return
*/
public static List<String> keepT(List<String> list, List<String> k, List<String> rm) {
List<String> r = new ArrayList<>();
List<String> r2 = new ArrayList<>();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
int a = Integer.parseInt(str.substring(0, 1));
int b = Integer.parseInt(str.substring(1, str.length() - 1));
int c = Integer.parseInt(str.substring(str.length() - 1, str.length()));
String ab = getSort(a, b);
String ac = getSort(a, c);
String bc = getSort(c, b);
List<String> tt = new ArrayList<>();
tt.add(ab);
tt.add(ac);
tt.add(bc);
boolean flag = false;
for (int j = 0; j < tt.size(); j++) {
if (k.contains(tt.get(j))) {
flag = true;
break;
}
}
if (flag) {
r.add(list.get(i));
}
}
}
if (r != null && r.size() > 0) {
for (int i = 0; i < r.size(); i++) {
String str = r.get(i);
int a = Integer.parseInt(str.substring(0, 1));
int b = Integer.parseInt(str.substring(1, str.length() - 1));
int c = Integer.parseInt(str.substring(str.length() - 1, str.length()));
String ab = getSort(a, b);
String ac = getSort(a, c);
String bc = getSort(c, b);
List<String> tt = new ArrayList<>();
tt.add(ab);
tt.add(ac);
tt.add(bc);
boolean flag = true;
for (int j = 0; j < tt.size(); j++) {
if (rm.contains(tt.get(j))) {
flag = false;
break;
}
}
if (flag) {
r2.add(r.get(i));
}
}
}
return r2;
}
/**
* 断组
*
* @param list
* @param atr
* @return
*/
public static List<String> duanZu(List<String> list, String[] atr) {
List<String> r = new ArrayList<>();
if (atr.length > 2) {
String a1 = atr[0];
String a2 = atr[1];
String a3 = atr[2];
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
String a = str.substring(0, 1);
String b = str.substring(1, str.length() - 1);
String c = str.substring(str.length() - 1, str.length());
boolean flag1 = false;
boolean flag2 = false;
boolean flag3 = false;
if (a1.contains(a)) {
flag1 = true;
}
if (a1.contains(b)) {
flag1 = true;
}
if (a1.contains(c)) {
flag1 = true;
}
if (a2.contains(a)) {
flag2 = true;
}
if (a2.contains(b)) {
flag2 = true;
}
if (a2.contains(c)) {
flag2 = true;
}
if (a3.contains(a)) {
flag3 = true;
}
if (a3.contains(b)) {
flag3 = true;
}
if (a3.contains(c)) {
flag3 = true;
}
if (flag1 && flag2) {
if (!r.contains(list.get(i))) {
r.add(list.get(i));
}
}
if (flag1 && flag3) {
if (!r.contains(list.get(i))) {
r.add(list.get(i));
}
}
if (flag2 && flag3) {
if (!r.contains(list.get(i))) {
r.add(list.get(i));
}
}
}
}
} else {
String a1 = atr[0];
String a2 = atr[1];
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
String a = str.substring(0, 1);
String b = str.substring(1, str.length() - 1);
String c = str.substring(str.length() - 1, str.length());
boolean flag1 = false;
boolean flag2 = false;
if (a1.contains(a)) {
flag1 = true;
}
if (a1.contains(b)) {
flag1 = true;
}
if (a1.contains(c)) {
flag1 = true;
}
if (a2.contains(a)) {
flag2 = true;
}
if (a2.contains(b)) {
flag2 = true;
}
if (a2.contains(c)) {
flag2 = true;
}
if (flag1 && flag2) {
if (!r.contains(list.get(i))) {
r.add(list.get(i));
}
}
}
}
}
return r;
}
/**
* 三个数从小到大排序
*
* @param a
* @param b
* @param c
* @return
*/
public static String getSort(int a, int b, int c) {
StringBuffer str = new StringBuffer();
if (a > b) {
if (c > a) {
str.append(b).append(a).append(c);
} else if (c < b) {
str.append(c).append(b).append(a);
} else {
str.append(b).append(c).append(a);
}
// a<<b时
} else {
if (c < a) {
str.append(c).append(a).append(b);
} else if (c > b) {
str.append(a).append(b).append(c);
} else {
str.append(a).append(c).append(b);
}
}
return str.toString();
}
/**
* 2个数从小到大排序
*
* @param a
* @param b
* @return
*/
public static String getSort(int a, int b) {
StringBuffer str = new StringBuffer();
if (a > b) {
str.append(b).append(a);
} else {
str.append(a).append(b);
}
return str.toString();
}
}