ウィキペディアでBurrows-Wheeler変換の例を再現しようと遊んでいます。楽しみに追加するために、私は再帰的な戦略によってそうしようとしています。しかし、私は最初のステップで立ち往生し、文字列のすべての回転を作成します。これが私のコードです:
object SimpleBW extends App {
val string = "^BANANA|"
val list = tranformStringStart(string)
list.foreach(println)
def tranformStringStart(string: String): List[String] = { transformString(string, string.length) }
def transformString(string: String, splitIndex: Int): List[String] = {
if (splitIndex == 0) {
// Recursion base case
Nil
} else {
val (firstString, secondString) = string.splitAt(splitIndex)
val newString = secondString + firstString
newString :: transformString(secondString + firstString, splitIndex - 1)
}
}
}
これにより、次の出力が生成されます。
^BANANA|
|^BANANA
NA|^BANA
ANANA|^B
A|^BANAN
BANANA|^
NANA|^BA
ANA|^BAN
これはウィキペディアの例に似ていますが、同一ではなく、理由がわからないようです。例によると、出力は次のようになります。
^BANANA|
|^BANANA
A|^BANAN
NA|^BANA
ANA|^BAN
NANA|^BA
ANANA|^B
BANANA|^
私はしばらくの間これを見つめていました、そして問題はかなり簡単であるはずですが、私はそれを理解することができないようです。私が間違っていることを見つけられますか?