質問はあまり明確に表現されていません。
たとえば、ここでは記号 Q のパーツ間の区切りとしてスペースを示しています。
例: "dj ir j kw" (ロング ロング ショート ロング)
後で次のように言います。
白い空白記号には、「xxxxxx」の 6 文字を選択しました。
それは空白の記号ですか、それとも記号内で使用する区切り文字ですか (上記の Q など)? あなたの投稿は言いません。
この場合、いつものように、例は何千もの言葉に値します。可能な入力の例をいくつか示し、それらをどのように解析するかを示す必要があります。
「dj ir j kw jfkl abpzoq jfkl dj ir j kw」を「Q Q」としてデコードする必要があり、トークンの長さを一致させる方法を知りたい場合は、...質問は簡単です。それを行う方法は無数にあります。
Lua では、2 つのパスで行います。最初に、メッセージを連続文字の各チャンクの長さのみを含む文字列に変換します。
message = 'dj ir j kw jfkl abpzoq jfkl dj ir j kw'
message = message:gsub('(%S+)%s*', function(s) return #s end)
print(message) --> 22124642212
次に、数字4で分割して各グループを取得します
for group in message:gmatch('[^4]+') do
print(group)
end
これにより、次のことが得られます。
2212
6
2212
したがって、次のように変換できます。
function translate(message)
local lengthToLetter = {
['2212'] = 'Q',
[ '6'] = ' ',
}
local translation = {}
message = message:gsub('(%S+)%s*', function(s) return #s end)
for group in message:gmatch('[^4]+') do
table.insert(translation, lengthToLetter[group] or '?')
end
return table.concat(translation)
end
print(translate(message))