シンボルのリストを指定して、可能なすべての長さの文字列 ( k-merと呼ばれる) を繰り返し処理したいと思います。たとえば、 とk = 3
の場合symbols = {A, C, G, T}
:
AAA
AAC
AAG
...
TTG
TTT
文字列を生成するコードは次のとおりです。
local k = 3
local bases = {'A', 'C', 'T', 'G'}
-- Generate the string (AAA...AAA)
local kmer_gen = {}
for i = 1,k do kmer_gen[i] = "A" end
local kmer = table.concat(kmer_gen)
それは機能しますが、確かに見栄えがよくありません。これをよりエレガントに実現できますか?
さて、可能なk-merを反復する方法がわかりません。1 つの解決策は、各文字を置き換え続けることですが、これは効率的ではありません。もう 1 つの方法は、バイナリ (各 2 ビットが基数を表す) からデコードすることですが、実装がわかりにくく、ビット単位の演算が必要です。他の考えはありますか?