質問: create_str(x) print(data[s-1:g]) ``` しかし、結局これくらいの工夫では結果は変わりませんでした(泣) どなたか高速化の方法をご教示ください。
回答: 文字列を結合すると大変なことになります。 **文字列の長さを漸化式で表す** X(0) = 3 X(1) = 2 * X(0) + 3 X(2) = 2 * X(1) + 3 これを解くと、6 * 2 ^ n - 3 n = 100 のときとてつもなく大きくなりす。 7605903601369376408980219232253 PCで文字列の結合とスライスで解くのは無理です。 **方針変更** * 入力 x s g を受け付ける * x から、上の式を使って文字列の長さ L を計算する * ある数 n と L から L のなかで n 番目の文字を見つける関数を作る * s から g まで整数をインクリメントして関数を呼び、求める文字列を得る **n 番目の文字を見つける関数** * L = 3 のとき、n 番目はすぐにわかる。 * L > 3 の時、n が L の右端、中点、左端のとき、求める文字列はそれぞれ、'X', 'Y' ,'Z' * それ以外なら、n が中点より大きいか小さいかに応じて再帰 L = (L-3)/2 n の L に対する相対的位置を計算しなおす これでうまくいくはず。アルゴリズムに誤りがあれば指摘してください。