はい、数的論理っていうと難しく聞こえますね、すみません(* ̄∇ ̄)ノ
ま、連続する自然数の積の証明なるものがありまして
(俺も調べて知ったんですが)
それを応用して、ゲームプログラムを作ろうというものです
実際のプログラムをば
private int Color_check(int t)
{
var black = button_color_index.Select((p, q) => new { Contains = p, Index = q })
.Where(ano => ano.Contains == 1 && ano.Index >= 1 && ano.Index <= button_color_index.Length - 1)
.Select(ano => ano.Index);
black.ToList();
この部分で、黒ボタンの配列のIndexをList化してます
ぶっちゃけ、ネットの記事をそのまま持ってきました(笑)
Linqですね、ただし意味はほとんどわかってません(笑)
var white = button_color_index.Select((p, q) => new { Contains = p, Index = q })
.Where(ano => ano.Contains == 2 && ano.Index >= 1 && ano.Index <= button_color_index.Length - 1)
.Select(ano => ano.Index);
white.ToList();
以降は、積の証明の数的論理の部分です
○連続するm個の整数の積はm!の倍数になる.
n(n+1)(n+2)···(n+m−1)はm!で割り切れる.
こんな数的論理があるらしいのです、Indexの数値を掛けてます
float black_count;
float white_count;
black_count = 1;
white_count = 1;
foreach (int i in black)
{
black_count *= i;
}
foreach(int i in white)
{
white_count *= i;
}
float black_list_number;
float white_list_number;
black_list_number = Factorial(black.Count());
white_list_number = Factorial(white.Count());
if(black_count/black_list_number == Convert.ToInt32(black_count / black_list_number))
{
black_judge = true;
}
else
{
black_judge = false;
}
if(white_count/white_list_number == Convert.ToInt32(black_count / black_list_number))
{
white_judge = true;
}
else
{
white_judge = false;
}
Console.WriteLine(black_count);
Console.WriteLine(black_list_number);
Console.WriteLine(black_judge);
return t;
}
で以下は、階乗のためのメソッドつくり
public int Factorial(int n)
{
if(n==0)
{
return 1;
}
return n * Factorial(n - 1);
}
これもね、良く分かってないんすぶっちゃけ(;•̀ω•́)
retunrnは値を返すからっていうけど、入る値はどこまで?
うーん、いつの間に掛けるの終わってんの(;•̀ω•́)
と、いう感じですが
幾分のバグはあるものの一応動きます
忘備録でしたヽ(•̀ω•́ )ゝ✧