Excluded Digits from vector

조회 수: 2 (최근 30일)
Harish Maradana
Harish Maradana 2014년 8월 22일
댓글: Guillaume 2014년 8월 22일
vector=[1 2 5 13 55 23 15],excluded dig=5 then out=[1 2 13 23] ,another example vector=[3 24 7 9 18 55 67 71],excluded dig=7 then out=[3 24 9 18 55]
  댓글 수: 1
the cyclist
the cyclist 2014년 8월 22일
편집: the cyclist 2014년 8월 22일
I posted this as a Cody problem . As you may know, Cody rewards brevity of code over all other things.

댓글을 달려면 로그인하십시오.

채택된 답변

the cyclist
the cyclist 2014년 8월 22일
I expect there is a much cleaner method, but here is one that works:
vector = [1 2 5 13 55 23 15];
exDigit = 5;
v = vector;
hasDigit = false(1,numel(v));
while max(v>=1)
hasDigit = hasDigit | mod(v,10)==exDigit;
v = floor(v/10);
end
new_vector = vector(not(hasDigit))

추가 답변 (2개)

Guillaume
Guillaume 2014년 8월 22일
str2num(regexprep(num2str(vector), sprintf('\\<\\d*%d\\d*\\>', digit), ''))
Is a neat one liner but may not be faster than the cyclist answer due to the conversion to/from string and the use of regular expression.
  댓글 수: 4
the cyclist
the cyclist 2014년 8월 22일
I stole this solution and posted it to Cody. As I write this, it is the leader.
Guillaume
Guillaume 2014년 8월 22일
What? No fair! I should so rightly be the leader! ;)
Ha! Beaten with a variant on my regexp one-line :)

댓글을 달려면 로그인하십시오.


the cyclist
the cyclist 2014년 8월 22일
Here is a solution that came out of Cody. The inputs to the function are the vector v and the excluded digit d.
function ans = digitRemove(v,d)
I = [];
for i = 1 : length(v)
if ~any(ismember( num2str(v(i)) - '0' , d))
I = [I i];
end
end
v(I);
end

카테고리

Help CenterFile Exchange에서 Performance Profiling에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by