Een DNA sequentie kan voorgesteld worden door een string die enkel bestaat uit de letters A, C, G  en T. Het invers complement van een DNA sequentie wordt bekomen door de volgorde van de letters in de string om te keren, en daarbij elk voorkomen van een A te wijzigen in een T (en omgekeerd) en elk voorkomen van een G in een C (en omgekeerd). Zo is het invers complement van de DNA sequentie AGCTGCT bijvoorbeeld AGCAGCT. Een palindromische sequentie is een DNA sequentie die precies hetzelfde leest op de complementaire string. Zo is het invers complement van de DNA sequentie AATGCATT gelijk aan de oorspronkelijke DNA sequentie, en is deze DNA sequentie dus een voorbeeld van een palindromische sequentie.

Opgave

Schrijf een bash script palindroom met twee functies.
  1. Schrijf een functie omgekeerd waaraan een DNA sequentie als argument moet doorgegeven worden. Deze functie moet als resultaat het invers complement van deze DNA sequentie berekenen.

  2. Gebruik de functie omgekeerd om een functie langstePalindroom te schrijven. Aan deze functie moet een DNA sequentie als argument doorgegeven worden. De functie moet de langste palindromische deelsequentie van de gegeven sequentie als resultaat teruggeven. Om de langste palindromische deelsequentie te vinden, kan je alle mogelijke deelsequenties van de gegeven DNA sequentie overlopen, testen of het gaat om een palindromische sequentie, en uiteindelijk het langste palindroom overhouden. Om alle mogelijke deelsequenties van een gegeven DNA sequentie te doorlopen, kan je alle mogelijke startposities doorlopen en voor elke mogelijke startpositie alle mogelijke stopposities doorlopen. Op die manier vind je elke deelsequentie als de sequentie tussen elke combinatie van mogelijke start- en stopposities.

Het script zal altijd opgestart worden met twee parameters. De eerste parameter bevat de naam van de functie die opgeroepen moet worden, en de tweede parameter de DNA sequentie waarmee gewerkt moet worden. Als de eerste parameter geen geldige functienaam is, moet de foutboodschap ongeldige functie uitgeschreven worden naar stderr en moet het script beƫindigd worden met exit status 1.

Voorbeeld

$palindroom omgekeerd AAGGCTCGAT
ATCGAGCCTT

$palindroom langstePalindroom GGGCCTATTGACTTCTTATCGTAGCCGGCCTTGTTAGTAGATGAGAATCA
GCCGGC

$palindroom ACT
Ongeldige functie