motifs.py

Created by schraf

Created on September 07, 2019

890 Bytes

Vidéo d’explication

Attention ! Depuis la dernière mise à jour de Numworks concernant la gestion des couleurs sous forme uniquement de tuples (par exemple (0,0,0) pour le noir et non plus un nombre), plusieurs programmes ne fonctionnent plus. Le programme ci-dessous fonctionnera sur votre calculatrice mais semble planter en ligne.

Recherche d’une séquence d’ADN en utilisant l’algorithme naïf (case après case)
Le motif du haut de taille 5 est trouvé sur le brin d’ADN à la 1511e case :


La séquence de taille 7 est absente du brin:


La séquence de taille 7 est présente à la 1870e place :


Algorithmes plus sophistiqués :


from kandinsky import *
from random import *

ACTG = [(0,0,0),(0,252,0),(240,88,96),(248,180,48)] # L'ADN est fait de 4 composants (ACTG) donc 4 couleurs
T=5 # taille de la sequence cherchee

def rect(x,y,l,h,c):
  for i in range(l*h):
    set_pixel(x+i%l,y+i//l,c)

def brin():
  for i in range(80*50):
    fill_rect(4*(i%80),20+4*(i//80),4,4,choice(ACTG))

def aff(m):
  draw_string(str(m),0,0)
  fill_rect(4*(m%80),16+4*(m//80),4*T,4,(255,255,255))
  fill_rect(4*(m%80),24+4*(m//80),4*T,4,(255,255,255))

def pixel(i):
  return get_pixel(4*(i%80),20+4*(i//80))

def naif(seq):
  m=0
  while m<=80*50-T:
    if all(pixel(m+j)==seq[j] for j in range(T)):
      aff(m)
      return True
    else: m+=1
  draw_string("ABS",0,0)  
  return False
  
def go():
  seq=[choice(ACTG) for i in range(T)]
  for i,c in enumerate(seq):
    fill_rect(160+8*i,5,8,8,c)
  brin()
  naif(seq)