唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

CODE VS に挑戦.バグ発見編

CODE VSでバグを見つけて報告しました.
暫定一位になったよ!(笑)

f:id:sucrose:20111204002034j:image:w640

バグの内容

問い合わせ窓口にメールした結果,返事はありませんでしたが修正されたようなので,簡単な内容を紹介しておきます.


バグの内容はタワーの強化回数の上限のチェック漏れです.
これによって最大強化回数の4よりも強力なタワーを利用することができます.


しかしこれを単純に使うだけでは上のような資産を得ることはできません.
資産の増加については整数のオーバーフローを利用しました.
最小の負の数から減算を行うと,その値は最大に近い正の数になることを利用しています.
言語や環境にもよりますが(signed) intの範囲は[-2147483648, 2147483647]となっています.

以下オーバーフローのログ

(3,3)のタワーを強化します money :-2146902710 = -2146695500-207210
(3,3)のタワーを強化します money :-2147109930 = -2146902710-207220
(3,3)のタワーを強化します money :-2147317160 = -2147109930-207230
(3,3)のタワーを強化します money :2147442896 = -2147317160-207240
(3,3)のタワーを強化します money :2147235646 = 2147442896-207250
(3,3)のタワーを強化します money :2147028386 = 2147235646-207260
(3,3)のタワーを強化します money :2146821116 = 2147028386-207270
(3,3)のタワーを強化します money :2146613836 = 2146821116-207280

資産ができれば,超高レベルのタワーをひとつ設置すれば何も考えないでも40-25までクリアできます.


教訓は「境界値チェックはちゃんとやろう」「オーバーフローには気をつけよう」ということです.