How to tell if there are at least 5 consecutive entries in one 8-by-1 matrix with 8 integers?

1 次查看(过去 30 天)
Hi:
I am looking for a way to determine if there are AT LEAST 5 consecutive values in one 8-by-1 matrix with 8 integers. The 8 integers do NOT have to be unique. And I prefer this to be short and loop-free.
The consecutive values have to be in a "straight", meaning that [5 1 3 4 2 6 8 7] would work because it has at least 5 (actually 8) consecutive values in a straight. The straight is 1 2 3 4 5 6 7 8.
But [1 2 3 4 10 9 8 7] would not because it only has 4 values in each of the straight. The first straight is 1 2 3 4. The second straight is 7 8 9 10.
Thank you very much for your help (I'm writing this for my TexasHoldEm function for fun)
  10 个评论
Image Analyst
Image Analyst 2013-5-31
[5 1 3 4 2 6 8 7] is 1 by 8, not 8 by 1 like you said, and my code assumes. Which is it??? [5; 1; 3; 4; 2; 6; 8; 7] would be 8 by 1.

请先登录,再进行评论。

采纳的回答

Daniel Shub
Daniel Shub 2013-5-31
编辑:Daniel Shub 2013-6-3
As people are giving answers, I am pretty confident that
not(isempty(strfind(diff(sort(unique(x))), ones(1, 4))))
works. I am less confident that
not(all(diff(sort(unique(x)), 4)))
works, but if it does, it is much cooler as I rarely use the second argument to diff. After further thinking the second approach does not work. It fails in all sorts of unique ways, for example 1,3,5,7,9.
  3 个评论
Jan
Jan 2013-5-31
编辑:Jan 2013-5-31
You can replace not(isempty(strfind())) by any(strfind())
And the output of unique is still sorted. Then your first method becomes:
any(strfind(diff(unique(x)), ones(1, 4)))

请先登录,再进行评论。

更多回答(4 个)

Roger Stafford
Roger Stafford 2013-5-31
编辑:Roger Stafford 2013-6-1
It can all be put into one line:
any(diff(find([true;diff(unique(x))~=1;true]))>=5)

Image Analyst
Image Analyst 2013-5-31
How about
data = [9; 1; 2; 3; 4; 5; 6; 9] % Sample data.
diffData = diff(data)
countOf1s = sum(diffData==1)+1
atLeast5 = countOf1s >= 5
  7 个评论
Han
Han 2013-5-31
@Image Analyst Thanks very much for your help. But I do not have image processing toolbox. I heard it's expensive.

请先登录,再进行评论。


Azzi Abdelmalek
Azzi Abdelmalek 2013-5-31
a=[3 2 3 4 5 5 7 6 8];
e=[1 diff(a)];
e(e==0)=1;
idx=strfind(e,[true,true,true,true]) % it exist if idx~=0
  4 个评论

请先登录,再进行评论。


Azzi Abdelmalek
Azzi Abdelmalek 2013-5-31
编辑:Azzi Abdelmalek 2013-5-31
a=[1; 2; 3; 5; 6; 7; 9; 10]
a=sort(a)
e=[1 ;diff(a)];
e(e==0)=1;
idx=~isempty(strfind(e',[true,true,true,true])) % it exist if idx=1

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by