import random import math import algorithm import turtle import turtle_type import input_type proc select*(turtles: var seq[Turtle], input: Input) = # sort turtles according to score turtles.sort(compareTurtles) var scoreSum = 0 for turtle in turtles: scoreSum += turtle.score let avgScore = scoreSum div turtles.len() var survivors: seq[Turtle] = @[] for i in 0..turtles.high(): let turtle = turtles[i] const smoothness = 0.08 const chanceRandomLive = 0.02 const chanceRandomDie = 0.0 let chanceExp = exp(smoothness * float(turtles[i].score - avgScore)) let chance = chanceRandomLive + (1-chanceRandomDie-chanceRandomLive) * chanceExp / (chanceExp + 1) if rand(1.0) < chance: survivors.add(turtle) var i = 0 while i < turtles.len(): if turtles[i] notin survivors: turtles.del(i) else: inc i