public static Brush aBrush = (Brush)Brushes.Black;
public static string path_collect = "";
public static LinkedList<string> complete_paths = new LinkedList<string>();
public bool wall = false;
public bool floor = false;
public static int miliseconds = 15;
public int current_x = 10;
public int current_y = 10;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
label3.Text = miliseconds + "ms";
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
int x = 10;
int y = 10;
for (int i = 1; i < 21; i++)
{
for (int j = 1; j < 21; j++)
{
e.Graphics.DrawEllipse(Pens.Black, x* i , y *j, 6, 6);
}
}
}
private void bntPath_Click(object sender, EventArgs e)
{
bntPath.Enabled = false;
backgroundWorker1.RunWorkerAsync();
}
protected void Move(string path)
{
Graphics g = this.CreateGraphics();
foreach (char c in path)
{
if (c == '0')
{
g.FillRectangle(aBrush, current_x + 10, current_y, 10, 10);
current_x += 10;
path_collect += "→";
}
else if (c == '1')
{
g.FillRectangle(aBrush, current_x, current_y + 10, 10, 10);
current_y += 10;
path_collect += "↓";
}
}
current_x = 10;
current_y = 10;
label2.Text = "New Unique Path\r\n" + path_collect;
Brush NewBrush = new SolidBrush(GetRandomColor());
aBrush = NewBrush;
path_collect = "";
}
private void backgroundWorker1_DoWork_1(object sender, DoWorkEventArgs e)
{
/*
while (true)
{
MoveRandom();
Thread.Sleep(miliseconds);
}
*/
Int64 i = 0;
Int64 count_unique_paths = 0;
while (true)
{
string bits = Convert.ToString(i, 2).PadLeft(38, '0');
string check = bits;
check = Regex.Replace(check, "0", "");
if (check.Length == 19)
{
Move(bits);
//Thread.Sleep(50);
count_unique_paths += 1;
label4.Text = "Distinct Paths " + count_unique_paths;
}
i += 1;
}
}
string row = "";
public bool completerow = true;
private Random random;
private Color GetRandomColor()
{
random = new Random();
return Color.FromArgb(random.Next(0, 255), random.Next(0, 255), random.Next(0, 255));
}
protected void MoveRandom()
{
Graphics g = this.CreateGraphics();
Random rand = new Random();
int random = rand.Next(0, 2);
if (random == 0)
{
if (!wall)
{
g.FillRectangle(aBrush, current_x + 10, current_y, 10, 10);
current_x += 10;
path_collect += "→";
}
}
else if (random == 1)
{
if (!floor)
{
g.FillRectangle(aBrush, current_x, current_y + 10, 10, 10);
current_y += 10;
path_collect += "↓";
}
}
CheckWall();
}
protected void CheckWall()
{
if (current_x == 200)
wall = true;
if (current_y == 200)
floor = true;
if (wall && floor)
{
current_x = 10;
current_y = 10;
wall = false;
floor = false;
if (!complete_paths.Contains(path_collect))
{
complete_paths.AddLast(path_collect);
label1.Text = "Complete " + complete_paths.Count;
label2.Text = "New Unique Path\r\n" + path_collect;
}
Brush NewBrush = new SolidBrush(GetRandomColor());
aBrush = NewBrush;
path_collect = "";
}
} |