2016-10-07 2 views
0

문자열을 가져 와서 역순으로 바꾸고이를 무료 문자로 바꾸는 프로그램을 만들려고합니다.문자 A를 T와 T가 A로 대체하는 방법

예를 들어 "ATTGCC"문자열을 입력하면 reverse_it 메서드는 "GGCAAT"을 출력해야합니다.

"A"는 "T"로 대체되고 "T"는 "A"로 대체됩니다. "C"는 "G"로 대체되고 "G"는 "C"로 대체됩니다.

class DNA 
    def initialize (nucleotide) 
    @nucleotide = nucleotide 
    end 
    def reverse_it() 
    puts nucleotide.reverse.gsub("C", "G").gsub("G", "C").gsub("A", "T").gsub("T", "A") 
    end 
    protected 

    attr_reader :nucleotide 
end 
dna1 = DNA.new("ATTGCC") 
dna1.reverse_it 

문제는 gsub입니다 캐릭터의 모든 항목을 대체하고 sub 문자열에서 문자의 첫 번째 인스턴스를 대체

이 내 코드입니다. 이 프로그램을 작동시키는 내장 된 방법이 있습니까?

+0

당신은 다음'A's와 X's 후'T's와'X's'와'A's를 ​​대체 할 수있는' T는 그것을 쉽게 이해할 수있는 방법으로 제공합니다. –

답변

5

, 무언가 같이 대신 gsub의 당신의 방법, 그래서 당신은 아마, tr를 찾고 있습니다 :

nucleotide.reverse.tr "ATCG", "TAGC" 
+0

좋은 올린 사람 'tr', 잊혀진 방법. :-) –

1

편지 쌍은 리버스 많은이있는 경우, 당신은 자신에게 타이핑을 저장하고의 가능성을 줄일 수있다 잘못된 항목은 다음과 같습니다. 물론

h = Hash[ *%w| C G A T B S W X | ] 
    #=> {"C"=>"G", "A"=>"T", "B"=>"S", "W"=>"X"} 
h.update h.invert 
    #=> {"C"=>"G", "A"=>"T", "B"=>"S", "W"=>"X", "G"=>"C", "T"=>"A", "S"=>"B", "X"=>"W"} 
s = "tac ATTWBGXCXSCWB god".reverse.gsub(Regexp.union(h.keys), h) 
    #=> "dog SXGBWGWCSXAAT cat" 

과 :

s.reverse.gsub(Regexp.union(h.keys), h) 
    #=> "tac ATTWBGXCXSCWB god" 
관련 문제