35 lines
777 B
Ruby
35 lines
777 B
Ruby
class DNA_Seq
|
|
attr_accessor :seq
|
|
|
|
def initialize(bases: %i[A C G T] , size: 0)
|
|
@bases = bases
|
|
@seq = Array.new(size){ bases.sample }
|
|
end
|
|
|
|
def mutate(n = 10)
|
|
n.times{|n| method([:s, :d, :i].sample).call}
|
|
end
|
|
|
|
def to_s(n = 50)
|
|
just_size = @seq.size / n
|
|
(0...@seq.size).step(n).map{|from| "#{from.to_s.rjust(just_size)} " + @seq[from, n].join}.join("\n") +
|
|
"\nTotal #{seq.size}: #{@seq.tally.sort.to_h.inspect}\n\n"
|
|
end
|
|
|
|
def s = @seq[rand_index]= @bases.sample
|
|
def d = @seq.delete_at(rand_index)
|
|
def i = @seq.insert(rand_index, @bases.sample )
|
|
alias :swap :s
|
|
alias :delete :d
|
|
alias :insert :i
|
|
|
|
private
|
|
def rand_index = rand( @seq.size )
|
|
end
|
|
|
|
puts test = DNA_Seq.new(size: 200)
|
|
test.mutate
|
|
puts test
|
|
test.delete
|
|
puts test
|