private static void reSplit(int start, int[] syu, ref List<Tartsu> work, ref List<HoraPattern> resultList)
        {
            if (syuIsZero(syu))
            {
                HoraPattern result = new HoraPattern(work);
                resultList.Add(result);
                return;
            }

            for (int i = start; i < MJUtil.LENGTH_SYU_ALL; i++)
            {

                if (syu[i] >= 3)
                {
                    syu[i] -= 3;
                    Tartsu ts = new Tartsu(MJUtil.TartsuType.ANKO, i);
                    work.Add(ts);
                    reSplit(i, syu, ref work, ref resultList);
                    work.Remove(ts);
                    syu[i] += 3;
                }
                if ((i <= 24) && ((syu[i] >= 1) && (syu[i + 1] >= 1) && (syu[i + 2] >= 1)) && ((i % 9) < 7)  )
                {
                    syu[i]--;
                    syu[i + 1]--;
                    syu[i + 2]--;
                    Tartsu ts = new Tartsu(MJUtil.TartsuType.ANSYUN, i);
                    work.Add(ts);
                    reSplit(i, syu, ref work, ref resultList);
                    work.Remove(ts);
                    syu[i]++;
                    syu[i + 1]++;
                    syu[i + 2]++;
                }

            }
        }
 private static List<HoraPattern> split(int[] syu)
 {
     List<Tartsu> work = new List<Tartsu>();
     List<HoraPattern> resultList = new List<HoraPattern>();
     int start = 0;
     for (int i = 0; i < MJUtil.LENGTH_SYU_ALL; i++)
     {
         if (syu[i] >= 2)
         {
             syu[i] -= 2;
             Tartsu ts = new Tartsu(MJUtil.TartsuType.HEAD, i);
             work.Add(ts);
             reSplit(start, syu, ref work, ref resultList);
             work.Remove(ts);
             syu[i] += 2;
         }
     }
     return resultList;
 }
 public HoraPattern(List<Tartsu> horaPatternTartsuList)
 {
     TartsuList = new List<Tartsu>(horaPatternTartsuList);
     WithoutHeadTartsuList = TartsuList.Where(e => e.TartsuType != MJUtil.TartsuType.HEAD).ToList();
     Head = TartsuList.First(e => e.TartsuType == MJUtil.TartsuType.HEAD);
 }