#!/usr/bin/ruby # Feed in a genetic code without ambiguity codes # and get the same genetic code with ambiguity codes. base = Hash.new( 0 ); base["."] = 0; base["a"] = 1; base["c"] = 2; base["g"] = 4; base["u"] = 8; base["m"] = base["a"] | base["c"]; base["r"] = base["a"] | base["g"]; base["w"] = base["a"] | base["u"]; base["s"] = base["c"] | base["g"]; base["y"] = base["c"] | base["u"]; base["k"] = base["g"] | base["u"]; base["v"] = base["a"] | base["c"] | base["g"]; base["h"] = base["a"] | base["c"] | base["u"]; base["d"] = base["a"] | base["g"] | base["u"]; base["b"] = base["c"] | base["g"] | base["u"]; base["n"] = base["a"] | base["c"] | base["g"] | base["u"]; ibase = Array.new( 16 ); base.each { |key, value| ibase[value] = key; } aminoAcid = Hash.new( [0,0,0] ); while gets aminoAcid.default = [0,0,0]; # Why do I have to do this? codon, aa = split; b = codon.split( // ); ourAA = aminoAcid[ aa ]; for i in 0..2 do ourAA[i] = ourAA[i] | base[ b[i] ]; end aminoAcid[ aa ] = ourAA; end aminoAcid.each { |key, value| for i in 0..2 do x = value[i]; print x, " ------> "; for j in 1..15 do if ( j & x ) == j print ibase[j]; end end print "\n"; end print ibase[value[0]], " ", ibase[value[1]], " ", ibase[value[2]]; print ": ", key; print "\n"; }