基于项目频率的数组(Lua)的添加

Rod*_*phe 1 arrays lua

我有一个数组,用于计算游戏中的得分:

a = {1,7,5,1,2,6,2,3,4,5,5,6,7,7,7}
Run Code Online (Sandbox Code Playgroud)

应该简单地添加所有数字,除非数字出现多次,例如7(显示4次),应该如下添加:

1*7 + 2*7 + 3*7 + 4*7
Run Code Online (Sandbox Code Playgroud)

所以,总而言之,数组"a"应该给出这个分数:

score = (1*1 + 2*1) + (1*2 + 2*2) + (1*3) + (1*4) + (1*5 + 2*5 + 3*5) + (1*6 + 2*6) + (1*7 + 2*7 + 3*7 + 4*7)
Run Code Online (Sandbox Code Playgroud)

我不知道从哪里开始这样做.这种计算有什么好方法?

任何帮助表示赞赏.

Mud*_*Mud 5

您可以跟踪另一个表中每个数字的当前乘数:

function calculateScore(a)
    local multipliers = {}
    local score = 0
    for i,number in ipairs(a) do
        local multiplier = multipliers[number] or 1
        multipliers[number] = multiplier + 1
        score = score + number * multiplier
    end
    return score
end

local a = {1,7,5,1,2,6,2,3,4,5,5,6,7,7,7}
local score = calculateScore(a)
Run Code Online (Sandbox Code Playgroud)