using System; using System.Collections.Generic; using System.Data.SqlTypes; namespace N_Space { public class Location { private State? _present; private State? _future; private readonly int[] _coordinate; private readonly List _neighbors; public Location(State? present, State? future, int[] coordinate, int maxSize) { _present = present; _future = future; _coordinate = coordinate; _neighbors = SetNeighborCoordinates(maxSize); } public List GetNeighborCoodrinates() { return _neighbors; } private List SetNeighborCoordinates(int maxSize) { List seed = new List(); seed.Add(_coordinate); seed = IndexEvaluationTrain(seed, 0); return RemoveUndesirableNeighbors(seed, maxSize); } private List RemoveUndesirableNeighbors(List seed, int maxSize) { bool shouldRemove; foreach (int[] s in seed) { shouldRemove = s.Equals(_coordinate); if (!shouldRemove) { foreach (int i in s) { shouldRemove = i < 0 || i > maxSize; } } if (shouldRemove) { seed.Remove(s); } } return seed; } private List IndexEvaluationTrain(List seed, int index) { if (index < _coordinate.Length) { return IndexEvaluationTrain(CoordinateMutator(seed, index), index + 1); } return seed; } private List CoordinateMutator(List currentList, int index) { List result = new List(); int[] mutations = new int[3]; mutations[0] = -1; mutations[1] = 0; mutations[2] = 1; for (int i = 1; i < currentList.Count; i++) { for (int j = 0; j < mutations.Length; j++) { int[] tempCopy = (int[])currentList[i].Clone(); tempCopy[index] = tempCopy[index] + mutations[j]; result.Add(tempCopy); } } return result; } public State? GetPresentState() { return _present; } public State? GetFutureState() { return _future; } public void SetPresentState(State? n) { _present = n; } public void SetFutureState(State? n) { _future = n; } } }