← Catalogo
SPLC
PyJS

RNA Splicing

String Algorithms

Pagina originale su rosalind.info

Descrizione

Dopo aver identificato esoni e introni in una stringa di RNA, basta eliminare gli introni e concatenare gli esoni per ottenere la stringa pronta per la traduzione.

Given

Una stringa di DNA s (lunghezza massima 1 kbp) e una collezione di sottostringhe di s che fungono da introni. Tutte le stringhe sono fornite in formato FASTA.

Return

La stringa proteica risultante dalla trascrizione e traduzione degli esoni di s. (Nota: per il dataset fornito esiste una sola soluzione.)

Sample Dataset

>Rosalind_10
ATGGTCTACATAGCTGACAAACAGCACGTAGCAATCGGTCGAATCTCGAGAGGCATATGGTCACATGATCGGTCGAGCGTGTTTCAAAGTTTGCGCCTAG
>Rosalind_12
ATCGGTCGAA
>Rosalind_15
ATCGGTCGAGCGTGT

Sample Output

MVYIADKQHVASREAYGHMFKVCA

La mia esecuzione

08/24/2026 11:24:47

Input · dataset.txt

>Rosalind_9333
ATGACGGACAATCGATCTGTATATATAGGAAGATCCCCAGCACAACGATTTAAGTCGGTG
CGGAATCGATTCGGCTTCAGACAAATACCGCGTCTCTACAAAGCTACTATTCGGGATGAA
CCTTTTATATGAGGAGTCCTGATAGTACATACGTATCGGCGTGTCGTTCAAATGTACGGC
ACGTCCGCGGGCGGCAGGGTCGTGAACAGCGCTAAGCTTCCCCGGATTTTCGGTAGTGCT
AATTGTTGCCTCAGAAACGATAAAATAGGTTGGGGCCCAACCGGGTTCACTCTTCACGCA
GAGTTGGGTGTTATTGCCGTGGGGATATGCAGTTGCGTTCTCACGTAGATTGGCAGGCAT
ACCTTAGCCGTTGTTCCGAACATCGGGCTTCTTTCTTCTTACTCACCCCGATATTCTAGC
AGCCGTTAATTCACGGCTGTGCCCGCACGGGCACCATGCGCGCGCCCGAGGTGCGGAATT
CGACCACGATTCATTGTTAAAGACAGCATATCTGATCCTTGCGACGGACACTGTCGGTGA
TGATCCGCCGCGATGCGTGAAAGTCATGGACGTTTGCTAGGCTCAGGGTGTCCGAGAAAA
CCGTGCTCCGCGAACCCTGGCAGGTGTAACAGGACCGAGTAGTTTGTTTGCCGAGGATGC
TGAGAGAGTGGGTATCTCCCGAGTGAGCGGCGCCAGGGATTGTCCAGTGATACAGCATCA
GCTCGGATTGTACGCTACACTGTCCACTTGCACACATGCGCTCATAATACTCCCTCGGAG
GTAATAGGCGGCCATGCAGCAGAGGTTTAATATACTGTAATCTCAAGGCTAAATTCCAGT
ATTGCGCTATGTACAAAATCCCCCTGATAGTCATGTACATGGAATGCGCAAAACTCTTGT
AATTCCGGCGCGCCTGAGCCGGTGGAGACTCATTCAACCTCCTCGATCCGATGCATGCTA
GGTCACTTTATATCCCACGTTTTTCGTTTAGATAG
>Rosalind_4719
GGCCATGCAGC
>Rosalind_1411
CTGTGCCCGCACGGGCACCATGCGCGC
>Rosalind_5106
GGGTGTCCGAGAAAACCGTGCTCCGCGAAC
>Rosalind_2538
TTATATGAGG
>Rosalind_8662
TCACCCCGATATTCTA
>Rosalind_7868
GGGCGGCAGGGTCGTGAACAGCGCTAAGCTTC
>Rosalind_5833
GATATGCAGTTGCGTTCTCACGTAGATTGGCAGGCATACCTTAGCCGTT
>Rosalind_9133
GTCGGTGATGATCCGCCGCGATGCGTGAAAGT
>Rosalind_0872
AGTGATACAGCATCAGCTCGGATTGTACGCTAC
>Rosalind_1696
ACTCATTCAACCTCCTCGATCCG
>Rosalind_0014
TCATTGTTAAAGACAGCATATCTGATC
>Rosalind_1096
TATTGCGCTATGTACAAAATCCCCCTGATAGTCATGTACA
>Rosalind_9917
ACCGAGTAGTTTGTTTGCCGAGGATGCTGAGAGAGTGGGTATCTC
>Rosalind_9152
CAACGATTTAAGTCGGTGCGGAATCGATTCGGCT
>Rosalind_8173
TCAGAAACGATAAAATAGGTTG

Output · run_log.txt

OK
MTDNRSVYIGRSPASDKYRVSTKLLFGMNLSPDSTYVSACRSNVRHVRPGFSVVLIVAGPNRVHSSRRVGCYCRGVPNIGLLSSYAAVNSRARGAEFDHDLATDTHGRLLGSPGRCNRPSERRQGLSTVHLHTCAHNTPSEVIGRGLIYCNLKAKFQWNAQNSCNSGAPEPVEMHARSLYIPRFSFR

Esegui nel browser · Pyodide

Mostra il codice sorgente (problem.py)
#http://rosalind.info/problems/splc/

table = {"UUU": "F","CUU": "L","AUU": "I","GUU": "V","UUC": "F","CUC": "L","AUC": "I","GUC": "V","UUA": "L","CUA": "L","AUA": "I","GUA": "V","UUG": "L","CUG": "L","AUG": "M","GUG": "V","UCU": "S","CCU": "P","ACU": "T","GCU": "A","UCC": "S","CCC": "P","ACC": "T","GCC": "A","UCA": "S","CCA": "P","ACA": "T","GCA": "A","UCG": "S","CCG": "P","ACG": "T","GCG": "A","UAU": "Y","CAU": "H","AAU": "N","GAU": "D","UAC": "Y","CAC": "H","AAC": "N","GAC": "D","UAA": "Stop","CAA": "Q","AAA": "K","GAA": "E","UAG": "Stop","CAG": "Q","AAG": "K","GAG": "E","UGU": "C","CGU": "R","AGU": "S","GGU": "G","UGC": "C","CGC": "R","AGC": "S","GGC": "G","UGA": "Stop","CGA": "R","AGA": "R","GGA": "G","UGG": "W","CGG": "R","AGG": "R","GGG": "G"}
g = lambda s, i: table[s[i:i+3]]

def getMRNA(s):
   arr = [g(s, i) for i in range(0, len(s), 3) if g(s, i)!="Stop"]
   return "".join(arr) 

def getRNA(s):
   return s.replace('T', 'U')  

def lettura(filename):
    data = []
    with open(filename) as f:
        record = ""
        first = True
        for riga in f:
               riga = riga.rstrip("\n")
               if riga[0] == ">":
                  if not first:
                     data.append(record)
                  record = ""
                  first = False
               else:
                  record += riga
    data.append(record)
    return data

def main():
    data = lettura("dataset.txt")
    dna = data.pop(0)
    for s in data:
        dna = dna.replace(s, "")
    rna = getRNA(dna)    
    mrna = getMRNA(rna)
    print(mrna)    

if __name__ == "__main__":
    # execute only if run as a script
    main()

Soluzione JavaScript

Esegui ora, live

Mostra il codice sorgente
// RNA Splicing (Rosalind ID: SPLC) - soluzione JavaScript indipendente,
// non una trascrizione di problem.py: stessa logica (rimuove tutti gli
// introni dalla sequenza di DNA, trascrive in RNA, poi traduce filtrando
// via ogni codone di stop), riscritta in modo idiomatico per JS.
//
// Nota sul filtraggio degli stop: a differenza di prot.py (che si
// FERMA al primo stop incontrato), qui - fedelmente all'originale -
// vengono semplicemente SCARTATI tutti i codoni "Stop" ovunque
// compaiano nella sequenza, senza fermare la traduzione. È il
// comportamento reale di splc.py, non un bug introdotto qui.
//
// Contratto: riceve il contenuto testuale di dataset.txt, restituisce
// l'output testuale (stessa forma dell'output Python).
const TABLE = {
  UUU: "F", CUU: "L", AUU: "I", GUU: "V",
  UUC: "F", CUC: "L", AUC: "I", GUC: "V",
  UUA: "L", CUA: "L", AUA: "I", GUA: "V",
  UUG: "L", CUG: "L", AUG: "M", GUG: "V",
  UCU: "S", CCU: "P", ACU: "T", GCU: "A",
  UCC: "S", CCC: "P", ACC: "T", GCC: "A",
  UCA: "S", CCA: "P", ACA: "T", GCA: "A",
  UCG: "S", CCG: "P", ACG: "T", GCG: "A",
  UAU: "Y", CAU: "H", AAU: "N", GAU: "D",
  UAC: "Y", CAC: "H", AAC: "N", GAC: "D",
  UAA: "Stop", CAA: "Q", AAA: "K", GAA: "E",
  UAG: "Stop", CAG: "Q", AAG: "K", GAG: "E",
  UGU: "C", CGU: "R", AGU: "S", GGU: "G",
  UGC: "C", CGC: "R", AGC: "S", GGC: "G",
  UGA: "Stop", CGA: "R", AGA: "R", GGA: "G",
  UGG: "W", CGG: "R", AGG: "R", GGG: "G",
};

function getMRNA(s) {
  const arr = [];
  for (let i = 0; i < s.length; i += 3) {
    const codone = TABLE[s.slice(i, i + 3)];
    if (codone !== "Stop") arr.push(codone);
  }
  return arr.join("");
}

function getRNA(s) {
  return s.replaceAll("T", "U");
}

function parseFasta(testo) {
  const righe = testo.split("\n").map((r) => r.replace(/\r$/, ""));
  const data = [];
  let record = "";
  let first = true;
  for (const riga of righe) {
    if (riga.startsWith(">")) {
      if (!first) data.push(record);
      record = "";
      first = false;
    } else {
      record += riga;
    }
  }
  data.push(record);
  return data;
}

export default function solve(datasetText) {
  const data = parseFasta(datasetText);

  if (data.length < 2) {
    throw new Error("Input non valido: attesi almeno un DNA e un introne come record FASTA");
  }

  let dna = data[0];
  for (let i = 1; i < data.length; i++) {
    dna = dna.split(data[i]).join("");
  }

  const rna = getRNA(dna);
  const mrna = getMRNA(rna);

  return `${mrna}\n`;
}