Further refactoring, naming procedures.

This commit is contained in:
Dyego Maas
2022-01-11 20:44:13 -03:00
parent d9ab235585
commit e53b9d9cf1

View File

@@ -2,47 +2,8 @@
using System.Text;
IEnumerable<string> ReadPattern(int limitHeight)
{
for (var i = 0; i < limitHeight; i++)
{
var input = Console.ReadLine();
if (input.ToUpper() == "DONE")
{
yield return string.Empty;
break;
}
// kept for compatibility
if (input.StartsWith('.'))
yield return input.Substring(1, input.Length - 2);
yield return input;
}
}
void PrintHeader()
{
const int pageWidth = 64;
void PrintCentered(string text)
{
var spaceCount = (pageWidth - text.Length) / 2;
Console.Write(new string(' ', spaceCount));
Console.WriteLine(text);
}
PrintCentered("LIFE");
PrintCentered("CREATIVE COMPUTING MORRISTOWN, NEW JERSEY");
Console.WriteLine();
Console.WriteLine();
Console.WriteLine();
}
const int MaxWidth = 70;
const int MaxHeight = 24;
Console.WriteLine("ENTER YOUR PATTERN:");
// var pattern = ReadPattern(limitHeight: MaxHeight).ToArray();
@@ -63,26 +24,63 @@ var pattern = new[]
// "*",
// }; // FOR DEBUGGING PURPOSES
const int MaxWidth = 70;
const int MaxHeight = 24;
var isInvalid = false;
var (index, value) = GetLongestInput(pattern);
int minX = (11 - index / 2) - 1; // middle x
int minY = (33 - value.Length / 2) - 1; // middle y
int maxX = MaxHeight;
int maxY = MaxWidth;
var (index, value) = FindLongestInput(pattern);
var minX = (11 - index / 2) - 1; // middle x
var minY = (33 - value.Length / 2) - 1; // middle y
var maxX = MaxHeight;
var maxY = MaxWidth;
var matrix = new Matrix(height: MaxHeight, width: MaxWidth);
var simulation = InitializeSimulation(pattern, matrix);
PrintHeader();
Console.WriteLine();
Console.WriteLine();
Console.WriteLine();
ProcessGeneration();
IEnumerable<string> ReadPattern(int limitHeight)
{
for (var i = 0; i < limitHeight; i++)
{
var input = Console.ReadLine();
if (input.ToUpper() == "DONE")
{
yield return string.Empty;
break;
}
// kept for compatibility
if (input.StartsWith('.'))
yield return input.Substring(1, input.Length - 2);
yield return input;
}
}
(int index, string value) FindLongestInput(IEnumerable<string> strings)
{
return strings
.Select((value, index) => (index, value))
.OrderByDescending(input => input.value.Length)
.First();
}
void PrintHeader()
{
void PrintCentered(string text)
{
const int pageWidth = 64;
var spaceCount = (pageWidth - text.Length) / 2;
Console.Write(new string(' ', spaceCount));
Console.WriteLine(text);
}
PrintCentered("LIFE");
PrintCentered("CREATIVE COMPUTING MORRISTOWN, NEW JERSEY");
Console.WriteLine();
Console.WriteLine();
Console.WriteLine();
}
Simulation InitializeSimulation(IReadOnlyList<string> inputPattern, Matrix matrixToInitialize) {
var newSimulation = new Simulation();
@@ -103,8 +101,6 @@ Simulation InitializeSimulation(IReadOnlyList<string> inputPattern, Matrix matri
void ProcessGeneration()
{
while (true)
{
void PrintPopulation(int generation, int population)
{
Console.WriteLine($"GENERATION: {generation}\tPOPULATION: {population}");
@@ -112,17 +108,17 @@ void ProcessGeneration()
Console.WriteLine("INVALID!");
}
while (true)
{
PrintPopulation(simulation.Generation, simulation.Population);
simulation.StartNewGeneration();
// LINE 215
var nextMinX = MaxHeight - 1;
var nextMinY = MaxWidth - 1;
var nextMaxX = 0;
var nextMaxY = 0;
// prints empty lines before alive cells
// prints the empty lines before search area
for (var x = 0; x < minX; x++)
{
Console.WriteLine();
@@ -159,13 +155,15 @@ void ProcessGeneration()
Console.WriteLine(string.Join(separator: null, values: printedLine));
}
// prints empty lines after alive cells
for (int x = maxX + 1; x < MaxHeight; x++)
// prints empty lines after search area
for (var x = maxX + 1; x < MaxHeight; x++)
{
Console.WriteLine();
}
Console.WriteLine();
void UpdateSearchArea()
{
minX = nextMinX;
maxX = nextMaxX;
minY = nextMinY;
@@ -195,6 +193,8 @@ void ProcessGeneration()
maxY = 68;
isInvalid = true;
}
}
UpdateSearchArea();
for (var x = minX - 1; x < maxX + 2; x++)
{
@@ -243,14 +243,6 @@ void ProcessGeneration()
}
}
(int index, string value) GetLongestInput(IEnumerable<string> strings)
{
return strings
.Select((value, index) => (index, value))
.OrderByDescending(input => input.value.Length)
.First();
}
public class Simulation
{
public int Generation { get; private set; }