using Common; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Common { public static class CzDataHelper { #region 值的计算 public static bool IsCf(string code) { var list = code.Split('+')[0].Split(',').ToList(); if (list.GroupBy(i => i).Where(g => g.Count() > 1).Count() >= 1) return true; return false; } #region 和值相关 /// /// 得到和值 /// /// /// public static int GetHz(string code) { var list = code.Split('+')[0].Split(',').ToList(); if (code.IsEmpty()) return 0; return list.Sum(p => p.TryToInt32()); } /// /// 得到和值的大小 /// /// /// public static string GetHzDxValue(int hz) { if (GetHzDx(hz) == 1) { return "大"; } return "小"; } #endregion /// /// 得到跨度 /// /// /// public static int GetKd(string code) { var list = code.Split('+')[0].Split(',').ToList().OrderByDescending(p => p); if (code.IsEmpty()) return 0; return list.FirstOrDefault().TryToInt32() - list.LastOrDefault().TryToInt32(); } /// /// AC值计算 /// /// /// public static int GetAc(string code) { var list = code.Split('+')[0].Split(',').ToList().OrderByDescending(p => p); List result = GetCombination(list.ToArray(), 2); ArrayList acarray = new ArrayList(); int tpac = 0; for (int i = 0; i < result.Count; i++) { string[] tp = result[i].Split(','); int tmp = Math.Abs(Convert.ToInt32(tp[0]) - Convert.ToInt32(tp[1])); if (!acarray.Contains(tmp)) { tpac++; acarray.Add(tmp); } } return tpac - (list.Count() - 1); } /// /// 根据和值返回和尾 /// /// /// public static int GetHw(int hz) { return hz % 10; } /// /// 得到大小 和尾、跨度(值) /// /// /// public static string GetDxValue(int value) { if (GetDx(value) == 1) { return "大"; } return "小"; } /// /// 得到单双(和值、合尾、跨度) /// /// /// public static string GetDsValue(int value) { if (value % 2 != 0) { return "单"; } return "双"; } /// /// 得到形态 012路(和值、合尾、跨度) /// /// /// public static string Get012Value(int value) { if (value % 3 == 0) { return "0"; } else if (value % 3 == 1) { return "1"; } return "2"; } #region 形态 /// /// 得到形态大小 /// /// /// public static string GetXtDxValue(string code) { var result = ""; code.Split(',').ToList().ForEach(p => { if (GetDx(int.Parse(p)) == 1) { result += "大"; } else { result += "小"; } }); return result; } /// /// 得到形态 单双 /// /// /// public static string GetXtDsValue(string code) { var result = ""; code.Split(',').ToList().ForEach(p => { if (int.Parse(p) % 2 != 0) { result += "单"; } else { result += "双"; } }); return result; } /// /// 得到形态 012路 /// /// /// public static string GetXt012Value(string code) { var result = ""; code.Split(',').ToList().ForEach(p => { if (int.Parse(p) % 3 == 0) { result += "0"; } else if (int.Parse(p) % 3 == 1) { result += "1"; } else { result += "2"; } }); return result; } #endregion /// /// 得到组选 /// /// /// public static string GetZx(string value) { var list = value.Split(',').ToList(); if (list.Count < 3) { list = new List(); foreach (var item in value) { list.Add(item.ToString()); } } list = list.Where(p => !string.IsNullOrEmpty(p.Trim())).Select(p => p.Trim()).ToList(); if (list.GroupBy(p => p).Count() == 1) { return "豹子"; } else if (list.GroupBy(p => p).Count() == 2) { return "组三"; } return "组六"; } /// /// 奇偶比 /// /// /// public static string GetJob(string code) { var list = code.Split('+')[0].Split(',').ToList(); var j = 0; var o = 0; list.ForEach(p => { if (int.Parse(p) % 2 == 0) { j++; } else o++; }); return $"{j}:{o}"; } /// /// 大小比 /// /// /// 双色球33 大乐透35 /// public static string GetDxb(string code, int n) { var z = n / 2; var d = 0; var x = 0; code.GetCode().ForEach(p => { if (d >= z) d++; else x++; }); return $"{d}:{x}"; } #region 组合算法 /// /// 组合算法 /// /// 组合源数据 /// 所选组合个数 /// public static List GetCombination(string[] data, int count) { Dictionary dic = new Dictionary(); List output = new List(); for (int i = 0; i < data.Length; i++) { dic.Add(data[i], i); } SelectN(dic, data, count, 1, ref output); return output; } /// /// 字典组合算法 /// /// /// /// /// /// public static void SelectN(Dictionary dd, string[] data, int count, int times, ref List output) { Dictionary dic = new Dictionary(); foreach (KeyValuePair kv in dd) { for (int i = kv.Value + 1; i < data.Length; i++) { if (times < count - 1) { dic.Add(kv.Key + "," + data[i], i); } else { output.Add(kv.Key + "," + data[i]); } } } times++; if (dic.Count > 0) { SelectN(dic, data, count, times, ref output); } } #endregion #endregion #region 是有计算 #region 大小相关方法 /// /// 3D/p3和值大小 /// /// /// private static int GetHzDx(int n) { return GetDxBymiddle(n, 14); } /// /// 返回0~9大小的状态 /// 0=小 /// 1=大 /// /// /// private static int GetDx(int n) { return GetDxBymiddle(n, 5); } /// /// 返回大小的状态,需要传中间值,小于中间值为小,大于等于中间值为大。 /// /// /// /// private static int GetDxBymiddle(int n, int middle) { int r = 1; if (n < middle) r = 0; return r; } /// /// 大小比 /// /// 数据 /// 中间数 /// private static string GetDxb(List kjh, int middle) { int d = 0; int x = 0; for (int i = 0; i < kjh.Count; i++) { if (GetDxBymiddle(kjh[i], middle) == 1) d++; else x++; } return d.ToString() + ":" + x.ToString(); } #endregion #endregion //#region 振幅 ///// ///// 百十个分布 ///// ///// ///// ///// ///// //public static Dictionary> Getgsbfb(List jsList, List dbList, int max) //{ // var dict = new Dictionary>(); // var fbbArray = new int[max]; // foreach (var item in jsList) // { // var numberList = item.Number.Split('+')[0].Split(',').ToList(); // var index = 0; // foreach (var n in numberList) // { // var zsfbList = new List(); // for (int i = 0; i < max; i++) // { // if (i == n.TryToInt32()) // { // zsfbList.Add( // new Zsfb // { // IsZf = false, // Number = i, // JsNumber = i // }); // } // else // { // var model = new Zsfb // { // IsZf = true, // Number = 0, // JsNumber = i // }; // if (jsList.IndexOf(item) == 0) // { // model.Number = GetRank(dbList, i, item.Seq, numberList.IndexOf(n)); // } // else // { // var prvModel = dict[index].LastOrDefault().Zsfb[i]; // if (!prvModel.IsZf) // { // model.Number++; // } // else // { // model.Number = prvModel.Number + 1; // } // } // zsfbList.Add(model); // } // } // var zsfbModel = new ZsfbDTO { Qi = item.Qi, Zsfb = zsfbList }; // if (dict.ContainsKey(index)) // { // dict[index].Add(zsfbModel); // } // else // { // dict.Add(index, new List { zsfbModel }); // } // index++; // } // } // return dict; //} ///// ///// 组选分布 ///// ///// ///// ///// ///// //public static List GetZxfb(List jsList, List dbList, int max) //{ // var list = new List(); // var fbbArray = new int[max]; // foreach (var item in jsList) // { // var zsfbList = new List(); // for (int i = 0; i < max; i++) // { // if (item.Number.Contains(i)) // { // zsfbList.Add(new Zsfb // { // IsZf = false, // Number = i, // Zx = item.Number.Where(p => p == i).Count() > 1 ? ZxEnum.组三 : ZxEnum.组六, // JsNumber = i // }); // } // else // { // var model = new Zsfb // { // IsZf = true, // Number = 0, // JsNumber = i // }; // if (jsList.IndexOf(item) == 0) // { // model.Number = GetRank(dbList, i, item.Seq, 3); // } // else // { // var prvModel = list.LastOrDefault().Zsfb[i]; // if (!prvModel.IsZf) // { // model.Number++; // } // else // { // model.Number = prvModel.Number + 1; // } // } // zsfbList.Add(model); // } // } // list.Add(new ZsfbDTO { Qi = item.Qi, Zsfb = zsfbList }); // } // return list; //} /////// /////// 百十个分布 /////// /////// /////// /////// /////// ////public static Dictionary> Getgsbfb_Yl(List jsList, List dbList, int max) ////{ //// var dict = new Dictionary>(); //// foreach (var item in jsList) //// { //// var numberList = item.Number.Split('+')[0].Split(',').ToList(); //// var index = 0; //// foreach (var n in numberList) //// { //// var zsfbList = new List(); //// for (int i = 0; i < max; i++) //// { //// if (i == n.TryToInt32()) //// { //// zsfbList.Add( //// new Zsfb //// { //// IsZf = false, //// Number = i, //// JsNumber = i //// }); //// } //// else //// { //// var model = new Zsfb //// { //// IsZf = true, //// Number = 0, //// JsNumber = i //// }; //// if (jsList.IndexOf(item) == 0) //// { //// model.Number = GetRank(dbList, i, item.Seq, numberList.IndexOf(n)); //// } //// else //// { //// var list = dict[index]; //// var prvModel = dict[index][list.Count-max]; //// if (!prvModel.IsZf) //// { //// model.Number++; //// } //// else //// { //// model.Number = prvModel.Number + 1; //// } //// } //// zsfbList.Add(model); //// } //// } //// if (dict.ContainsKey(index)) //// { //// dict[index]= dict[index].Concat((zsfbList)).ToList(); //// } //// else //// { //// dict.Add(index, zsfbList); //// } //// index++; //// } //// } //// return dict; ////} ////public static List GetZxfb_Yl(List jsList, List dbList, int max) ////{ //// //var dict //// foreach (var item in jsList) //// { //// var numberList = item.Number.Split('+')[0].Split(',').GroupBy(p => p).Select(p => p.Key.TryToInt32()).ToList(); //// for (int i = 0; i < max; i++) //// { //// if (numberList.Contains(i)) //// { //// zsfbList.Add(new Zsfb //// { //// IsZf = false, //// Number = i, //// Zx = numberList.Where(p => p == i).Count() > 1 ? ZxEnum.组三 : ZxEnum.组六, //// JsNumber = i //// }); //// } //// else //// { //// var model = new Zsfb //// { //// IsZf = true, //// Number = 0, //// JsNumber = i //// }; //// if (jsList.IndexOf(item) == 0) //// { //// model.Number = GetRank(dbList, i, item.Seq, 3); //// } //// else //// { //// var prvModel = zsfbList[zsfbList.Count-max]; //// if (!prvModel.IsZf) //// { //// model.Number++; //// } //// else //// { //// model.Number = prvModel.Number + 1; //// } //// } //// zsfbList.Add(model); //// } //// } //// } //// return zsfbList; ////} //public static int GetRank(List dbList, int value, int rank, int type) //{ // int size = dbList.Count; // var list = new List(); // for (int i = rank - 1; i > 0; i--) // { // var model = dbList.Where(p => p.Seq == i).FirstOrDefault(); // if (model == null) // continue; // if (type == 0 || type == 1 || type == 2) // { // if (model.Number[type] == value) // return rank - model.Seq; // } // if (type == 3) // { // if (model.Number[0] == value || model.Number[1] == value || model.Number[2] == value) // { // return rank - model.Seq; // } // } // } // return 0; //} //#endregion } }