Задание 1. Подсчёт нуклеотидов Реализуйте алгоритм CountNucleotides(dna), который должен подсчитать число оснований, входящих в молекулу ДНК, представленную строкой dna. Молекула ДНК представляется строкой, содержащей символы 'A', 'C', 'G', и 'T', соответствующие нуклеотидам аденину, цитозину, гуанину и тимину. Вход: Строка dna, содержащая описание молекулы ДНК. Дополнительные баллы предусмотрены за чтение входных данных из файла. Выход: 4 числа, представляющие количество символов 'A', 'C', 'G', и 'T' в строке dna. Пример входа AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC Пример выхода 20 12 17 21 Другие примеры Vibrio_cholerae.txt – полный геном бактерии Vibrio Cholerae. Задание 2. Подсчёт вхождений шаблона Определим Count(Text, Pattern) как число вхождений шаблона Pattern в строку Text в качестве подстроки. Например, Count(ACAACTATGCATACTATCGGGAACTATCCT, ACTAT) = 3. Обратите внимание, что Count(CGATATATCCATAG, ATA) равно 3 (а не 2) так как требуется учитывать перекрывающиеся вхождения шаблона Pattern в Text. Реализуйте алгоритм PatternCount. Вход: Строки Text и Pattern. Выход: Count(Text, Pattern). Пример входа GCGCG GCG Пример выхода 2 Другие примеры Файлы: PatternCount.txt – пример входа и выхода; PatternCount1.txt и PatternCount2.txt – только вход. Задание 3. Наиболее частая подстрока Назовём шаблон Pattern наиболее частой подстрокой длины k в строке Text, если на этой подстроке достигается максимум Count(Text, Pattern) среди всех подстрок длины k. Например, ACTAT является наиболее частой подстрокой длины 5 строки ACAACTATGCATACTATCGGGAACTATCCT, а ATA – наиболее частая подстрока длины 3 строки CGATATATCCATAG. Реализуйте алгоритм FrequentWords, который находит наиболее частую подстроку заданного размера в строке. Вход: Строка Text и число k. Выход: Все наиболее частые подстроки длины k из строки Text. Пример входа ACGTTGCATGTCGCATGATGCATGAGAGCT 4 Пример выхода CATG GCAT Другие примеры Файлы: frequent_words_data.txt – пример входа и выхода; frequent_words_data1.txt … frequent_words_data3.txt – только вход. Задание 4. Обратное дополнение При построении двойной спирали ДНК нуклеотид аденин (А) из одной нити всегда соединяется с тимином (Т) в другой, а гуанин (G) – с цитозином (C). Поэтому, говорят, что А и Т являются дополнением друг друга, так же как и G и С. При этом направление половин спирали является встречным. Анализируя код на одной нити ДНК часто бывает нужно понять, какому коду второй нити он соответствует. Для этого необходимо построить обратное дополнение к имеющемуся коду. Например, коду AGTCGCATAGT соответствует обратное дополнение ACTATGCGACT. Для получения обратного дополнения необходимо заменить все нуклеотиды на дополняющие, и изменить порядок символов в строке на обратный. Реализуйте алгоритм ReverseComplement(dna), вычисляющий обратное дополнение. Вход: Строка dna, содержащая описание молекулы ДНК. Выход: Строка, содержащая обратное дополнение к строке dna. Пример входа AAAACCCGGT Пример выхода ACCGGGTTTT Задание 5. Поиск вхождений Реализуйте алгоритм PatternMatching, который находит все вхождения шаблона в строку. Вход: Строки Pattern и Text. Выход: Все места вхождения шаблона Pattern в строку Text. Пример входа ATAT GATATATGCATATACTT Пример выхода 1 3 9 Другие примеры Файлы: pattern_matching_data.txt – пример входа и выхода; pattern_matching_data1.txt … pattern_matching_data3.txt – только вход. Оценка задания Задание 1. Подсчёт нуклеотидов - 10%. Ввод данных из файла для задания 1 - 5 %. Задание 2. Подсчёт вхождений шаблона - 20 %. Задание 3. Наиболее частая подстрока - 25 %. Задание 4. Обратное дополнение - 20 %. Задание 5. Поиск вхождений - 20 %.