Rutas
/
Ballerina
Ballerina
/
Ejercicios
/
Subsidio de combustible en JSON
Subsidio de combustible en JSON

Subsidio de combustible en JSON

Media

Instrucciones

Enunciado del problema

Todos los empleados de ABC Corp reciben una asignación de combustible ilimitada. Los empleados deben enviar un registro cada vez que repostan sus vehículos. Estos registros se añaden al mismo archivo JSON y se procesan al final del mes.

Como miembro del equipo de operaciones digitales, tu tarea consiste en leer este archivo JSON y escribir los resultados en otro archivo JSON. El archivo de salida debe contener una entrada por cada empleado con los siguientes datos:

  • Número de empleado
  • Número de repostajes
  • Coste total del combustible
  • Total de galones
  • Total de millas acumuladas

Recibes dos argumentos de tipo string.

  1. Ruta del archivo JSON de entrada.
  2. Ruta del archivo JSON de salida.

El archivo JSON de entrada contiene un array de objetos JSON. Cada objeto JSON tiene la siguiente forma.

{
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "employeeId": {
                "type": "integer"
            },
            "odometerReading": {
                "type": "integer"
            },
            "gallons": {
                "type": "number"
            },
            "gasPrice": {
                "type": "number"
            }
        },
        "required": [
            "employeeId",
            "odometerReading",
            "gallons",
            "gasPrice"
        ]
    }
}
// Ballerina record type definition
type FillUpEntry record {|
    int employeeId;
    int odometerReading;
    decimal gallons;
    decimal gasPrice;
|};

Tu tarea consiste en transformar la entrada JSON al siguiente formato JSON y escribir el contenido en la ruta indicada. El archivo de salida debe contener una entrada por cada empleado, ordenadas de forma ascendente por employeeId.

{
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "employeeId": {
                "type": "integer"
            },
            "gasFillUpCount": {
                "type": "integer"
            },
            "totalFuelCost": {
                "type": "number"
            },
            "totalGallons": {
                "type": "number"
            },
            "totalMilesAccrued": {
                "type": "integer"
            }
        },
        "required": [
            "employeeId",
            "gasFillUpCount",
            "totalFuelCost",
            "totalGallons",
            "totalMilesAccrued"
        ]
    }
 }
// Ballerina record type definition
type EmployeeFillUpSummary record {|
    int employeeId;
    int gasFillUpCount;
    decimal totalFuelCost;
    decimal totalGallons;
    int totalMilesAccrued;
|};

Restricciones

  • Número de registros de repostaje n en el archivo JSON de entrada: 0 <= n <= 1000
  • Número de empleados en la empresa: 97
  • El precio de la gasolina es por galón
  • No faltan registros de repostaje

Ejemplo 1

  • Entrada: example01_input.json
[
    {
        "employeeId": 2312,
        "odometerReading": 230,
        "gallons": 18.561,
        "gasPrice": 4.56
    },
    {
        "employeeId": 2312,
        "odometerReading": 500,
        "gallons": 19.345,
        "gasPrice": 4.89
    }
]
  • Salida: example01_output.json
[
    {
        "employeeId": 2312,
        "gasFillUpCount": 2,
        "totalFuelCost": 179.23521,
        "totalGallons": 37.906,
        "totalMilesAccrued": 270
    }
]

Ejemplo 2

  • Entrada: example02_input.json
[
    {
        "employeeId": 2413,
        "odometerReading": 4089,
        "gallons": 21.682,
        "gasPrice": 3.46
    },
    {
        "employeeId": 3423,
        "odometerReading": 6582,
        "gallons": 15.248,
        "gasPrice": 4.56
    },
    {
        "employeeId": 2413,
        "odometerReading": 4127,
        "gallons": 4.221,
        "gasPrice": 3.40
    },
    {
        "employeeId": 2413,
        "odometerReading": 4349,
        "gallons": 11.192,
        "gasPrice": 4.10
    },
    {
        "employeeId": 3423,
        "odometerReading": 6767,
        "gallons": 8.696,
        "gasPrice": 3.34
    },
    {
        "employeeId": 2413,
        "odometerReading": 4547,
        "gallons": 9.197,
        "gasPrice": 2.90
    }
]

  • Salida: example02_output.json
[
    {
        "employeeId": 2413,
        "gasFillUpCount": 4,
        "totalFuelCost": 161.92962,
        "totalGallons": 46.292,
        "totalMilesAccrued": 458
    },
    {
        "employeeId": 3423,
        "gasFillUpCount": 2,
        "totalFuelCost": 98.57552,
        "totalGallons": 23.944,
        "totalMilesAccrued": 185
    }
]

Pistas

   json jsonPayload = {id: "2", title: "Jeru", artist: "Gerry Mulligan", price: 17.99};

   // Using cloneWithType  
   Album album1 = check jsonPayload.cloneWithType();
   io:println(album1);
 
   // Using fromJsonWithType
   Album album2 = check jsonPayload.fromJsonWithType();
   io:println(album2);
   Album {id, title, artist, price} = album1;
   io:println(id);
   io:println(title);
  • Usa funciones con cuerpo de expresión para las funciones que tienen una sola expresión. Por ejemplo, funciones que solo tienen la instrucción de retorno.
   function cfr(int deaths, int cases) returns decimal => <decimal>deaths / <decimal>cases * 100;
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Ballerina Exercism

¿Listo para empezar Subsidio de combustible en JSON?

Regístrate en Exercism para aprender y dominar Ballerina con 60 ejercicios y mentoría humana real, todo gratis.