ETL

ETL

Εύκολο

Εισαγωγή

Εργάζεσαι σε μια εταιρεία που φτιάχνει ένα διαδικτυακό παιχνίδι για πολλούς παίκτες, το Lexiconia.

Για να παίξεις το παιχνίδι, κάθε παίκτης παίρνει 13 γράμματα, τα οποία πρέπει να αναδιατάξει για να σχηματίσει λέξεις. Διαφορετικά γράμματα έχουν διαφορετική αξία πόντων, αφού με μερικά γράμματα είναι πιο εύκολο να σχηματίσεις λέξεις απ' ό,τι με άλλα.

Το παιχνίδι κυκλοφόρησε αρχικά στα αγγλικά, αλλά είναι πολύ δημοφιλές, και τώρα η εταιρεία θέλει να επεκταθεί και σε άλλες γλώσσες.

Διαφορετικές γλώσσες χρειάζεται να υποστηρίζουν διαφορετικές τιμές πόντων για τα γράμματα. Οι τιμές πόντων καθορίζονται από το πόσο συχνά χρησιμοποιούνται τα γράμματα σε σχέση με τα άλλα γράμματα αυτής της γλώσσας.

Για παράδειγμα, το γράμμα 'C' είναι αρκετά συνηθισμένο στα αγγλικά, και αξίζει μόνο 3 πόντους. Στα νορβηγικά όμως είναι ένα πολύ σπάνιο γράμμα, και αξίζει 10 πόντους.

Για να είναι πιο εύκολη η προσθήκη νέων γλώσσων, η ομάδα σου πρέπει να αλλάξει τον τρόπο με τον οποίο αποθηκεύονται στο παιχνίδι τα γράμματα και οι τιμές τους.

Οδηγίες

Η αποστολή σου είναι να αλλάξεις τη μορφή δεδομένων των γραμμάτων και των βαθμών τους στο παιχνίδι.

Προς το παρόν, τα γράμματα είναι αποθηκευμένα σε ομάδες με βάση τη βαθμολογία τους, σε αντιστοίχιση ένα-προς-πολλά.

  • 1 βαθμός: "A", "E", "I", "O", "U", "L", "N", "R", "S", "T",
  • 2 βαθμοί: "D", "G",
  • 3 βαθμοί: "B", "C", "M", "P",
  • 4 βαθμοί: "F", "H", "V", "W", "Y",
  • 5 βαθμοί: "K",
  • 8 βαθμοί: "J", "X",
  • 10 βαθμοί: "Q", "Z",

Αυτό πρέπει να αλλάξει ώστε να αποθηκεύεται κάθε μεμονωμένο γράμμα με τη βαθμολογία του σε αντιστοίχιση ένα-προς-ένα.

  • Το "a" αξίζει 1 βαθμό.
  • Το "b" αξίζει 3 βαθμούς.
  • Το "c" αξίζει 3 βαθμούς.
  • Το "d" αξίζει 2 βαθμούς.
  • κ.λπ.

Ως μέρος αυτής της αλλαγής, η ομάδα αποφάσισε επίσης να αλλάξει τα γράμματα σε πεζά αντί για κεφαλαία.

Note

Αν θέλεις να δεις πώς ήταν δομημένα προηγουμένως τα δεδομένα και πώς πρέπει να αλλάξουν, ρίξε μια ματιά στα παραδείγματα στη σουίτα δοκιμών.

Συμβουλές για τη jq

Αυτή η άσκηση αφορά τη λήψη ενός αντικειμένου εισόδου και τον μετασχηματισμό του σε ένα νέο αντικείμενο. Μερικές ενσωματωμένες συναρτήσεις που μπορεί να βοηθήσουν:

  • to_entries
    • αυτή η συνάρτηση παίρνει ως είσοδο ένα αντικείμενο
    • βγάζει έναν πίνακα: κάθε στοιχείο του πίνακα είναι ένα αντικείμενο {"key": "K", "value": V}
      • κάθε K είναι ένα κλειδί από το αντικείμενο εισόδου
      • κάθε V είναι η αντίστοιχη τιμή του K.
  • from_entries
    • η αντίστροφη πράξη
    • παίρνει έναν πίνακα από αντικείμενα {"key": K, "value": V} και κατασκευάζει ένα αντικείμενο

Ένα παράδειγμα:

jq -n '
    {
        "username": "glennj",
        "tracks": ["bash", "awk", "jq"],
        "reputation": 123
    }
    | to_entries
'

βγάζει

[
  {
    "key": "username",
    "value": "glennj"
  },
  {
    "key": "tracks",
    "value": ["bash", "awk", "jq"]
  },
  {
    "key": "reputation",
    "value": 123
  }
]
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
jq Exercism

Έτοιμος να ξεκινήσεις την άσκηση ETL;

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