package com.jiayue.ssi.service;

import cn.hutool.core.convert.Convert;

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.*;
import java.util.stream.Collectors;

/**
 * TODO
 *
 * @author xsl
 * @version 3.0
 */
public class Test1 {
    public static void main(String[] args) throws Exception{
        Test1 test1 = new Test1();
        List<String> qjList = new ArrayList<>();
        qjList.add("3:2:1");
        qjList.add("1:2:3");
        qjList.add("2:1:3");
        qjList.add("3:1:2");

        List<String> joList = new ArrayList<>();
        joList.add("2:4");
        joList.add("4:2");

        Integer[] r1 = {
        1
//        2,
//        4,
//        3,
//        6,
//        5,
//        7,
//        8,
//        9,
//        10,
//        12,
//        11,
//        14,
//        13,
//        16,
//        18,
//        19
        };

        Integer[] r2 = {
        10,
//        4,
//        8,
//        12,
//        16,
//        7,
//        3,
//        5,
//        9,
//        13,
//        15,
//        20,
//        6,
        14,
//        2,
//        11,
//        18,
//        17
//        26
        };

        Integer[] r3 = {
//        11,
//        12,
//        13,
//        17,
//        15,
//        8,
//        10,
//        14,
//        18,
//        19,
//        5,
//        9,
//        21,
//        20,
//        22,
//        4,
//        6,
//        7,
        16
//        23
        };

        Integer[] r4 = {
        20,
//        15,
//        18,
//        23,
//        14,
//        22,
//        17,
//        13,
//        19,
//        25,
//        21,
//        16,
//        24,
//        27,
//        28,
//        10,
//        9,
//        26,
//        12,
//        11,
//        29,
//        7,
//        30,
//        31
        };

        Integer[] r5 = {

        25
//        27,
//        30,
//        22,
//        24,
//        26,
//        29,
//        21,
//        28,
//        32,
//        31
//        20,
//        18,
//        19,
//        23,
//        16,
//        17,
//        15,
//        7,
//        10,
//        12,
//        11,
//        14
        };


        Integer[] r6 = {
        32
//        30,
//        33
//        31
//        29,
//        27,
//        26,
//        25,
//        28,
//        22,
//        24,
//        21,
//        20,
//        23,
//        16,
//        19,
//        15,
//        17
        };


        List<Integer> r1List = Arrays.asList(r1);
        List<Integer> r2List = Arrays.asList(r2);
        List<Integer> r3List = Arrays.asList(r3);
        List<Integer> r4List = Arrays.asList(r4);
        List<Integer> r5List = Arrays.asList(r5);
        List<Integer> r6List = Arrays.asList(r6);

        Collections.sort(r1List);
        Collections.sort(r2List);
        Collections.sort(r3List);
        Collections.sort(r4List);
        Collections.sort(r5List);
        Collections.sort(r6List);

        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("d:\\test\\codeList.txt"), "UTF-8");
        for (Integer r1v:r1List){
            for (Integer r2v:r2List){
                if (r1v.intValue()>=r2v.intValue()){
                    continue;
                }
                for (Integer r3v:r3List){
                    if (r2v.intValue()>=r3v.intValue()){
                        continue;
                    }
                    for (Integer r4v:r4List){
                        if (r3v.intValue()>=r4v.intValue()){
                            continue;
                        }
                        for (Integer r5v:r5List){
                            if (r4v.intValue()>=r5v.intValue()){
                                continue;
                            }
                            for (Integer r6v:r6List){
                                if (r5v.intValue()>=r6v.intValue()){
                                    continue;
                                }
                                List<Integer> finalList = new ArrayList();
                                finalList.add(r1v);
                                finalList.add(r2v);
                                finalList.add(r3v);
                                finalList.add(r4v);
                                finalList.add(r5v);
                                finalList.add(r6v);
                                String joStr = test1.pfScaleCal(finalList);
                                String qjStr = test1.intervalScaleCal(finalList);

//                                List<String> resultList = qjList.stream().filter(x->x.contains(qjStr)).collect(Collectors.toList());
//                                if (resultList.size()>0){
                                    // 有区间，判别奇偶
                                    List<String> joResult = joList.stream().filter(x->x.contains(joStr)).collect(Collectors.toList());
                                    if (joResult.size()>0){
                                        osw.write("找到匹配==>奇偶--区间："+joStr+"--"+qjStr+" "+Convert.toStr(finalList)+"\r\n");
                                    }
//                                }
                            }
                        }
                    }
                }
            }
        }
        osw.close();
    }

    public String pfScaleCal(List<Integer> redList){
        int pVal = 0;
        int fVal = 0;
        for (Integer red:redList) {
            if (red.intValue()%2==0){
                // 偶数
                fVal++;
            }
            else{
                pVal++;
            }
        }
        return pVal+":"+fVal;
    }

    /**
     * 区间比
     * @param redList
     * @return
     */
    public String intervalScaleCal(List<Integer> redList){
        int q1 = 0;
        int q2 = 0;
        int q3 = 0;
        for (Integer red:redList) {
            int redInt = red.intValue();
            if (redInt>=1 && redInt<=11){
                q1++;
            }
            else if (redInt>=12 && redInt<=22){
                q2++;
            }
            else if (redInt>=23 && redInt<=33){
                q3++;
            }
        }
        return q1+":"+q2+":"+q3;
    }
}
