Lucien S.
Lucien S.

Reputation: 5345

Additions based on item frequency in an array (Lua)

I have an array which is used to compute a score in a game:

a = {1,7,5,1,2,6,2,3,4,5,5,6,7,7,7}

All numbers should be simply added, except when a number appears several times, for instance 7 (which appears 4 times) it should be added as such:

1*7 + 2*7 + 3*7 + 4*7

So, altogether, array "a" should give this score:

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)

I wouldn't know where to start doing this. What's a good method for this kind of calculation?

Any help is appreciated.

Upvotes: 1

Views: 60

Answers (1)

Mud
Mud

Reputation: 29000

You can keep track of the current multiplier for each number in another table:

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)

Upvotes: 5

Related Questions