es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Control de versión para medicamentos

Necesito ayuda con un algoritmo.

Estoy rastreando los medicamentos tomados por un paciente. Terminaré con entradas como estas:

1/1/22 DrugA 5mg Empezó a tomar DrugA
1/1/22 DrugB 5mg Empezó a tomar DrugB
1/3/22 DrugA 10mg Aumentó la dosis de DrugA
1/5/22 DrugB 0mg Dejó de tomar DrugB

Y a partir de eso, necesito poder producir lo siguiente:

1/1/22 DrugA 5mg; DrugB 5mg
1/2/22 DrugA 5mg; DrugB 5mg
1/3/22 DrugA 10mg; DrugB 5mg
1/4/22 DrugA 10mg; DrugB 5mg
1/5/22 DrugA 10mg
1/6/22 DrugA 10mg

En otras palabras, a partir de las entradas que describen cambios en la dosis del medicamento, necesito poder mostrar exactamente qué medicamentos y dosis se tomaron en cualquier día dado.

Es un poco como el control de versiones en el que se rastrean los cambios pero se puede reproducir todo en cualquier momento.

Para ser claro, almacenaría esta información en una base de datos o algo así. Sería más simple almacenarlo en memoria.

¿Alguien puede sugerir un algoritmo que pueda manejar este caso? Necesitaría implementarlo en C#.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Un posible algoritmo para resolver este problema es el siguiente:

    1. Leer los datos de entrada de medicamentos y almacenarlos en una lista o matriz de objetos. Cada objeto debe tener campos para la fecha, el nombre del medicamento, la dosis y la acción (iniciado, incrementado o detenido).
    2. Ordenar los datos de medicación por fecha, de modo que las entradas estén en orden cronológico.

    3. Crear un diccionario que almacenará los datos diarios de medicación. Las claves del diccionario serán las fechas y los valores serán otro diccionario que asigna nombres de medicamentos a sus dosis.

    4. Recorrer los datos de medicación en orden cronológico y actualizar el diccionario diario de medicación en consecuencia. Para cada entrada de medicación:

    • Si la acción es “iniciado” o “incrementado”, añadir o actualizar el medicamento en el diccionario diario de medicación con su nueva dosis.
    • Si la acción es “detenido”, eliminar el medicamento del diccionario diario de medicación.
    1. Una vez completado el diccionario diario de medicación, iterar sobre las fechas en orden y mostrar los datos de medicación para cada día.

    En C#, puedes implementar este algoritmo utilizando clases para representar las entradas de medicación y los datos diarios de medicación, y utilizar LINQ para ordenar y recorrer los datos de medicación. Aquí tienes un código de muestra:

    “`csharp
    class MedicationEntry {
    public DateTime Date { get; set; }
    public string Name { get; set; }
    public int Dosage { get; set; }
    public string Action { get; set; }
    }

    class DailyMedication {
    public DateTime Date { get; set; }
    public Dictionary<string, int=””> Medications { get; set; }
    }

    // suponiendo que las entradas de medicación se almacenan en una lista List llamada entries
    var sortedEntries = entries.OrderBy(e => e.Date).ToList();

    var dailyMeds = new Dictionary<datetime,></datetime,><string, int=””>>();
    foreach (var entry in sortedEntries) {
    DateTime date = entry.Date.Date;
    if (!dailyMeds.ContainsKey(date)) {
    dailyMeds[date] = new Dictionary<string, int=””>();
    }
    if (entry.Action == “iniciado” || entry.Action == “incrementado”) {
    dailyMeds[date][entry.Name] = entry.Dosage;
    } else if (entry.Action == “detenido”) {
    dailyMeds[date].Remove(entry.Name);
    }
    }

    foreach (var dailyMed in dailyMeds.OrderBy(kv => kv.Key)) {
    string output = $”{dailyMed.Key.ToShortDateString()} “;
    foreach (var medication in dailyMed.Value.OrderBy(kv => kv.Key)) {
    output += $”{medication.Key} {medication.Value}mg; “;
    }
    Console.WriteLine(output.TrimEnd(‘;’));
    }
    “`</string,></string,></string,>

Comments are closed.