← Catalogo
CONS
PyJS

Consensus and Profile

String Algorithms

Pagina originale su rosalind.info

Descrizione

Data una collezione di stringhe di DNA della stessa lunghezza n, la matrice di profilo è una matrice 4×n dove ogni riga (A, C, G, T) conta quante volte quel simbolo compare in ciascuna posizione tra tutte le stringhe. La stringa di consenso si ottiene prendendo, per ogni posizione, il simbolo più frequente secondo la matrice di profilo.

Given

Una collezione di al massimo 10 stringhe di DNA della stessa lunghezza (al massimo 1 kbp) in formato FASTA.

Return

Una stringa di consenso e la matrice di profilo per la collezione (se esistono più stringhe di consenso possibili, se ne può restituire una qualsiasi).

Sample Dataset

>Rosalind_1
ATCCAGCT
>Rosalind_2
GGGCAACT
>Rosalind_3
ATGGATCT
>Rosalind_4
AAGCAACC
>Rosalind_5
TTGGAACT
>Rosalind_6
ATGCCATT
>Rosalind_7
ATGGCACT

Sample Output

ATGCAACT
A: 5 1 0 0 5 5 0 0
C: 0 0 1 4 2 0 6 1
G: 1 1 6 3 0 1 0 0
T: 1 5 0 0 0 1 1 6

La mia esecuzione

08/24/2026 11:24:47

Input · dataset.txt

>Rosalind_1616
GCGACTATTTCACTAGCTACAGTCGACATCGGTCCGACTGCATGAGAGTTGCGGAGTCGG
CTGTTCCGGGCGACCCTAGGATGATGGAGTTGGGTGTGAGGTTAGGTGACTACGGTCCAT
CGGGGAGCCGGCGCAGATACCTTGGATTTACTCGGGCACGTGGCTCCGAGTAAGTTTATA
GCAATGTTATTCTTCAGTACCTAGTACGAGCCACTAGTATGGCAATTGCGGTTTAGCTCC
ACCACCCCGCCACTGGAAACGTAATCCAGCCATATCTTTATATTTACGCACCCCTGTTAA
GGAGCTTACCCGTTTGTAACCGAGTGTGATGAAGCTAGTAGACGGTTGCTTGTTTAGCTC
AGTTTTCATTATAGGTTGGTCATAGACTTAGTTTTTGAGTGTATCCCCTCGTCGTCCTAT
GCACTTTGTCTGCAGCATCACGGCTTTGGGTACTCGTATTGGATAGGAATCAACAGGTCA
TAGCTGGACTTACGACGCCCAACAAATCGTTTGTATGAGCTCGGCCTCTAATAGTTTGGT
AACGCACTAAGTGAGGGGCTCGGTCAAAACCCAACAGAGTACGTCATTACTCTTTGGGAA
ACTTTCGAAATGGCATGAAAGGTTGTTCTGGGAGTCAGGCTCCTTTCACAGGGAGCCGGC
TAGCCGTACAGACATACTTGAGGCCTATTAGGCAGACTGTCTTGCGTGTGATGCGCTGCT
CGCAAATCTTGGTGGACTGACTAGGAGGAGATCGTAGGATTAGATTTTTCACAGACAATC
ACAGACCCTACTCACTACTACGAAGGTGTAGGGTGAATCTAGTCTCCACACGTCGATTAA
AGCGGGATTGCTATCGTATCGCGGGCCACCAGCGGCAAAGGGAAAGGCCTCGCTTCTTGC
T
>Rosalind_5871
ACAGTAACCGTCTACGTGTTATCGTCTTAACCTCAGACTTCCGAGGGCAGGTCCAGAGGC
TAAATTCGGGCGGATTGATCGACGGGGGTATAAAGACCTAGGATGCCGTCGAGCGGCTTA
ATGAAACCGACTCCACTTTACTTGGTTAGTTTGGAAAAGACAAGGATGAATCTACCGGGC
ATTATCGACGAGGGTCAGCCAGATATTAAGGATTCTGTCGTTCCCTCGGCGATTTAATTC
TATACAGGTGTGTATTTTTACTTCACAGTAGTCAATTCACGAGCACCAGTCAATAGTTTC
GTGAAAAGTCTGAACTGTCCGGACAGAACTTCGACACCTAGGTGTGTCGAGATAAACAGT
TAGTTCGAGCCACCCAATAGTCTCGGCGAACGGCGGCACAACGATGGTGGTCAATGGGGG
AACACAATCAAGTTACCTAAGTTTAATAGAGTTGATATGCCCGTAACACTGTGGGGCAGC
ATAGATCAGGTATCCGGGTTAAGCCTACTGCCCTAGCGCTCCAAGGCACGCGCCCACGGA
ACTTCGGCATACGTTATGTACAGATAGTGGAGACGGTCCTGAATGCATAAAGCGACCGCA
TGGTGATTGCTGGCAATCTGATCCTCCGGAGGGCACGCCAGCCCGTGCTCACACTTAAAG
GGCGCCCAGCTAAGCAGACATAATCAGGGACCACGCGCAGTCCGTGGAGGGTTCTACCAA
CATCGTGAGCCTAGCGGGTCTAGAATTCACAGTCACCCCGTCGAAGGCAGCCACGCAGCA
CAGAGGAGAGCGGTTAAATGTCGTCTGCTCACTAGAGCTGAACACGTGATCTCTACCTCG
GAAGTTTATATAATATCGGCGCTCAACTTGATGCTTGACCGTACACCGGCGTGTATACAT
G
>Rosalind_0518
ACGGTGGGATAATGTCCTCTAATCGCCTCGCTGTCCTAATGACCTCTATTGATTCCTTAA
GCTACACCTGAAATAGTAAAGGGAGGTGGAGTTAACGGAGCACCGCAAGTACGCGCGCGC
ACTGCGACGCACCCACTACTACCGCCATTGTCGGAAAGCCTCCCACTTCAAGATACGGGC
GCCACAAAGTGATTTGCTTTACGCAGTCTGGAAGAGGCCGAAGGCCCGTTCTTGGGCGTT
CCGCACGCATTGGAGACAGTGCCCAACCTGATACCAAGCCGCCCGGATTATCCACTAAAT
CTTGCACGCGAGGCCTCCGGGGTGGCTGGGACCCTATTTAGTCTAGCTGACTGTACGCCC
TAGGTTCGTCTAAATCAAGTATTAAGAAGATTTTCGCGGACTCAATGCCGGTAGGCGCTG
ATAGCCAGATGGATGCAGTTCCCGTCGATTATTGGTGATAGTCCTCCACAAGTAGAATCC
CCAACATGCCGACCCGATGATCGCACACACAGATTATGACCTCGACGTCCATTAGCCGAG
ATATTACGGGCCAACCTAAATAGCAATTTACCCATCTTCACCATAGCAGCGACACTTAAA
TGGCCTGCCTAGATTCCATAGGTAGGAGAGCAAACGACGTGACGTCGCAAGATTTTAGGC
ACTTGTCACGTTAACCGACACTATGGTCGAGTTGTCCCTGGAAACAGTCTGAGATTCCGA
ATGCTGTACCGATGAGATGCTGAATAACTTATGTCTTGCAAGTAAGGCTTTTGTTATGGC
GGGCTGTCCCGTTGGGCGGCGAATACGTTGTGTCTGTGCCGGGTGATATTAATCCTTCCG
TGTTTGTGAATACGAGTCGGCTTAATCCCAATAGACTCTGGCTCTGACGTTGCAGAAGCG
T
>Rosalind_8434
CGTCTATGGCGCTAGGTATACCGATTTGGTGTTGCTGGATACCCCGTCTACTGCACCGTC
ACAGCAGAACACGTTAGACCTCAACGCCCGTTCAACTACCCACATATCTAAATCTGGCAG
GCCGGTAACGGACGAAGTATAGCCCGGGTTACTGTTACATTCCTTTACCAGTGCCAGGGG
CTGTGACGAGTGGAGCTTTCCTCGACATCGGGTTGCATGATGGGTACCCGGGGGGCCCAA
TCTCGGACATTAAATGTACTGTAGGTGGACCACAAACTCCGGTATAGATCAATTTAGCAT
GGACAGGCCGTTGACCATGATACAGTCAATGATCACACCACGTAGCCCCCTAGCCCCGAT
AGCACTAGCTCAAGCTTGGGGTGGATTGCGCTGGTGGCTATGTTGCTAAAAGGTCATAGA
ATTGGAGAGTGCAACAAGCAGCTTCGTGATAGGAGCAACAAATGTATTCGCCCAGGCTCT
ACAACCGCTCGCATCTGTTTTTAGCGTCTCGTTTGGGTGGACTAGGTGCAGCCACTACGC
CAGCGTTTTAGTCTTGAATGTCGAACAACGCGTGTATGTCATGATCATTGATGGGGTGGC
CCCATAGCGTGGTCCGGTAACCGCCTACCTGCCGAATATGGCTCCGGTCCCTACCCCTGA
GGTCGAATGCTGTAACATTTATTAAATTTCACTAAAGGTCTGTTAATTAGTGAGTTCCCT
TCGGCCTGGACGGGACTTCGGGCAATTTAGAGGCGAACGATATCTCCGCCTCCCGACGAG
GTTATAAAAACTGGGTCAAGACCGCTCCAGCACAAAATGGCTCTTAATAACACAATTTTC
GCGTCGTTAACCAACGAGTGGTAGCAGAATGAAGGCACAGGGGCGTCGGCTGTCAGACTC
T
>Rosalind_9672
CTGCTAGCATCGTATGGCAATGCTAGAGACTATACCTGGTCTGGTTATGAAAGACGTGTT
CAGGCTCCTTATCTATATTGTCAAGAACTAATGACCCCACGGAAGATGGGGCATGGCGAT
TCTTCGACCTGGACGCTAAGGGCCGCTAAGGGGTTTTTGCACCCAGGACCTGAATGTAAT
ACCCTCGATAGGACATTACTGCTCCGGAATCTCGGGGTAGATCGGGAATAAGTTCCAAAG
ATTCCAGTAGAAATGAGAGCTCCCTTGTTTTCATTGTGACTATAACACGCTCAATGGTGC
GCTCCTACCCATCTCGTGTTGTTCCATGAAATATTGCGATTACTACTCTCTGAACGATCA
TGTGATTTGCCAAACAGGGGGTTAGATGATAATACGGAGAGGTGACCTGCCAACGGTCGA
TGCTCGTGTAATCAACTCTAGGTGAGTACATGCAGCGCCTATAGACATATCGTTCCCCTA
TCATGTTCGGTGATAAGGTCCATATCATAAGCCGCGAAGAGTCTACGACCTAACCGAAGG
TGAACATGGGAAAGCACGCCAACTGCCAGCTCCTGGGGCAATGTTGTGTCGGCGTTCTCA
TCTCATAAGTAAGAGTTCTGCTGGTCCTAAACGAGTGGCTTGCCCATATGGCTCGTGGGG
ATTGGTTCATACAGCGTGTGTCAAACAGACCAGACTACTCAGAAGCCTTAACCAGCTGCC
CTGTGGTTGCCTTGAGCCTTGTGTCTGAATTGCTCCAAAAAGTGAGGCGATCTTGCTTAA
GTCCAGTCAGTGGCAACACACCTCGCGCAATCGCTCAAGTCGTAGCTCATGACTTAGCCC
GGAAGGACTTGCTTTTGTTGGCTTTCGGCAATGTGCCTGTAGGTATGGAGGATTTGCGCC
T
>Rosalind_0702
CAAAGGGCTCCGGTACAGCTCTCACGCCTACGAAGGCACGATGTGCAAACATTACGCGGG
CTGGTGCTGGAGTCCAATGTGCCTTCTTTACCTGCCACCTACTCTTCCCTCCTTTGACCA
CGATCGCTGTCGCGTTTCGCGAATGGTAAACGCGGGGTACGTCGTGGTAAGACATGCGTC
GCCGGTAGATCCGGGGTCGCCCCACCCAAATTTATAAACCACGAGACTCTATGCGTAACG
GAGCCACTTCCACGGTGGCTCTTATGCTCGTTCTTCAACTCCCATTCGGAAGTAGTTGTG
GCTCTAAGCAGGCCGAACTTCAGAAGCTTGGAGACCATCAATGCTCGTGTGATGTCTTAA
TGACTCGGTATGCGCAGGGGTTAAATTCCATAGCGAGATTGAAGTGGATCAAACCATTTT
TCCCAAGAACCCCTCTGAAACTCTTCGATCGATCACAGCTTCCTGCGATGGATTTCCAGT
TAACCTGGAGTTGGAACCTGCAGGAAGCTGAGTTGGACCCGATATGTACCATAGGATGAT
CAAAGCGTTAAGCCTTATTGCATAGTGGTGTTGGCCCAGCTCTGGGATCGAAGAATCTGT
AGATACACTGTTCCGGAGGGCCAATGAGTGTCACTAGGGTACCAAAGAACCGAATTCCCC
AGCGGATTAAAAGAGCAGAGAGCCTGTAGACACGTGAGTGTAAGTACTATGGTTTAAACA
TACATCATTGAGACAGCAGCACGGTAGGAACCTTCGCACCCTAACATTATCAGACTCGCC
GCAGGATCATGCTTGGAACTACCTGTCCTTGCCCTCAGACAACCGTCTGGTGACCCGTCT
TGTTGGATGAGACCTGAGAAGGACCCCCCGAAACTTGCACCGCGGGGAGGGACATGATTG
C
>Rosalind_9627
TGTACATTGGCCTTGCGATTTGACATTATAGGGAGAAGTCCAGAAGCTCGTACGAAGCGC
GGACTGGATCGATGCCAACTACCAGATTTCGTCCAGAGTTCAGTGACATATGGGAGCATC
TGGGAAGCGGAAGAAGCCCCAATAGAACGTTGGTGTGTGTACATACCCACTTCGCATAAT
GCCTTTAATTATTTAACCATATAAGTATCTCTGCTTACATAATATACAGACCTGGTCTTC
ACCGAAACCGGGCTTCCAGCACGCTAAGATTGATGGGGGATACTGTGAGGCCGTTGTCTA
CGAGCCCGTCCGCGTAGTTCCAAGTAACTGTTATACTACTCTTGCTAGGTGAATGACCCA
CGCAGCTGATACCACCAAACACTTTGCTATCGTGCCATGTTTGGACATGTGGAAATTGAC
GCGTTGTATCTAATTTTAGAGGTTTACGAACGGAAAGTGATTTGATAGACTGCGCAACCC
GTTCCCTCGATCTCGAATGAAGTCCATATCCGTTTCTGCAACCCCGCGCAGGCACAGGTA
TTGATTAATTTCAGTTTGCCCAGAATCCCCCATGAATATACTAACTCTGAAACCCTTGAG
ATCCTCACTGTTTCGATAATGAGGTGAAAGCTCGCTACGGGGCGCGGCGTATACACATGG
ACCAGAGAAATATGGGGTCGATGTGCTCCAGTTGTTAAAAAGACCGGGACACCATTCCTA
CTTTGGGACCCGCCGGTAGATTAAAGTTGCGAGAGCCGGATAATAATAGTCATGGCCCCG
CGACTAACGGGACGCGGTTTCTTTTGGTTGGTTACATGGCACTTGCAGTTCGATGCTAGA
TTTTGCTGCAACGTGGGCCCATAGCAAGTCTTTATCCGTCTGCTTGGTGGGAGGCAAGTT
G
>Rosalind_9081
CCTCCTAGATCAGGACTCACGGTTCACGGAGGAGTGTACCTTCCCTGCCTCAGCTGCAAC
TTCCCCACACGATGCGTGCGGCTGCATTCACCGACGTCCAGTTACCCTATAATGCGTGGG
TGATCGTGACTACGAAAGACCCGTTTAAACTTGGGTGGAGTTTTGCTTCCGAATCACGTA
CTATGTCGTTCGGTCTTGTATGGAAGAGTTATCGCGACCCGCGGTCGCACCTATCAACAT
GAAACCTGTATAGGTCGTCTTTTCAAACGTCAGGGACACGCGATGAATTACTATTGGGTT
GATTCCCTGAGGGCGAGACCGGGAAACTTCCAGCTGAGAGCTCATATAGAGGGTCAGGGA
ATTACTACCTTATTCGATCCCTGAGCGTTCGTTTAGAAGACAGTCAAACGACGGGTTCAA
CATATCCCTGCCCAAGGGGTTTCCGTAAATGGTTCAGCAGTACGTCACCGAACCTCGTCA
CGGAAAGACTAAGACCGTTATAATCCTCAACCGACTTGTTCGCTCCTTTGGCCGGTCGTC
GCCTTTTAATTACAGTCGCTCCGGGTCCATAGGTAGCATCAAAAGCTGTTCCAGCTACAA
ATACGTATACCTACACTTCAGTTTATTATGAACGTCAAACACGGGTTCCTTGAGCTCAAT
TACTGTACCGTGTAGGCTTTCGCGCGGCAAACTCTCCAGTACCTTTCCGCTTATGATGGC
TAGAAAATACACACGGAACGTATTGTGCGGGACAAACTGGTTACGGTGAGGATACAGTGG
TGCTCTATAACCACACAACTCGATCAAAGTGGGTTTGTAGGCCACACTACACTATCTGAG
GAACATAAGCTCAATAGAGACACCCAGTATCCAGGAATTTCCGCCTGGTCCACCCCATTC
A
>Rosalind_3202
AGACTGTCTAGGTCACATCCGCTTCAATTCCATACTGAGTTCGAAGGGTATAATTGAGCC
ATCACCAGTCAAGTAGCGTGGTAGTTCCTCTAGCGAGTGCGGAGGCGCAGCCTCTGGATA
TCGGCCTGCACTTGGAGTGTACCGTCGCTCCTCTCGGGTTGTCCACTTCGTAGGGTGCTG
GAACTGACTCTGGAGGCTACCGGTGTCCTTCGAGCGGAACGATGGTCCCAGATGTCCACT
TCATGTGGCGAGCCTTGGTGTAGAGGCGAGGTTTAACCTTTGCAATTGGAATCGATTGCA
CGCGTAGATTAAGCCAACGATATTGGGATTTGATTGAGACAAATGATGGAATAACGTTCC
TAGTCAGGGCCTTAGACCATCCAATGTATGCAAGTTCTGATAGGAGCCAGCTGACCCCTT
TGCTAACGTCCTCATGATTCTTGCTTCGCCACTTAATTCACGTTTCCTTTGAGCATATCT
GCCCAGATTTGTGGACCTTAAACAAGAACTTCGATTTCCGAGAGATTCATTTATACACGT
ACTGCTAAGGCCTCCACTTGGTCCATGCATAGATAATTGCCTAAGGACATTGGTTCCCCT
GCTACTTGCTAGCCTAACTAACGTGGGGGATCGGCCGATGATACGGACCGGCACACCTTC
AGACATGGATTCCTGCGTAAACGCGTAGGTTTGAGCCATTTAGTAAGAAAAGGGTCATTT
TCGTATTACTGAAGCGCTTGCCATAGGAGACGACAAGTTATCGGGGACCGACTCACATCG
GCAAACCAAGTGCACGTCTGAGTTCTTCGGCCAATGTGATGTCTTATAAGGCCGCCACTG
CGAGAGTTTAATGTACCCAGACGATACTTCGGAACTCGATTGACATCATCGTTTTGTAGC
G
>Rosalind_7110
AATGAGACTAGAGACTGATATCTTCTCGATCAGTATTTCCCGGGGCACGCTCGAGCGTTC
TGGCGTGGTAATGCAGACATGGCCGCACGGGTCGAGCCTTGATAACACCGGGAGAAGGTA
TCTGATACTGGTCAGAGTTGGAGGAGATCGATGGTCCATAATGGGAGGAGCATACCACAG
GGTACTCTCCCATCAAAGAAACACCCCTATCAGGTGATCTTTTCCATGTTGATTTCCTAC
CAACCTGTGTCAGTTCAGTTACAAGGGTTCACACGGGACCAGAACTCTCTCTAGCCCCTG
CGGTTTTATGGCTAATCGGTACCATTAATCACGAGTACACATTCACTGGAGCATAGGCGA
CCGCCGGACTCTAACCCAGATAAACCAAGCAGTCAACTGCGCCGGCCGTAGCCCCGCCAC
GAAACTATCAGTCCACGTCGCACATGCGACACGAACTGCTCTACACTGGCCTCCTAACGT
GGAAGGCTTATTTTTCGCCTTGTGAGACGTACATCACCTAGCGTGCGAGTCTCGGCCGGA
GGAGCTTGCAACGCCAGCCACGTGTCCACTTGCACGTGAATGTAAATGTGCCTGACGGCA
GTAGAGTGTTGAACAGTACTCCTGAGGCGTAATATATTTCACGTAGATCCCTGGCGTCTC
GTTTTGTGTTACGCGTCCGACCCGATTTCTACTGATTTGGGTAATCTCAGTCGTTTGTTC
TAGCCCCATGAAAGCGAGCGAGGGGTCATCCGTACCAGGACGCCATGTCGCCGAGGAGAG
CAAACCGGGTATCGGATCACTATCAGTTACCTGTGGATTTCGTTGAGTACTTTTAGTAGT
ATTTTCTTAGTACCCAAAAGTTTTTCTACCTTTTGGATAAGCGTTTGTAAGGCATTTATT
A

Output · run_log.txt

OK
ACTCTAACTTCATAACTTTTAGTTCACGTACGTACGTATTCAGGAGACTTGAGCAGTGGCCTGACCCGTGAAGTCGAATGGCCAGGTCTATTGAAGTCACGATAGCCCATGATGGGCCTATCGGCGACCGGTCCAATTACACCGGCTATTTTGGGTGAGCTCCCACTTAATAAACCGGTCGCCATTAATTTGGTGATTACCCACATCAATCTAGTGGTCTATGGCACGCTGTTTGCCTACACTCCAGCTGTACTTTGATTGTACTACGTCCTATTATGCCTACATTCGGACCATTGTTTAGGTGCAAGCCAGGCCAGTGCGGAATGTATTGAAATCAGAAGTCGGCTGGAGAATCAGCCATGGTTTGGTTCAAACAAGGGCTTAGGTTTACTTTTGGAGAGTGGACCCTGGTAGCCTCATGCCACATGTCGGCAACATCACTTTTTTGAAAGTAACGACTCTATACCACTCACCGGCTCTTCACCGGACTTATGACGTTAAAGAAAACTTCCGTTGTGCCCCCGCCTACAATCGCTCGGTAAAGCTTTAAACGATATGCACAGAATCAACCGAACATAGAATAAGGTTTCACCGTTCGAAACTCTTACGTTGGCAATATAGCTTTGAGTGGCAGTCAGGCGCCCGGGCCCGGACTTCGGCAGCCGTTAAATAAAGCGTTGAGGCCTTTGAGCTATCCCTGTAAGTAGTAGATGATTCCCATAGAAGTATCCGAGAGCTGGTTAAATGCAGAGCCCACGGATAGAAGTCAGCCTCGCAGCGGCAAACACAGCTCGGGAATGCCTTCTGCTGGCGATAATGTAGCTGATTATCGTTACTTCGGGATGGTTTATAATCGAATGGCTGCACACCATAGGCACAGGGGCATGGGCGGCTTGATTCT

Esegui nel browser · Pyodide

Mostra il codice sorgente (problem.py)
from collections import defaultdict


class Contatore:
    def __init__(self):
        self.__totale = 0

    def add(self):
        self.__totale += 1

    def saytotale(self):
        return self.__totale


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 columns(matrix):
    for i in range(len(matrix[0])):
        col = [row[i] for row in matrix]
        yield col


def max_symbol(matrix):
    cols = columns(matrix)
    for col in cols:
        symbol_count = defaultdict(Contatore)
        for symbol in col:
            symbol_count[symbol].add()
        yield max(symbol_count.keys(), key=(lambda k: symbol_count[k].saytotale()))


def main():
    matrix = lettura("dataset.txt")
    print(''.join(max_symbol(matrix)))


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

Soluzione JavaScript

Esegui ora, live

Mostra il codice sorgente
// Consensus and Profile (Rosalind ID: CONS) - soluzione JavaScript
// indipendente, non una trascrizione di problem.py: stessa logica
// (parsing FASTA multi-record, poi per ogni colonna della matrice
// prende il simbolo più frequente), riscritta in modo idiomatico per
// JS.
//
// Nota: problem.py stampa SOLO la stringa di consenso, non la matrice
// di profilo (righe "A:", "C:", "G:", "T:") che il problema Rosalind
// CONS richiederebbe per intero - qui è riprodotto fedelmente lo stesso
// comportamento parziale, per coerenza con l'output reale registrato.
//
// Nota sui pareggi: in caso di parità tra due simboli nella stessa
// colonna, Python sceglie il primo trovato secondo l'ordine di
// inserimento del dict (cioè il primo simbolo incontrato scorrendo la
// colonna); qui uso una Map, che preserva lo stesso ordine di
// inserimento, per garantire lo stesso risultato nei pareggi.
//
// Contratto: riceve il contenuto testuale di dataset.txt, restituisce
// l'output testuale (stessa forma dell'output Python).
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;
}

function maxSymbol(matrix) {
  const nCol = matrix[0].length;
  const risultato = [];
  for (let i = 0; i < nCol; i++) {
    const symbolCount = new Map();
    for (const row of matrix) {
      const symbol = row[i];
      symbolCount.set(symbol, (symbolCount.get(symbol) ?? 0) + 1);
    }
    let bestSymbol = null;
    let bestCount = -1;
    for (const [symbol, count] of symbolCount) {
      if (count > bestCount) {
        bestCount = count;
        bestSymbol = symbol;
      }
    }
    risultato.push(bestSymbol);
  }
  return risultato;
}

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

  if (matrix.length === 0 || matrix.some((r) => r.length !== matrix[0].length)) {
    throw new Error("Input non valido: attesi record FASTA della stessa lunghezza");
  }

  return `${maxSymbol(matrix).join("")}\n`;
}