using System; >using System.Collections.Generic; >using System.Diagnostics; >using System.Linq; > >namespace ConsoleApplication8 >{ > class Program > { > static readonly List<Person> Population = new List<Person>(); > static Random r = new Random(); > static void Main(string[] args) > { > > var adam = new Person( new string('0',256),Sex.Male); > var eve = new Person( new string('1',256),Sex.Female); > Population.Add(adam); > Population.Add(eve); > try > { > Breed(); > } > catch (Exception ex) > { > Console.WriteLine(string.Format("World is full. Population is {0}",Population.Count)); > Console.ReadLine(); > } > } > > static void Breed() > { > var females = Population.Where(x => x.Sex == Sex.Female).ToArray(); > Console.WriteLine(String.Format("Females:{0} Males:{1}",females.Count(), Population.Count()-females.Count())); > > List<Person> children = new List<Person>(); > foreach (Person male in Population.AsParallel().WithExecutionMode(ParallelExecutionMode.ForceParallelism).Where(x => x.Sex == Sex.Male)) > { > children.Add(male + females.Skip(r.Next(0, females.Count())).Take(1).First()); > } > Population.AddRange(children); > Console.WriteLine(string.Format("Memory used: {0}Mb",Math.Round((double)Process.GetCurrentProcess().PrivateMemorySize64/1048576))); > Breed(); > } > } > > public struct Person > { > private readonly string _dna; > public Sex Sex; > private static Random r = new Random(); > public Person(string dna,Sex sex) > { > _dna = dna; > Sex = sex; > } > > public static Person operator +(Person m, Person f) > { > var result = new char[256]; > int mStart = 0; > int fStart = 128; > for (var x = 0; x < 256; x += 2) > { > result[x] = m._dna[mStart++]; > result[x + 1] = f._dna[fStart++]; > } > return new Person(new String(result), (Sex)Enum.GetValues(typeof(Sex)).GetValue(r.Next(2))); > } > } > > public enum Sex > { > Male, > Female > } >}