むかしむかし、王子の命を救った賢い召使いがいました。 王様は、召使いが望むものなら何でも報酬として与えると約束しました。 王様がチェスを愛していることを知っていた召使いは、小麦の粒がほしいと王様に伝えました。 チェス盤の最初のマスに1粒、次のマスからはマスが進むごとに粒の数が2倍になるように、と。
チェス盤の上にある小麦の粒の数を計算しましょう。
チェス盤には64のマスがあります。 1マス目には1粒、2マス目には2粒、3マス目には4粒、というように、マスが進むごとに2倍になっていきます。
次のものを計算するコードを書きましょう。
Vimのドキュメントには、次のように書かれています。
64ビットの数値が使われていると仮定すると(v:numbersizeを参照)、符号なしの数値は0x7fffffffffffffff、つまり9223372036854775807に切り詰められます。
言い換えると、Vim scriptでは2^63以上の数値を整数として表すことはできません。
この演習のテストには、64ビット整数を必要とするものがあります。しかし、これはVim scriptの整数サイズの制限を超えています。そのため、計算結果は、答えをIntegerとして表すのではなく、整数値を表す文字列と比較してテストされます。言語がそのまま扱える範囲を超える数値を使わずに、これを解くことはできるでしょうか?