2016-10-07 4 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と' X'sが、その後 'T'sと' A'sを置き換えることができますそれを行うのは簡単で分かりやすい方法です。 –

答えて

5

、何かのように代わりgsubのあなたの方法でのように、あなたはおそらく、trを探しています:

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

忘れられた方法である良い "オル"です。 :-) –

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" 
関連する問題