← Catalogo
REVC
PyJS

Complementing a Strand of DNA

String Algorithms

Pagina originale su rosalind.info

Descrizione

Nelle stringhe di DNA, 'A' e 'T' sono complementari tra loro, così come 'C' e 'G'. Il complemento inverso (reverse complement) di una stringa s è la stringa ottenuta invertendo l'ordine dei simboli di s e poi sostituendo ciascun simbolo con il proprio complementare (es. il reverse complement di "GTCA" è "TGAC").

Given

Una stringa di DNA s di lunghezza al massimo 1000 bp.

Return

Il reverse complement di s.

Sample Dataset

AAAACCCGGT

Sample Output

ACCGGGTTTT

La mia esecuzione

08/24/2026 11:24:47

Input · dataset.txt

AGACCTAGATTAGGACGCATCCCTGGCACGCCATAGCTGGACGTTCTCTTGAACGGTAACATGCGGCGTATTATATGGCAGTCAGCGTAGCGGGCGAAGCGTATCACGATAGATAAAACTATCTTGCGGCCATTGGAGTTCCGATCCGAAATGATCGCTGTAGAAGCTACTCTCTAGAGGCACAGGGCTGTGAACAATCCACGCGGCTCTCAGCCAAGTCACTATTTGGCTATTAGAACTAATGTAGAGCTTGGCAAAATTCATGAAGATGTCTAGAGCGGTAGTGCCTTACGCCTCGTTGCGTTCGACGCTAACTAGGTAGACTTGACACTCGGGATACCGGTGTCCAGATATTACTGCTGACAGAGGATGGGCGCGCCAATTCCTATACCACCAGATTATTCTTCCTTCTTTGATCTATATCCAAGTAAGGAAGCTGCCTGTCCAGCAGTCACTTACGGGCTTAGCGTCTAGGTCTCTATTAAACTAAGAGATGTTTGGTCCTGTACGATTTCTCCCCAGTGCTGCACACTCGTGCAGTAGCTCGCGTGTTTATGCAGCGGGACGGGCGACTTTTTTGAACCCGGTACAAAGAAGATCCGGGACTCCTGGGGCGCCAAGTTCGCCCCAAGCACTTAGTGTTAGTTACTCGAATGTGGTGCTACAATGTCTCGGCCCAGTGGATTGAGCCATATCGTGTTCCGCGTATTTACGCCCCGAACTGAGCATTTACCAGCGTCCCCGCTGAAACCTTTCGACACCTGAAGTAAGGGTTCCGAGATTTACTATTGTCTACAAGGCCCACTCATTTTCTCTACCTCCTATGCGGATCAGTCTTCCTCCGTAACGAGGAAATGCACG

Output · run_log.txt

OK
CGTGCATTTCCTCGTTACGGAGGAAGACTGATCCGCATAGGAGGTAGAGAAAATGAGTGGGCCTTGTAGACAATAGTAAATCTCGGAACCCTTACTTCAGGTGTCGAAAGGTTTCAGCGGGGACGCTGGTAAATGCTCAGTTCGGGGCGTAAATACGCGGAACACGATATGGCTCAATCCACTGGGCCGAGACATTGTAGCACCACATTCGAGTAACTAACACTAAGTGCTTGGGGCGAACTTGGCGCCCCAGGAGTCCCGGATCTTCTTTGTACCGGGTTCAAAAAAGTCGCCCGTCCCGCTGCATAAACACGCGAGCTACTGCACGAGTGTGCAGCACTGGGGAGAAATCGTACAGGACCAAACATCTCTTAGTTTAATAGAGACCTAGACGCTAAGCCCGTAAGTGACTGCTGGACAGGCAGCTTCCTTACTTGGATATAGATCAAAGAAGGAAGAATAATCTGGTGGTATAGGAATTGGCGCGCCCATCCTCTGTCAGCAGTAATATCTGGACACCGGTATCCCGAGTGTCAAGTCTACCTAGTTAGCGTCGAACGCAACGAGGCGTAAGGCACTACCGCTCTAGACATCTTCATGAATTTTGCCAAGCTCTACATTAGTTCTAATAGCCAAATAGTGACTTGGCTGAGAGCCGCGTGGATTGTTCACAGCCCTGTGCCTCTAGAGAGTAGCTTCTACAGCGATCATTTCGGATCGGAACTCCAATGGCCGCAAGATAGTTTTATCTATCGTGATACGCTTCGCCCGCTACGCTGACTGCCATATAATACGCCGCATGTTACCGTTCAAGAGAACGTCCAGCTATGGCGTGCCAGGGATGCGTCCTAATCTAGGTCT

Esegui nel browser · Pyodide

Mostra il codice sorgente (problem.py)
stringa = ""
filename = "dataset.txt"
with open(filename) as f:
    riga = f.readline()
for i in range(len(riga)):
    key = riga[len(riga)-1-i]
    if key == 'G':
       key = 'C'
    elif key == 'C':
       key = 'G'
    elif key == 'T':
       key = 'A'
    elif key == 'A':
       key = 'T'
    stringa+=key
print(stringa)

Soluzione JavaScript

Esegui ora, live

Mostra il codice sorgente
// Complementing a Strand of DNA (Rosalind ID: REVC) - soluzione
// JavaScript indipendente, non una trascrizione di problem.py: stessa
// logica (complemento inverso: A<->T, C<->G, poi ordine invertito),
// riscritta in modo idiomatico per JS.
//
// Contratto: riceve il contenuto testuale di dataset.txt, restituisce
// l'output testuale (stessa forma dell'output Python).
const COMPLEMENT = { A: "T", T: "A", C: "G", G: "C" };

export default function solve(datasetText) {
  const riga = datasetText.split("\n")[0].trim();

  if (!riga) {
    throw new Error("Input non valido: attesa una stringa di DNA non vuota");
  }

  let stringa = "";
  for (let i = riga.length - 1; i >= 0; i--) {
    const base = riga[i];
    const comp = COMPLEMENT[base];
    if (!comp) {
      throw new Error(`Input non valido: carattere "${base}" non è un nucleotide (A, C, G, T)`);
    }
    stringa += comp;
  }

  return `${stringa}\n`;
}