Luaでペプシ算 Reboot
NScripterでペプシ算 - 永字八法の焼き直し。
do local memo = {} -- op = 開けた本数 -- tp = そろった種類 -- tpm = 食玩の種類 math.pepsi = function(tpm, op, tp) tp = tp or tpm if op == 0 then if tp == 0 then return 1 end return 0 end memo[tpm] = memo[tpm] or {} memo[tpm][op] = memo[tpm][op] or {} memo[tpm][op][tp] = memo[tpm][op][tp] or ( math.pepsi( tpm, op-1, tp-1 ) * ( tpm - tp + 1 ) + math.pepsi( tpm, op-1, tp ) * tp ) / tpm return memo[tpm][op][tp] end math.pepsi_complete = function(tpm, pro) local op = 1 while true do if math.pepsi(tpm, op) < pro then op = op + 1 else break end end return op end end
最初に一回だけ上記のスクリプトを実行する。math.pepsi()とmath.pepsi_complete()の二つが出来ているので、使う。多分、pepsi_complete()の方が有用?
Luaの考察
以前よりもいいコードが書けたような気がする。
mathの環境を汚すのは好みだろうけどいいよね別に。
Luaでペプシ算 Reboot
NScripterでペプシ算 - 永字八法の焼き直し。
do local memo = {} -- op = 開けた本数 -- tp = そろった種類 -- tpm = 食玩の種類 math.pepsi = function(tpm, op, tp) tp = tp or tpm if op == 0 then if tp == 0 then return 1 end return 0 end memo[tpm] = memo[tpm] or {} memo[tpm][op] = memo[tpm][op] or {} memo[tpm][op][tp] = memo[tpm][op][tp] or ( math.pepsi( tpm, op-1, tp-1 ) * ( tpm - tp + 1 ) + math.pepsi( tpm, op-1, tp ) * tp ) / tpm return memo[tpm][op][tp] end math.pepsi_complete = function(tpm, pro) local op = 1 while true do if math.pepsi(tpm, op) < pro then op = op + 1 else break end end return op end end
最初に一回だけ上記のスクリプトを実行する。math.pepsi()とmath.pepsi_complete()の二つが出来ているので、使う。多分、pepsi_complete()の方が有用?
Luaの考察
以前よりもいいコードが書けたような気がする。
mathの環境を汚すのは好みだろうけどいいよね別に。
Luaでペプシ算 Reboot
NScripterでペプシ算 - 永字八法の焼き直し。
do local memo = {} -- op = 開けた本数 -- tp = そろった種類 -- tpm = 食玩の種類 math.pepsi = function(tpm, op, tp) tp = tp or tpm if op == 0 then if tp == 0 then return 1 end return 0 end memo[tpm] = memo[tpm] or {} memo[tpm][op] = memo[tpm][op] or {} memo[tpm][op][tp] = memo[tpm][op][tp] or ( math.pepsi( tpm, op-1, tp-1 ) * ( tpm - tp + 1 ) + math.pepsi( tpm, op-1, tp ) * tp ) / tpm return memo[tpm][op][tp] end math.pepsi_complete = function(tpm, pro) local op = 1 while true do if math.pepsi(tpm, op) < pro then op = op + 1 else break end end return op end end
最初に一回だけ上記のスクリプトを実行する。math.pepsi()とmath.pepsi_complete()の二つが出来ているので、使う。多分、pepsi_complete()の方が有用?
Luaの考察
以前よりもいいコードが書けたような気がする。
mathの環境を汚すのは好みだろうけどいいよね別に。