Kurzusok
/
Ballerina
Ballerina
/
Feladatok
/
JSON üzemanyag-támogatás
JSON üzemanyag-támogatás

JSON üzemanyag-támogatás

Közepes

Utasítások

Problémafelvetés

Az ABC Corp minden alkalmazottja korlátlan üzemanyag-juttatást kap. Az alkalmazottaknak minden tankolás alkalmával be kell küldeniük egy bejegyzést. A bejegyzéseket ugyanahhoz a JSON-fájlhoz fűzik hozzá, és a hónap végén dolgozzák fel őket.

A digitális üzemeltetési csapat tagjaként a feladatod, hogy beolvasd ezt a JSON-fájlt, és az eredményeket egy másik JSON-fájlba írd. A kimeneti fájlnak minden alkalmazotthoz egy bejegyzést kell tartalmaznia a következő adatokkal:

  • Alkalmazotti szám
  • Tankolások száma
  • Üzemanyag összköltsége
  • Összes gallon
  • Összes megtett mérföld

Két string argumentumot kapsz.

  1. A bemeneti JSON-fájl elérési útja.
  2. A kimeneti JSON-fájl elérési útja.

A bemeneti JSON-fájl JSON-objektumok tömbjét tartalmazza. Minden JSON-objektum a következő formájú.

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

A feladatod, hogy a JSON-bemenetet a következő JSON-formátumra alakítsd, és a tartalmat a megadott elérési útra írd. A kimeneti fájlnak minden alkalmazotthoz egy bejegyzést kell tartalmaznia, az employeeId szerint növekvő sorrendbe rendezve.

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

Megkötések

  • A bemeneti JSON-fájlban lévő tankolási bejegyzések száma n: 0 <= n <= 1000
  • A vállalat alkalmazottainak száma: 97
  • A benzin ára gallononként értendő
  • Nincs hiányzó tankolási bejegyzés

1. példa

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

2. példa

  • Bemenet: 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
    }
]

  • Kimenet: 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
    }
]

Tippek

   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);
  • Egyetlen kifejezésből álló függvényeknél használj kifejezéstörzsű függvényeket. Például azoknál, amelyekben csak a visszatérési utasítás szerepel.
   function cfr(int deaths, int cases) returns decimal => <decimal>deaths / <decimal>cases * 100;
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Ballerina Exercism

Készen állsz elkezdeni a(z) JSON üzemanyag-támogatás feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Ballerina nyelvet 60 feladat segítségével, valódi emberi mentorálással, mindez ingyen.