public void RunPredefinedGame(IEnumerable<PredefinedPosition> livingCells, InputCsvFile input) { _cells.Clear(); _stats.Clear(); _repetitionList.Clear(); setPredefinedCells(livingCells); Run(input, true); }
static void Main(string[] args) { ConwayGame conwayGame = new ConwayGame(); runList = new List <List <int> >(); if (args.Length > 0) { String conditionFileLocation = args[0]; StreamReader reader = new StreamReader(conditionFileLocation); var csvConditions = new CsvReader(reader, CultureInfo.InvariantCulture); if (args.Length > 1) { IEnumerable <InputCsvFile> conditionRecords = csvConditions.GetRecords <InputCsvFile>(); InputCsvFile firstEntry = new InputCsvFile(); using (IEnumerator <InputCsvFile> enumer = conditionRecords.GetEnumerator()) { if (enumer.MoveNext()) { firstEntry = enumer.Current; } } string predefinedInputLocation = args[1]; StreamReader predefinedInputReader = new StreamReader(predefinedInputLocation); var csvPredefinedPositions = new CsvReader(predefinedInputReader, CultureInfo.InvariantCulture); IEnumerable <PredefinedPosition> predefinedCellRecords = csvPredefinedPositions.GetRecords <PredefinedPosition>(); conwayGame.RunPredefinedGame(predefinedCellRecords, firstEntry); } else { IEnumerable <InputCsvFile> records = csvConditions.GetRecords <InputCsvFile>(); foreach (InputCsvFile record in records) { Console.WriteLine($"input Data: \nsize({record.FieldSize}), prob({record.ProbabilityForLife}), it({record.NumberOfIterations}), sim({record.NumberOfSimulations})"); conwayGame.Run(record, false); } } return; } }
public void Run(InputCsvFile input, bool predefinedPosition) { int fieldSize = input.FieldSize; int probability = input.ProbabilityForLife; int numberOfIterations = input.NumberOfIterations; int numberOfSimulations = input.NumberOfSimulations; bool writeStats = input.SaveStatistics; string statsName = input.NameStatisticFile; string endStateName = input.NameEndStateFile; if (fieldSize == -1) fieldSize = _defaultStarterSize; if (probability == -1) probability = _defaultProbability; if (numberOfIterations == -1) numberOfIterations = _defaultIterations; if (numberOfSimulations == -1) numberOfSimulations = _defaultNumOfSimulations; if (predefinedPosition) numberOfSimulations = 1; //only the predefined game has to be run for (int simulation = 0; simulation < numberOfSimulations; simulation++) { Console.WriteLine("--------------------------"); if (!predefinedPosition) { _cells.Clear(); } _repetitionList.Clear(); _stats.Clear(); if (!predefinedPosition) { GenerateCellsWithProbability(probability, fieldSize); Console.WriteLine($"Generated Cells: {_cells.Count}"); Console.WriteLine($"Field Size: {fieldSize} x {fieldSize}"); } else { Console.WriteLine($"Predefined Generated Cells: {_cells.Count}"); } FillChangedPositionsOnStart(); int checkStarted = 0; bool iterationRepeated = false; bool iterationDead = false; for (int i = 0; i < numberOfIterations; i++) { _currentIteration = i + 1; IterateSimulation(); //For average stats, simulation must add the dead iterations if(_cells.Count == 0 && !input.AverageStats){ iterationDead = true; break; } //For average stats, repetition is not enabled if(!input.AverageStats){ if (i % _checkAfterIterations == 0) { checkStarted = i; } if (checkStarted != 0) { if (i - checkStarted <= _checkForIterations) { if (IsCurrentIterationRepetition()) { iterationRepeated = true; Console.WriteLine($"Iterations: {i + 1}"); break; } AddDictionaryToCheckList(); } else if (i - checkStarted == _checkForIterations + 1) { _repetitionList.Clear(); } } } } if (iterationRepeated) { Console.WriteLine("Field repeated - simulation terminated"); } else if(iterationDead) { Console.WriteLine("Field dead - simulation terminated"); } else { Console.WriteLine($"Alive after 1000 iterations: {_cells.Count}"); } if (writeStats) { IterationStats endStats = new IterationStats(); endStats.CellCount = _cells.Count; _stats.Add(endStats); if (iterationRepeated) { IterationStats.WriteStats(_stats, $"./{ statsName }-{ simulation }-terminated.csv"); } else { IterationStats.WriteStats(_stats, $"./{ statsName }-{ simulation }.csv"); if(input.AverageStats){ IterationStats.AddAverageStats(_stats, $"./{ statsName }-cache.csv"); } } } if (input.SaveEndState) { IterationEndPosition.WriteEndPosition(_cells, $"./{ endStateName }-{ simulation }.csv"); } } if(input.AverageStats){ IterationStats.CalculateAndWriteAverageStats(input.NumberOfSimulations, $"./{ statsName }-cache.csv", $"./{ statsName }-average.csv"); } Console.WriteLine("--------------------------"); }