Διαδρομές
/
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);
  • Χρησιμοποίησε συναρτήσεις με σώμα έκφρασης για συναρτήσεις με μία μόνο έκφραση. Π.χ. συναρτήσεις που έχουν μόνο την εντολή return.
   function cfr(int deaths, int cases) returns decimal => <decimal>deaths / <decimal>cases * 100;
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Ballerina Exercism

Έτοιμος να ξεκινήσεις την άσκηση Επίδομα καυσίμου JSON;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Ballerina με 60 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.