procedure evolve_and_redisplay(var p: Pics; loser: PicLab); var pt: Pic; i, iloser, imom, idad, i1, i2, ichild: integer; begin { Find loser: } for i := 1 to N do if loser = p[i].lab then iloser := i; { Demote loser to last place: } pt := p[iloser]; for i := iloser to N-1 do p[i] := p[i+1]; p[N] := pt; { Pick a pair to mate: } i1 := 1 + random(N-1); i2 := 1 + random(N-1); if i1 < i2 then idad := i1 else idad := i2; i1 := 1 + random(N-1); i2 := 1 + random(N-1); if i1 < i2 then imom := i1 else imom := i2; { Mate the two, and let the child replace the loser: } mate_and_mutate(p[idad].prog, p[imom].prog, p[N].prog^); print_birth_report(p[idad], p[imom], p[N]); display_pic(p[N]); { Promote the child to its birthright rank: } ichild := (idad + imom) div 2; pt := p[N]; for i := N downto ichild + 1 do p[i] := p[i-1]; p[ichild] := pt; end;