Η διεπαφή του αναπαραστάτη


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

Εκτέλεση

  • Ένας Representer θα πρέπει να παρέχει ένα εκτελέσιμο script. Μπορείς να βρεις περισσότερες πληροφορίες στο αρχείο docker.md.
  • Το script θα λάβει τρεις παραμέτρους:
    • Το slug της άσκησης (π.χ. two-fer).
    • Μια διαδρομή προς έναν κατάλογο που περιέχει το ή τα υποβληθέντα αρχεία (με κάθετο στο τέλος).
    • Μια διαδρομή προς έναν κατάλογο εξόδου (με κάθετο στο τέλος). Αυτός ο κατάλογος είναι εγγράψιμος.
  • Το script πρέπει να γράφει ένα αρχείο representation.txt στον κατάλογο εξόδου.
  • Το script πρέπει να γράφει ένα αρχείο representation.json στον κατάλογο εξόδου.
  • Το script πρέπει να γράφει ένα αρχείο mapping.json στον κατάλογο εξόδου.

Επιτρεπόμενος χρόνος εκτέλεσης

Ο Representer έχει στη διάθεσή του το 100% των πόρων του μηχανήματος για ένα παράθυρο 20 δευτερολέπτων ανά λύση. Μετά τα 20 δευτερόλεπτα, η διεργασία σταματά και αναφέρει λήξη χρόνου.

Note

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

Μορφή εξόδου

representation.txt

Το αρχείο representation.txt περιέχει κάποιου είδους κανονική αναπαράσταση. Αυτή η αναπαράσταση μπορεί να πάρει πολλές μορφές, αλλά συνήθως είναι ένα AST:

s(:class,
  s(:const, nil, :PLACEHOLDER_1), nil,
  s(:begin,
    s(:def, :PLACEHOLDER_2,
      s(:args),
      s(:begin,
        s(:lvasgn, :PLACEHOLDER_3,
          s(:str, "foo")),
        s(:lvasgn, :PLACEHOLDER_4,
          s(:str, "foo")),
        s(:return,
          s(:lvar, :PLACEHOLDER_3)))),
    s(:def, :PLACEHOLDER_3,
      s(:args),
      s(:const, nil, :PLACEHOLDER_1))))

Η αναπαράσταση θα μπορούσε επίσης να είναι απλώς (κανονικοποιημένος) πηγαίος κώδικας:

class PLACEHOLDER_1
  def PLACEHOLDER_2
    PLACEHOLDER_3 = "foo"
    PLACEHOLDER_4 = "foo"
    return PLACEHOLDER_3
  end

  def PLACEHOLDER_3
    PLACEHOLDER_1
  end
end

mapping.json

Το αρχείο mapping.json αντιστοιχίζει τα placeholders στις αρχικές τους τιμές:

{
  "PLACEHOLDER_1": "TwoFer",
  "PLACEHOLDER_2": "two_fer",
  "PLACEHOLDER_3": "foo",
  "PLACEHOLDER_4": "bar"
}

Είναι σημαντικό να σημειώσεις ότι όλα τα ίδια ονόματα πρέπει να αντικαθίστανται από το ίδιο placeholder, ανεξάρτητα από την εμβέλεια.

representation.json

Το αρχείο representation.json περιέχει μεταδεδομένα:

  • version: ο αριθμός έκδοσης του Representer (προεπιλογή το 1)

Παράδειγμα:

{ "version": 2 }