генетический код и зомби! - PullRequest
3 голосов
/ 12 апреля 2011

В инопланетном мире генетические коды существ находятся в системе base-4 (четверть века).Пары «13» и «22» считаются генетическими нарушениями.С генетическим кодом длины n, если есть хотя бы n / 4 расстройств, существо становится зомби !!Например, при n = 5 существо с генетическим кодом 01321 имеет беспорядок, но не зомби, в то время как существо с генетическим кодом 22132 является зомби (потому что у него два расстройства, которые> n / 4).

Теперь мне нужно написать программу MATLAB и получить от пользователя значение n, что легко, и отобразить количество существ и количество из них зомби

Вот что я написал до сих порЯ не могу понять, как определить, у каких существ есть генетические коды зомби.Буду очень признателен за ваши идеи и помощь. Спасибо

n=input('Enter the length of the genetic sequence: ');
while (n<4) || (mod(n,1))~=0
disp('Invalid input!')
n=input('Enter the length of the genetic sequence: ');
end
nOfCreatures=4^n;
count=0;
for i=0:nOfCreatures
k=dec2base(i,4);
end
fprintf('There are %g creatures and %g of them are zombies.\n',nOfCreatures,count);

Ответы [ 2 ]

2 голосов
/ 12 апреля 2011

Я рекомендовал вам в своем комментарии попробовать функцию REGEXP. Но на самом деле STRFIND подойдет намного лучше, если вы хотите считать перекрытия, например, считать «222» как 2 расстройства.

Итак, вам нужно что-то вроде этого:

k=dec2base(i,4,n); %# use n to include trailing 0s, just for other possible types of disorders
m = [strfind(k,'13') strfind(k,'22')];
if numel(m) > n/4
    count = count+1;
end

Кроме того, вы можете сделать n=0 в качестве первой строки вместо дублирования строки ввода. И исправьте цикл for до nOfCreatures-1.

EDIT

Для бонуса векторизованное решение:

nOfCreatures=4^n;
k=cellstr(dec2base(0:nOfCreatures-1,4,n));
m = cellfun(@numel,strfind(k,'13')) + cellfun(@numel,strfind(k,'22'));
count = sum(m > n/4);
fprintf('There are %g creatures and %g of them are zombies.\n',nOfCreatures,count);
0 голосов
/ 12 апреля 2011
error = 0
    for i<n.len:
        if n[i] == 1:
           if n[i+1] == 3:
              error = error + 1
        if n[i] == 2:
           if n[i+1] == 2:
              error = error + 1
if error >= n/4
     zombie = true

Это общая идея в коде псевдо.

Вот ссылка, которая может помочь вам преобразовать это в реальный код: Обработка строк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...