treasure/select.nim

37 lines
881 B
Nim

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