Search table

How do i compare the result of a sum with all the values in a table?
Ex.
t={2,6,8,9}
a=math.random(1,10)
b=math.random(1,10)
c=a-b
c must be one of the values in table t

for i,v in pairs(t) do 
    if v == c then print('index '..tostring(i)..' matches') end
end

function setup()
    t={2,6,8,9}
    a=math.random(1,10)
    b=math.random(1,10)
    c=a-b
    for x,y in pairs(t) do
        if y==c then
            print(a.." - "..b.." equal to "..y)
        else
            print(a.." - "..b.." not equal to "..y)
        end
    end    
end

I only wont to print a-b=c.
It should always be true
If it is not true it should repeat

@Aaronwillaert Sorry, but I’m not sure what you’re asking. I went ahead and did this anyways.


displayMode(FULLSCREEN)

function setup()
    t={2,6,8,9}
    next=false
end

function draw()
    background(40,40,50)
    fontSize(40)
    fill(255)
    if not next then
        a=math.random(1,10)
        b=math.random(1,10)
        c=a-b
        for x,y in pairs(t) do
            if y==c then
                next=true
            end
        end 
    else  
        text(a.." - "..b.." = "..c,WIDTH/2,HEIGHT/2)
        text("tap screen for next display",WIDTH/2,HEIGHT/2-100)
    end
end

function touched(t)
    if t.state==BEGAN then
        next=false
    end
end

That’s it, thanks!!

The solution can be so simple

How come if i remove one number with every touch at the end the text is displayed very slow

@Aaronwillaert I assume by removing one number, you’re removing one number from the table t. a and b are random numbers. a - b has to equal c, and c has to be a number in the table t. So each time you remove a number from the table t, there are less numbers to match. So it takes longer for a and b to form a correct equation. Each time the draw function is called ( 60 times per second ), random numbers are assigned to a and b, and the result of a - b is compared to a number in the table. So that causes the display to look slow. The code can be changed and a while loop added so that all the random calculation are done in a single draw loop. I’ll add that code later unless you want to try it yourself. You have to be careful with while loops in draw, if the while loop doesn’t exit, draw doesn’t exit and it appears like the iPad is locked up.

@Aaronwillaert Here is the code using a while loop in draw.


displayMode(FULLSCREEN)

function setup()
    t={2,6,8,9}
    done=false
end

function draw()
    background(40,40,50)
    fontSize(40)
    fill(255)
    while not done do
        a=math.random(1,10)
        b=math.random(1,10)
        c=a-b
        for x,y in pairs(t) do
            if y==c then
                done=true
            end
        end 
    end
    text(a.." - "..b.." = "..c,WIDTH/2,HEIGHT/2)
    text("tap screen for next display",WIDTH/2,HEIGHT/2-100)
end

function touched(t)
    if t.state==BEGAN then
        done=false
    end
end

So you mean when my table t is empty is will crash because “done” can’t become true, so the while continues for infinity (trying to understand)

Throwing out ineligible pairs gets inefficient as the number of eligible pairs gets small relative to the total number. Better is to create a list of all eligible pairs and then select one of those at random.

t = {2,6,8,9}
s = {}
for k=1,10 do
    for _,v in ipairs(t) do
        if k + v > 10 then
            break
        end
        table.insert(s,{k+v,k})
    end
end
i = math.random(1,#s)
a = s[i][1]
b = s[i][2]
print(a .. " - " .. b .. " = " .. a - b)

Thanks just what i need. Beter then the while loop.
took a while before I understood it. i have much to learn.