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
}
}