using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string[] courses = { "體育課", "體育課", "美術課", "音樂課", "勞動課", "語文課", "數學課", "英語課"};
var result = Enumerable.Range(0, 5).Select(_ => Enumerable.Range(0, 6).Select(__ => "").ToArray()).ToArray();
while (!result.All(x => x.Contains("語文課") && x.Contains("數學課") && x.Contains("英語課")))
{
var rndseq = Enumerable.Range(0, 30).OrderBy(_ => Guid.NewGuid()).Zip(courses, (x, y) => new { x, y }).ToArray();
for (int i = 0; i < 5; i++)
{
int pos = 0;
string[] cs = { "語文課", "數學課", "英語課" };
for (int j = 0; j < 6; j++)
{
if (rndseq.Any(x => x.x == i * 6 + j))
result[i][j] = rndseq.First(x => x.x == i * 6 + j).y;
else
result[i][j] = (pos++ < 3) ? cs[pos - 1] : "自修課";
}
}
}
result = result.Select(x => x.OrderBy(_ => Guid.NewGuid()).ToArray()).ToArray();
for (int j = 0; j < 6; j++)
{
for (int i = 0; i < 5; i++)
{
Console.Write(result[i][j] + "\t");
}
Console.WriteLine();
}
}
}
}
result = result.Select(x => x.OrderBy(_ => Guid.NewGuid()).ToArray()).ToArray();
->
result = result.Select(x => x.OrderBy(y => y == "自修課" ? 1 : 0).ThenBy(_ => Guid.NewGuid()).ToArray()).ToArray();