51 lines
1.6 KiB
Plaintext
51 lines
1.6 KiB
Plaintext
Mutations = 10
|
|
InitialLength = 400
|
|
|
|
@%=3
|
|
REM Generate sequence and Pretty Print result.
|
|
FOR I%=1 TO InitialLength
|
|
Sequence$ += FNRandomBase
|
|
NEXT
|
|
PROCDisplaySequence(Sequence$, 50)
|
|
|
|
REM Make mutations and Pretty Print result.
|
|
PRINT '"Mutating..."
|
|
FOR I%=1 TO Mutations
|
|
Position = RND(LENSequence$)
|
|
CurBase$ = MID$(Sequence$, Position, 1)
|
|
NewBase$ = FNRandomBase
|
|
CASE RND(3) OF
|
|
WHEN 1 REM Change a base
|
|
PRINT "Change base " CurBase$ " at position " Position " to base " NewBase$
|
|
MID$(Sequence$, Position, 1)=NewBase$
|
|
WHEN 2 REM Delete a base
|
|
PRINT "Delete base " CurBase$ " at position " Position
|
|
Sequence$=LEFT$(Sequence$, Position - 1) + MID$(Sequence$, Position + 1)
|
|
WHEN 3 REM Insert a base
|
|
PRINT "Insert base " NewBase$ " at position " Position
|
|
Sequence$=LEFT$(Sequence$, Position) + NewBase$ + MID$(Sequence$, Position + 1)
|
|
ENDCASE
|
|
NEXT
|
|
PROCDisplaySequence(Sequence$, 50)
|
|
END
|
|
|
|
DEF FNRandomBase = MID$("ACGT", RND(4), 1)
|
|
|
|
DEF PROCDisplaySequence(seq$, snap%)
|
|
LOCAL a, c, g, t, i%, p%
|
|
|
|
p% = !^seq$
|
|
FOR i%=0 TO LENseq$ - 1
|
|
IF i% MOD snap% == 0 PRINT 'i% ": ";
|
|
VDU p%?i%
|
|
CASE p%?i% OF
|
|
WHEN ASC"A" a += 1
|
|
WHEN ASC"C" c += 1
|
|
WHEN ASC"G" g += 1
|
|
WHEN ASC"T" t += 1
|
|
ENDCASE
|
|
NEXT
|
|
PRINT ' "A: " a ' "C: " c ' "G: " g ' "T: " t
|
|
PRINT "Total: "; a + c + g + t
|
|
ENDPROC
|