Excluded Digits from vector

2 Ansichten (letzte 30 Tage)
Harish Maradana
Harish Maradana am 22 Aug. 2014
Kommentiert: Guillaume am 22 Aug. 2014
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 Kommentar
the cyclist
the cyclist am 22 Aug. 2014
Bearbeitet: the cyclist am 22 Aug. 2014
I posted this as a Cody problem . As you may know, Cody rewards brevity of code over all other things.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

the cyclist
the cyclist am 22 Aug. 2014
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))

Weitere Antworten (2)

Guillaume
Guillaume am 22 Aug. 2014
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 Kommentare
the cyclist
the cyclist am 22 Aug. 2014
I stole this solution and posted it to Cody. As I write this, it is the leader.
Guillaume
Guillaume am 22 Aug. 2014
What? No fair! I should so rightly be the leader! ;)
Ha! Beaten with a variant on my regexp one-line :)

Melden Sie sich an, um zu kommentieren.


the cyclist
the cyclist am 22 Aug. 2014
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

Kategorien

Mehr zu Performance Profiling finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by