← Catalogo
IEV
PyJS

Calculating Expected Offspring

HeredityProbability

Pagina originale su rosalind.info

Descrizione

Il valore atteso di una variabile casuale X è E(X) = somma su k di k × Pr(X=k). Il problema chiede di calcolare il numero atteso di discendenti con fenotipo dominante nella generazione successiva, data una popolazione di coppie con genotipi noti, assumendo che ogni coppia abbia esattamente due discendenti.

Given

Sei interi non negativi, ciascuno non superiore a 20.000, che rappresentano il numero di coppie con ciascuna delle seguenti combinazioni genotipiche: AA-AA, AA-Aa, AA-aa, Aa-Aa, Aa-aa, aa-aa.

Return

Il numero atteso di discendenti con fenotipo dominante nella generazione successiva, assumendo che ogni coppia abbia esattamente due discendenti.

Sample Dataset

1 0 0 1 0 1

Sample Output

3.5

La mia esecuzione

08/24/2026 11:24:47

Input · dataset.txt

18649 19659 17417 19345 17825 19584





Output · run_log.txt

OK
158292.5

Esegui nel browser · Pyodide

Mostra il codice sorgente (problem.py)
def lettura(filename):
    with open(filename) as f:
        dati = f.readline().rstrip("\n").split(" ")
    return dati

def main():
    dati = lettura("dataset.txt")

    #AA-AA
    #AA-Aa
    #AA-aa
    #Aa-Aa
    #Aa-aa
    #aa-aa
    evts = [4, 4, 4, 3, 2, 0]

    tot = 0
    for i in range(len(evts)):
        tot += evts[i] * int(dati[i]) * 1/2
    print(tot)

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

Soluzione JavaScript

Esegui ora, live

Mostra il codice sorgente
// Calculating Expected Offspring (Rosalind ID: IEV) - soluzione
// JavaScript indipendente, non una trascrizione di problem.py: stessa
// logica (numero atteso di figli dominanti per ciascuna delle 6 coppie
// genotipiche, sommato su 2 figli per coppia), riscritta in modo
// idiomatico per JS.
//
// Nota sul formato numero: come l'originale Python, il risultato è
// sempre un multiplo di 0.5 (esatto in virgola mobile binaria), quindi
// per riprodurre l'output di print() - "N.0" per un intero, "N.5" per
// un valore frazionario - basta un controllo su Number.isInteger.
//
// Contratto: riceve il contenuto testuale di dataset.txt, restituisce
// l'output testuale (stessa forma dell'output Python).
const EVTS = [4, 4, 4, 3, 2, 0];

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

  if (dati.length !== 6 || dati.some((d) => !/^\d+$/.test(d))) {
    throw new Error(`Input non valido: attesi 6 interi, ricevuto "${dati.join(" ")}"`);
  }

  let tot = 0;
  for (let i = 0; i < EVTS.length; i++) {
    tot += EVTS[i] * Number(dati[i]) * 0.5;
  }

  const testo = Number.isInteger(tot) ? tot.toFixed(1) : String(tot);
  return `${testo}\n`;
}