Skip to content

Latest commit

 

History

History
96 lines (73 loc) · 6.36 KB

File metadata and controls

96 lines (73 loc) · 6.36 KB
layout
default

Κώδικες για τα προβλήματα ΠΔΠ

Οι παρακάτω οδηγίες περιγράφουν πώς μπορείτε να προσθέσετε λύσεις ώστε να ελέγχετε εύκολα αν περνάνε τα testcases. Παρότι τα testcases κατεβαίνουν αυτόματα αν έχετε internet, μπορείτε για offline χρήση να τα κατεβάζετε από το drive και να τα βάλετε στον αντίστοιχο φάκελο (εν προκειμένω _includes/source_code/testdata/31-PDP/hydrocarbons/). Είτε το κάνετε χειροκίνητα, είτε αφήσετε μόνο του το σύστημα να τα κατεβάσει από το internet, τρέχετε όλες τις υπάρχουσες λύσεις με την εντολή

bash tester.sh hydrocarbons

ή αν θέλετε να περιορίσετε τα αποτελέσματα για μία συγκεκριμένη λύση, μπορείτε να τρέξετε:

bash tester.sh {codename}:{solution name}

ή αν θέλετε να τρέξετε όλα τα προβλήματα που είναι στον φάκελο, μπορείτε να τρέξετε:

bash tester.sh

Για να τρέξετε το tester.sh, πρέπει να έχετε έκδοση του g++ που υποστηρίζει την C++17 (και στα Windows χρειάζεστε το Cygwin). Αν δεν το έχετε μπορείτε να τρέξετε bash generated_execution.sh, που τρέχει την τελευταία έκδοση του tester.sh.

Σημείωση 1: Εδώ μπορείτε να βρείτε μαζεμένα τα testcases για όλα τα προβλήματα στο pdp-archive. Κατεβάστε τα και κάντε τα unzip το αρχείο στον φάκελο _includes/source_code/. Αυτό σας επιτρέπει να τρέξετε λύσεις για όλα αυτά τα προβλήματα.

Σημείωση 2: Εδώ μπορείτε να βρείτε τα testcases ανά χρονιά και ανά πρόβλημα.

Γιατί χρειαζόμαστε αυτά τα εργαλεία

Υπάρχουν οι ακόλουθοι λόγοι:

  1. Είναι ένας τρόπος να κρατάμε ποια testcases περνούσε η κάθε λύση.
  2. Μπορούμε να κρατάμε όλες τις πληροφορίες που έχουν τα pdf αρχεία των ενδεικτικών λύσεων (πχ ποιος την έγραψε και από ποιο σχολείο) σε δομημένη μορφή.
  3. Μπορούμε να κάνουμε grade εύκολα μία καινούργια λύση (ή να αλλάξουμε κάποιον περιορισμό).

Οδηγίες

Προσθέστε TASK

Ακολουθήστε τα εξής βήματα:

  1. Δημιουργήστε τον φάκελο _includes/source_code/code/XX-PDP/{codename}.

  2. Στον φάκελο που μόλις δημιουργήσατε, δημιουργήστε ένα αρχείο TASK που θα έχει την εξής δομή:

    TASK(
       name = "{codename}",
       test_count = {Αριθμός των testcases},
       files_dir = "testdata/XX-PDP/{codename}/",
       input_file = "{codename}.in",
       output_file = "{codename}.out",
       time_limit = {Όριο χρόνου σε δευτερόλεπτα},
       solutions = [],
    )
    
  3. Προσθέστε στο _includes/source_code/testdata/XX-PDP/{codename} τα testcases. Πρέπει να έχουν τη μορφή codename.in1, codename.out15, κ.λπ.

  4. Προσθέστε τις λύσεις ακολουθώντας τις παρακάτω οδηγίες.

Προσθέστε SOLUTION

Ακολυθήστε τα εξής βήματα:

  1. Βάλτε το αρχείο με την λύση στον φάκελο _includes/source_code/code/XX-PDP/{codename}
  2. Προσθέστε στο αρχείο TASK τις λεπτομέρειες της λύσης σας:
    TASK(
        ...
        solutions = [
           SOLUTION(
              name = "{codename λύσης - πρέπει να είναι μοναδικό}",
              source = "{όνομα αρχείου λύσης}",
              {Ένα από τα εξής: passes_all, passes_only = [1, 2, 3], passes_all_except_for = [5, 10]}, 
              lang = "{Μία από τις: c++, c, pas}",
              author = PERSON(
                 name = "{Το όνομα ή ψευδόνυμό σας. Ή το όνομα του μαθητή υπέβαλε τη λύση}", 
                 school = "{To σχολείο του μαθητή αν ήταν ενδεικτική λύση}",
              ),
           ),
        ],
        ...
    )
    
  3. Βεβαιωθείτε ότι η λύση σας περνάει τα testcases που αναφέρατε, τρέχοντας bash tester.sh {codename}:{codename λύσης}.
  4. Στο _data/XX-PDP.yml στο πρόβλημα για το οποίο προσθέτετε κώδικες, αντικαταστήστε το codes_url: ... με codes_in_git: true.

Δείτε ένα παράδειγμα commit.

Προβλήματα

Αυτά τα εργαλεία έχουν τα εξής προβλήματα:

  1. Δεν υποστηρίζουν ακόμα λύσεις σε Pascal.
  2. Ο κώδικας για το test_parser.cc δεν είναι καθαρογραμμένος και δεν έχει καθόλου καλά σχόλια.
  3. Δεν υπάρχουν έλεγχοι για διάφορα κοινά λάθη (πχ ότι κάθε αρχείο κώδικα αντιστοιχεί σε μία λύση), αλλά δεν θα έπρεπε να είναι δύσκολο να προστεθούν.
  4. Δεν υπάρχει περιορισμός για την μνήμη που χρησιμοποιεί ένα πρόγραμμα.