taggaの日記: ああ Perl 忘れてる 3
日記 by
tagga
最近、自分で書くのは Lua なので、 Perl の文法がぱっと出て来ない……。
Perlで相補鎖を返す関数を短く書くというのが、目に入ってしまった。 ループ削るなら map でしょということで、 ご希望らしい実質 1行。
sub _reverse {
return join('', map { {c => 'g', g => 'c', a => 't', t => 'a'}->{lc($_)} or '' } split(//, shift));
}
強引に書いたけど、なんか楽しくない……。
文法は未だ佳しとして、演算子 (スコア:2)
# せめてrubyを使っておけばと、15年程過去を後悔してますぅ…。
tr一発 (スコア:1)
リンク先のコードと日記のコードでは変換結果が異なるので、
どっちが正しいのか相補鎖ってものを理解せずに書きましたが、
日記のコードと同じ変換をするなら、
sub _reverse { $_=shift; tr/CGATcgat/gctagcta/; return $_;}
って感じですかね。
Re:tr一発 (スコア:1)
Perlといえば正規表現だよな。
まですぐに思いついたけど、trのことをすっかり忘れていたので
s/./({c,g,g,c,a,t,t,a})->{lc $&}/ge;
みたいなコードを書きかけていました。
#SQLならtranslateでやれるな、とまで思いながらも、trは思い出さない自分