Another bit of coding suggested by Rosetta Code.
Life on Earth is coded by sequences of four basic units, ACG and T, twisted into our double-helix DNA. It is copied for reproduction with surprosing fidelity, but errors can creep in, as in this sentence. These may be harmless, lethal- or VERY occasionally lead to offspring with superior ability to thrive in a particular environment.
My code allots different probability to a deletion, insertion, or in-place change. You could add further possibilities, including checking if the initiation and termination codons havebecome in-valid, only allow transition/transversion changes, etc.
RC only asked for a teletype-style printed output. I much prefer the easily LB produced colourful graphic!
'nomainwin
global current$, bases$, V
bases$ ="ACGT"
V =15
for i =1 to 120 ' generate a random genome of 160 terms
current$ =current$ +mid$( bases$, 1 +int( 4 *rnd( 1)))
next i
WindowWidth =1300
WindowHeight = 600
open "Mutations" for graphics_nsb as #wg
#wg "down ; size 2 ; down ; fill 50 50 50"
#wg "trapclose quit"
for i =1 to 170
print current$
call show
V =V +3
scan
R =rnd( 1)
select case
case R <=0.6
call swap ' 60% of the time
case R <=0.85
call remove ' 15%
case else
call insert ' 25%
end select
next i
wait
end
sub quit h$
close #h$
end
end sub
sub swap
end sub
sub remove
L =len( current$)
p =int( 1 +L *rnd( 1))
current$ =left$( current$, p -1) +mid$( current$, p +1)
end sub
sub insert
L =len( current$)
p =int( 1 +L *rnd( 1))
current$ =left$( current$, p) +mid$( bases$, 1 +int( 4 *rnd( 1))) +mid$( current$, p +1)
end sub
sub show
L =len( current$)
for k =1 to L
select case mid$( current$, k, 1)
case "C"
col$ ="red"
case "G"
col$ ="green"
case "T"
col$ ="blue"
case "A"
col$ ="yellow"
end select
#wg "color "; col$
#wg "set "; 10 +3 *k; " "; V
next k
end sub