Треки
/
Ballerina
Ballerina
/
Вправи
/
Виплата на пальне у форматі JSON
Виплата на пальне у форматі JSON

Виплата на пальне у форматі JSON

Середня

Вказівки

Постановка задачі

Кожен працівник ABC Corp отримує необмежений ліміт на пальне. Працівники мають надсилати запис щоразу, коли заправляють свої автомобілі. Ці записи додаються до одного й того самого файлу JSON і обробляються в кінці місяця.

Ми, як члени команди цифрових операцій, маємо прочитати цей файл JSON і записати результати в інший файл JSON. Вихідний файл має містити запис для кожного працівника з такими даними:

  • Номер працівника
  • Кількість заправок
  • Загальна вартість пального
  • Загальна кількість галонів
  • Загальний пробіг у милях

Ми отримуємо два аргументи string.

  1. Шлях до вхідного файлу JSON.
  2. Шлях до вихідного файлу JSON.

Вхідний файл JSON містить масив обʼєктів JSON. Кожен обʼєкт JSON має такий вигляд.

{
    "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;
|};

Наше завдання - перетворити вхідні дані JSON у наведений нижче формат JSON і записати вміст за вказаним шляхом. Вихідний файл має містити запис для кожного працівника, відсортований за зростанням 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;
|};

Обмеження

  • Кількість записів про заправки n у вхідному файлі JSON: 0 <= n <= 1000
  • Кількість працівників у компанії: 97
  • Ціна пального вказана за галон
  • Пропущених записів про заправки немає

Приклад 1

  • Вхідні дані: example01_input.json
[
    {
        "employeeId": 2312,
        "odometerReading": 230,
        "gallons": 18.561,
        "gasPrice": 4.56
    },
    {
        "employeeId": 2312,
        "odometerReading": 500,
        "gallons": 19.345,
        "gasPrice": 4.89
    }
]
  • Вихідні дані: example01_output.json
[
    {
        "employeeId": 2312,
        "gasFillUpCount": 2,
        "totalFuelCost": 179.23521,
        "totalGallons": 37.906,
        "totalMilesAccrued": 270
    }
]

Приклад 2

  • Вхідні дані: 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
    }
]

  • Вихідні дані: 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
    }
]

Підказки

   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);
  • Використовуйте функції з тілом-виразом для функцій з єдиним виразом. Наприклад, для функцій, які містять лише інструкцію повернення значення.
   function cfr(int deaths, int cases) returns decimal => <decimal>deaths / <decimal>cases * 100;
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Ballerina Exercism

Час розпочати Виплата на пальне у форматі JSON?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Ballerina, а також 60 вправ та справжнє наставництво від людей, і все це безкоштовно.