четвер, 6 листопада 2014 р.

EXERCISE BREAK: Compute Count2(AACAAGCTGATAAACATTTAAAGAGAAAAA).

Сегодня день моего несогласия с системой квизов. Ибо я считаю, что решения мои правильные (да я их в уме пересчитываю и все сходится), а квиз не принимает и тычет мне свое "инкоррект".
В этом задании надо было посчитать сколько раз встречается последовательность Pattern в заданном Genome, если допустимое расстояние Хэмминга для этой последовательности.. тоже задано - d. 
Я нашла массив позиций с которых встречается паттерн в геноме.. и посчитала кол-во элементов. Где тут можно было провтыкать? Но инкоррект. Не 10. У меня получается 10. 

Однако. Это я рассуждаю как тупо прогер-математик, где циферка к циферке. А если включить мозг биолога, то он обидится на мое решение и скажет, что "накрываться"(пересекаться) эти последовтельности (паттерны, которые я подсчитываю), вероятно, не должны.. Не должны? Массив позиций выглядит так: 
['0', '1', '8', '9', '10', '11', '12', '17', '18', '19']

И это 8-9-10-11-12 в скопе с 17-18-19 мне не очень нравится. Делаю вывод, что условие - в чем сотояла задача для меня - "анклиар" (непонятно по нашему)

def hamdist(str1, str2):

     
        diffs = 0
        for ch1, ch2 in zip(str1, str2):
                if ch1 != ch2:
                        diffs += 1
        return diffs

def  Approximate_Pattern(Pattern, Genome, d):
       pos = []
       for i in range(len(Genome) - len(Pattern) ):
              if hamdist(Genome[i:i+len(Pattern)], Pattern) <= d:
                    pos.append(str(i))
       #return " ".join(pos)
       return pos

def count(Genome, Pattern, d):
    res = 0
    massiv = Approximate_Pattern(Pattern, Genome, d)
    print (massiv)
    for i in massiv:
        res += 1
    return res


print (count("AACAAGCTGATAAACATTTAAAGAG", "AAAAA", 2))

В итоге.. гармония была достигнута. в строке for i in range(len(Genome) - len(Pattern) ) надо было увеличить на единичку границы итераций в цикле.. те.е  for i in range(len(Genome) - len(Pattern) + 1). Получить в ответе 11 и квиз коррект. Аллилуя. Это благословение снизошло на меня в процессе просчета следующих заданий.. ) где тоже - коррект-коррект))) как хорошо 

Немає коментарів:

Дописати коментар