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 ανά χρονιά και ανά πρόβλημα.
Υπάρχουν οι ακόλουθοι λόγοι:
- Είναι ένας τρόπος να κρατάμε ποια testcases περνούσε η κάθε λύση.
- Μπορούμε να κρατάμε όλες τις πληροφορίες που έχουν τα pdf αρχεία των ενδεικτικών λύσεων (πχ ποιος την έγραψε και από ποιο σχολείο) σε δομημένη μορφή.
- Μπορούμε να κάνουμε grade εύκολα μία καινούργια λύση (ή να αλλάξουμε κάποιον περιορισμό).
Ακολουθήστε τα εξής βήματα:
-
Δημιουργήστε τον φάκελο
_includes/source_code/code/XX-PDP/{codename}
. -
Στον φάκελο που μόλις δημιουργήσατε, δημιουργήστε ένα αρχείο
TASK
που θα έχει την εξής δομή:TASK( name = "{codename}", test_count = {Αριθμός των testcases}, files_dir = "testdata/XX-PDP/{codename}/", input_file = "{codename}.in", output_file = "{codename}.out", time_limit = {Όριο χρόνου σε δευτερόλεπτα}, solutions = [], )
-
Προσθέστε στο
_includes/source_code/testdata/XX-PDP/{codename}
τα testcases. Πρέπει να έχουν τη μορφήcodename.in1
,codename.out15
, κ.λπ. -
Προσθέστε τις λύσεις ακολουθώντας τις παρακάτω οδηγίες.
Ακολυθήστε τα εξής βήματα:
- Βάλτε το αρχείο με την λύση στον φάκελο
_includes/source_code/code/XX-PDP/{codename}
- Προσθέστε στο αρχείο 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 σχολείο του μαθητή αν ήταν ενδεικτική λύση}", ), ), ], ... )
- Βεβαιωθείτε ότι η λύση σας περνάει τα testcases που αναφέρατε, τρέχοντας
bash tester.sh {codename}:{codename λύσης}
. - Στο
_data/XX-PDP.yml
στο πρόβλημα για το οποίο προσθέτετε κώδικες, αντικαταστήστε τοcodes_url: ...
μεcodes_in_git: true
.
Δείτε ένα παράδειγμα commit.
Αυτά τα εργαλεία έχουν τα εξής προβλήματα:
- Δεν υποστηρίζουν ακόμα λύσεις σε Pascal.
- Ο κώδικας για το
test_parser.cc
δεν είναι καθαρογραμμένος και δεν έχει καθόλου καλά σχόλια. - Δεν υπάρχουν έλεγχοι για διάφορα κοινά λάθη (πχ ότι κάθε αρχείο κώδικα αντιστοιχεί σε μία λύση), αλλά δεν θα έπρεπε να είναι δύσκολο να προστεθούν.
- Δεν υπάρχει περιορισμός για την μνήμη που χρησιμοποιεί ένα πρόγραμμα.