Filling a Vector with Find Function

4 visualizaciones (últimos 30 días)
Sam Zavala
Sam Zavala el 26 de Oct. de 2020
Comentada: Sam Zavala el 28 de Oct. de 2020
How can I fill in my x vector with the find function?
I have a code that is used for a Bingo game. I have created a vector of 25 random numbers wth no duplicates, then used that vector to create a bingo card (in the form of a 5x5 matrix) and have set the center to 0, so that the player has a freebe. I have created 12 different vectors that will give you all possible ways to win a bingo (vertical, horizontal, and diagonal win). That is a matrix that is 12x5 and I have labeled Win. The Calll vector is a vector of 50 random integers (no duplicates) that is calling the winning numbers. Therefore, I created the x vector, in the nested for loop so that simulataneously, it will find() where numbers in Call equal to an entire row in the Win matrix, because this is how we know there is a winner. The if statement is used to know whether there is a winner or not, because if there are 5 matches in a row, then there are 5 numbers in the Call, that give the Card a Bingo. It will also show the user their bingo card and that they won. My trouble is debugging the
x = [x, find(Call == Win(i,j))];
line where the x vector is supposed to be filled with the row of Win that matches five numbers in the Call vector to cause a bingo. I will include the part of my code that does all I described (and intended to accomplish) above:
WinStatus = false;
%Using my Call to check my Winning Card
for i = 1:length(Win)
x = [];
for j = 1:length(Win(i,:))
x = [x, find(Call == Win(i,j))];
end
%If the length of x is equal to 5 then there is a winner
if(length(x) == 5)
disp('Winner! :D');
disp('This is your winning card (The zero is your free be): ');
disp(Card);
WinStatus = true;
break
end
end
I have another part of my code that deals when there is a loss. It's just that one line that is causing me trouble. Thank you for your time!
  2 comentarios
Stephen23
Stephen23 el 26 de Oct. de 2020
Most likely the MATLAB approach would be to use ismember or something similar, rathter than loops and find.
Please show (or upload by clicking the paperclip button) some test data and also the expected output for that data.
Sam Zavala
Sam Zavala el 28 de Oct. de 2020
Some Test Data:
Winner! :D
This is your winning card (The zero is your free be):
24 18 69 91 94
36 92 44 90 57
67 17 0 2 38
54 74 41 12 68
78 42 15 89 71
(The x vector that was displayed in the Workspace area)
[31,7,41,22,40]
The expected output would be that x be filled in with one of the 12 combinations needed to make a bingo. Such as
[24,92,0,12,71] or [78,42,15,89,71]

Iniciar sesión para comentar.

Respuesta aceptada

Constantino Carlos Reyes-Aldasoro
Constantino Carlos Reyes-Aldasoro el 26 de Oct. de 2020
This line does not look like Matlab syntax, it looks more like a python loop
x [x, find(Call == Win(i,j))];
I would suggest that you start with x with the dimensions you want, either
x=zeros(5,5);
or
x = rand(5,5);
and then scale and round appropriately to have the values of your bingo. Then iterate as you go through the game and change the values of x, or better, have another variable in which you record the hits (equivalent of placing an object on the number), say something like this
x= round(25*rand(5,5));
y=zeros(5,5);
Then the iteration when a number has been called, say Z would be
if any(x==Z)
y(x==z) =1;
end
Then you have the hits recorded in y and finally just check the number of hits per column, row or diagonal.
Hope this helps.
  1 comentario
Sam Zavala
Sam Zavala el 28 de Oct. de 2020
I was wondering if there was something missing because it felt like there was too much a gap. I appreciate this a ton, thank you!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Card games en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by