using System.Collections.Generic;
static int GetOkeyCount(int[] group)
for (int i = 0; i < group.Length; i++)
public static bool RunCheck(int[] group)
if (group.Length > 13) return false;
if (group.Length < 3) return false;
int[] temp = new int[group.Length];
Array.Copy(group, temp, group.Length);
for (int i = 0; i < group.Length; i++)
int realNo = GetRealNo(group[i]);
for (int j = 1; j < temp.Length; j++)
temp[j] = realNo - i + j;
if (group[j] != 52 && GetRealNo(group[j]) != temp[j])
temp[j] = realNo - j + i;
if(GetRealNo(group[j]) != temp[j])
if(temp[temp.Length - 1] == 13 ) return false;
int _tempVal = temp[temp.Length - 1];
if(temp[0] < 0) return false;
if(temp[temp.Length - 1] == 13 || temp[temp.Length - 1] <0) return false;
if(temp[0]==52 && temp[1] == 12)return false;
for (int i = 0; i < group.Length; i++)
if (group[i] == 52) continue;
color = GetColor(group[i]);
if (GetColor(group[i]) != color)
public static bool SetCheck(int[] group)
group = group.OrderBy(x => x).ToArray();
int okeyCount = GetOkeyCount(group);
if (group.Length > 4) return false;
if (group.Length < 3) return false;
List<int> temp = group.ToList();
temp.RemoveRange(group.Length - okeyCount, okeyCount);
if (group.Length == 1 && okeyCount == 2) return true;
int realNo = GetRealNo(group[0]);
if (GetRealNo(group[i]) == realNo && group[i - 1] != group[i])
private static int GetRealNo(int num)
private static int GetColor(int num)
public static int CalculateValuesOf(int[] group)
for (int i = 0; i < group.Length; i++)
return (GetRealNo(group[i]) + 1) * group.Length;
while (group[index0] == 52)
if (group[group.Length - 1] == 52)
while (group[group.Length - 1 - index1] == 52)
int ascValue = (int)((GetRealNo(group[0 + index0] - index0) + 1 + GetRealNo(group[group.Length - 1 - index1]) + index1 + 1) * (float)group.Length / 2);
int descValue = (int)((GetRealNo(group[0 + index1] - index1) + 1 + GetRealNo(group[group.Length - 1 - index0]) + index0 + 1) * (float)group.Length / 2);
public static bool RunCheckHAXE(int[] group)
if (group.Length > 13) return false;
if (group.Length < 3) return false;
int[] temp = new int[group.Length];
Array.Copy(group, temp, group.Length);
for (int i = 0; i < group.Length; i++)
realNo = GetRealNo(group[i]);
for (int j = 0; j < temp.Length; j++)
temp[j] = realNo - i + j;
if (group[j] != 52 && GetRealNo(group[j]) != temp[j])
if (temp[0] < 0) return false;
if (temp[temp.Length - 1] > 12) return false;
for (int i = 0; i < group.Length; i++)
if (group[i] == 52) continue;
color = GetColor(group[i]);
if (GetColor(group[i]) != color)
public static void Main()
Console.WriteLine("TRUE OLMASI GEREKENLER");
int[] a1 = {0,1,2,3,4,5,6};
int[] a2 = {0,1,2,3,4,52,52};
int[] a3 = {0,1,2,3,4,5,52};
int[] a4 = {0,1,2,3,4,5,6,52,52};
int[] a5 = {0,1,2,3,4,5,6,7,8,9};
int[] a6 = {0,1,2,3,52,52};
int[] a7 = {52,1,2,3,4,5,6};
int[] a8 = {52,1,2,3,4,5,6,7};
Console.WriteLine("ISRUN ? "+RunCheck(a0)+ " HAXE " +RunCheckHAXE(a0));
Console.WriteLine("ISRUN ? "+RunCheck(a1)+ " HAXE " +RunCheckHAXE(a1));
Console.WriteLine("ISRUN ? "+RunCheck(a2)+ " HAXE " +RunCheckHAXE(a2));
Console.WriteLine("ISRUN ? "+RunCheck(a3)+ " HAXE " +RunCheckHAXE(a3));
Console.WriteLine("ISRUN ? "+RunCheck(a4)+ " HAXE " +RunCheckHAXE(a4));
Console.WriteLine("ISRUN ? "+RunCheck(a5)+ " HAXE " +RunCheckHAXE(a5));
Console.WriteLine("ISRUN ? "+RunCheck(a6)+ " HAXE " +RunCheckHAXE(a6));
Console.WriteLine("ISRUN ? "+RunCheck(a7)+ " HAXE " +RunCheckHAXE(a7));
Console.WriteLine("ISRUN ? "+RunCheck(a8)+ " HAXE " +RunCheckHAXE(a8));
Console.WriteLine("TRUE OLMASI GEREKENLER REVERSE ");
Console.WriteLine("ISRUN ? "+RunCheck(a0)+ " HAXE " +RunCheckHAXE(a0));
Console.WriteLine("ISRUN ? "+RunCheck(a1)+ " HAXE " +RunCheckHAXE(a1));
Console.WriteLine("ISRUN ? "+RunCheck(a2)+ " HAXE " +RunCheckHAXE(a2));
Console.WriteLine("ISRUN ? "+RunCheck(a3)+ " HAXE " +RunCheckHAXE(a3));
Console.WriteLine("ISRUN ? "+RunCheck(a4)+ " HAXE " +RunCheckHAXE(a4));
Console.WriteLine("ISRUN ? "+RunCheck(a5)+ " HAXE " +RunCheckHAXE(a5));
Console.WriteLine("ISRUN ? "+RunCheck(a6)+ " HAXE " +RunCheckHAXE(a6));
Console.WriteLine("ISRUN ? "+RunCheck(a7)+ " HAXE " +RunCheckHAXE(a7));
Console.WriteLine("ISRUN ? "+RunCheck(a8)+ " HAXE " +RunCheckHAXE(a8));
Console.WriteLine("FALSE OLMASI GEREKENLER");
int[] b0 = {-1,52,1,2,3};
int[] b1 = {-1,0,1,2,4,4,5,6};
int[] b2 = {1,0,2,3,4,52,52};
int[] b3 = {52,1,2,3,4,5,4};
int[] b4 = {0,1,2,3,4,3,52,52};
int[] b5 = {0,1,2,3,4,5,4,3};
int[] b6 = {0,1,2,3,5,52};
int[] b7 = {52,12,11,10,9};
int[] b8 = {9,10,11,12,52};
Console.WriteLine("ISRUN "+RunCheck(b0) + " HAXE " +RunCheckHAXE(b0));
Console.WriteLine("ISRUN "+RunCheck(b1)+ " HAXE " +RunCheckHAXE(b1));
Console.WriteLine("ISRUN "+RunCheck(b2)+ " HAXE " +RunCheckHAXE(b2));
Console.WriteLine("ISRUN "+RunCheck(b3)+ " HAXE " +RunCheckHAXE(b3));
Console.WriteLine("ISRUN "+RunCheck(b4)+ " HAXE " +RunCheckHAXE(b4));
Console.WriteLine("ISRUN "+RunCheck(b5)+ " HAXE " +RunCheckHAXE(b5));
Console.WriteLine("ISRUN "+RunCheck(b6)+ " HAXE " +RunCheckHAXE(b6));
Console.WriteLine("ISRUN "+RunCheck(b7)+ " HAXE " +RunCheckHAXE(b7));
Console.WriteLine("ISRUN "+RunCheck(b8)+ " HAXE " +RunCheckHAXE(b8));
Console.WriteLine("FALSE OLMASI GEREKENLER REVERSE ");
Console.WriteLine("ISRUN ? "+RunCheck(b0)+ " HAXE " +RunCheckHAXE(b0));
Console.WriteLine("ISRUN ? "+RunCheck(b1)+ " HAXE " +RunCheckHAXE(b1));
Console.WriteLine("ISRUN ? "+RunCheck(b2)+ " HAXE " +RunCheckHAXE(b2));
Console.WriteLine("ISRUN ? "+RunCheck(b3)+ " HAXE " +RunCheckHAXE(b3));
Console.WriteLine("ISRUN ? "+RunCheck(b4)+ " HAXE " +RunCheckHAXE(b4));
Console.WriteLine("ISRUN ? "+RunCheck(b5)+ " HAXE " +RunCheckHAXE(b5));
Console.WriteLine("ISRUN ? "+RunCheck(b6)+ " HAXE " +RunCheckHAXE(b6));
Console.WriteLine("ISRUN ? "+RunCheck(b7)+ " HAXE " +RunCheckHAXE(b7));
Console.WriteLine("ISRUN ? "+RunCheck(b8)+ " HAXE " +RunCheckHAXE(b8));