Python
2019-05-10
Arkusz z zadaniem znajdziesz tutaj:
Matura_Zbiór_zadań_Informatyka
Repozytorium z danymi i rozwiązaniem:
Github
Plik dane_gen.txt zawiera genotypy 1000 osobników z galaktyki Madgen. Każdy wiersz pliku zawiera genotyp jednego osobnika o długości nie większej niż 500 znaków.
Każda linijka zawiera genotyp osobnika. W tym genotypie występują fragmenty (geny) zwane częścią kodującą i otoczone są przez części niekodujące.
Już na wstępie postanowiłem żeby traktować cały genotyp i kodujące geny osobno. Te zapisywane są kolejno w tablicach genotypes oraz allGenes.
Ta funkcja odpowiada za zwracanie tablicy genów dla danego genotypu. Cała zasada polega na tym, że wczytywany jest ciąg znaków od AA
aż nie napotka BB
.
Ważne jest to, że nie bedą brane pod uwagę ciągi znaków, które nie mają zakończenia. To realizują ostatnie linijki w powyższym kodzie.
Algorytm ten jest obszerny i skomplikowany. Dobrze by było gdybyśmy mogli go jakoś przetestować. W Pythonie nawet bez bibliotek jest taka możliwość.
Pozwala na to funkcja assert. Porównuje ona wynik z oczekiwanym rezultatem. Wykorzystanie poniżej:
Za pomocą zbioru (set) dodajemy kolejne gatunki. Zbiór zapewni to że będą się powtarzać.
Później w zbiorze dla każdego gatunku wyszukujemy ile jest takich samych gatunków (ta sama długość tekstu) w całej puli.
Występowanie w jakimkolwiek genie ciągu BCDDC oznacza mutację powodującą małą odporność osobnika na zmęczenie. Podaj, ile osobników spośród tych, których genotypy zapisane są w pliku, ma tę mutacje.
Za pomocą funkcji find algorytm jest dużo prostszy. Po prostu we wszystkich genach sprawdzamy czy występuje ciąg i jeżeli został znaleziony choć jeden to wychodzimy z pętli.
Wyznacz i podaj największą liczbę genów występujących u jednego osobnika. Podaj też największą długość genu zapisanego w całym pliku.
Najpierw iterujemy po tablicy genów i wyszukujemy, gdzie jest ich najwięcej i jaka to liczba.
W następnym kroku iterujemy już po wszystkich genach wszystkich osobników. Tym razem interesuje nas największa długość.
Genotyp odczytywany z materiału biologicznego może być odkodowany w kierunku od strony lewej do prawej lub odwrotnie: od strony prawej do lewej. Genotyp nazywać będziemy odpornym, jeśli czytany od strony lewej do prawej oraz od strony prawej do lewej ma dokładnie taką samą część kodującą. Natomiast genotyp silnie odporny to taki, który czytany od strony lewej do prawej oraz od strony prawej do lewej daje dokładnie ten sam napis. (Inaczej mówiąc, genotyp jest silnie odporny, gdy jest palindromem).
Pierwszy punkt sprawił mi trochę kłopotu z powodu tego, że geny oddzielone są od genotypu.
Rozwiązaniem na to jest wyszukiwanie odwróconych genów w genotypie. Jeśli znaleziono tyle samo odwróconych genów co tych normalnych to genotyp jest odporny (immune).
Fragment na genotyp silnie odporny jest dużo jaśniejszy bo wystarczy sprawdzić czy jest palindromem.
Jest to ostatnie zadanie z arkusza i zdecydowanie parę razy przysporzyło mi ono bólu głowy. Wszystkim zdającym maturę z informatyki życzę powodzenia jak i 2019 tak i w przyszłych latach :)
Dziękuję Ci za przeczytanie tego materiału 😀 Jeżeli spodobało Ci się to o czym piszę, możesz sprawdzić więcej materiałów na blogu lub udostępnić znajomym. Będzie mi bardzo miło 😊
Jestem młodym programistą, który dumnie dzierży wiele pasji takich jak bieganie czy piwowarstwo domowe. Jedną z nich jest także programowanie i o tym właśnie zamierzam tutaj pisać.
Zachęcam Cię do odwiedzenia mojej strony na Google Play store i sprawdzenia wszystkich moich aplikacji.