RosettaCodeData/Task/Bioinformatics-Sequence-mutation/11l/bioinformatics-sequence-mutation.11l

52 lines
1.7 KiB
Text
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
UInt32 seed = 0
F nonrandom(n)
:seed = 1664525 * :seed + 1013904223
R Int(:seed >> 16) % n
F nonrandom_choice(lst)
R lst[nonrandom(lst.len)]
F basecount(dna)
DefaultDict[Char, Int] d
L(c) dna
d[c]++
R sorted(d.items())
F seq_split(dna, n = 50)
R (0 .< dna.len).step(n).map(i -> @dna[i .< i + @n])
F seq_pp(dna, n = 50)
L(part) seq_split(dna, n)
print(#5: #..format(L.index * n, part))
print("\n BASECOUNT:")
V tot = 0
L(base, count) basecount(dna)
print( #3: #..format(base, count))
tot += count
V (base, count) = (TOT, tot)
print( #3= #..format(base, count))
F seq_mutate(String =dna; count = 1, kinds = IDSSSS, choice = ATCG)
[(String, Int)] mutation
V k2txt = [I = Insert, D = Delete, S = Substitute]
L 0 .< count
V kind = nonrandom_choice(kinds)
V index = nonrandom(dna.len + 1)
I kind == I
dna = dna[0 .< index]nonrandom_choice(choice)dna[index..]
E I kind == D & !dna.empty
dna = dna[0 .< index]dna[index+1..]
E I kind == S & !dna.empty
dna = dna[0 .< index]nonrandom_choice(choice)dna[index+1..]
mutation.append((k2txt[kind], index))
R (dna, mutation)
print(SEQUENCE:)
V sequence = TCAATCATTAATCGATTAATACATTCAATTTGAACATCTCCAGGAGAAGGCAGGGTAATCTCGTGTAGCCGTGCTTGGGGCCTCCGATATGGCCGGGGAATTTCAAAGTATAGTGTGCATCCCCTCATAATACATAGATCTATAGGTAAGTATATGGGTTGACGTTGTTAGATGCGATACACGTGCACACTTTATGAATTTTACGTTCCTCTGCCTAGAGTGCCAAGTTTCAATTTGCTACGGTTCCTCA
seq_pp(sequence)
print("\n\nMUTATIONS:")
V (mseq, m) = seq_mutate(sequence, 10)
L(kind, index) m
print( #10 @#..format(kind, index))
print()
seq_pp(mseq)